@sectile/vue 0.18.3 → 0.20.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 (286) hide show
  1. package/README.md +127 -14
  2. package/dist/accordion.js +1 -1
  3. package/dist/accordion.js.map +1 -1
  4. package/dist/carousel.d.ts +20 -0
  5. package/dist/carousel.js +1 -1
  6. package/dist/carousel.js.map +1 -1
  7. package/dist/cascade-list.js +1 -1
  8. package/dist/cascade-list.js.map +1 -1
  9. package/dist/cascade-select.js +1 -1
  10. package/dist/cascade-select.js.map +1 -1
  11. package/dist/chart.js +1 -1
  12. package/dist/chart.js.map +1 -1
  13. package/dist/checkbox-group.js +1 -1
  14. package/dist/checkbox-group.js.map +1 -1
  15. package/dist/checkbox-tree.d.ts +102 -0
  16. package/dist/checkbox-tree.js +2 -0
  17. package/dist/checkbox-tree.js.map +1 -0
  18. package/dist/checkbox.js +1 -1
  19. package/dist/checkbox.js.map +1 -1
  20. package/dist/color-picker.d.ts +24 -0
  21. package/dist/color-picker.js +1 -1
  22. package/dist/color-picker.js.map +1 -1
  23. package/dist/combobox.d.ts +47 -1
  24. package/dist/combobox.js +1 -1
  25. package/dist/combobox.js.map +1 -1
  26. package/dist/component-handle.d.ts +8 -0
  27. package/dist/component-handle.js +2 -0
  28. package/dist/component-handle.js.map +1 -0
  29. package/dist/context-menu.d.ts +1 -0
  30. package/dist/context-menu.js +2 -0
  31. package/dist/context-menu.js.map +1 -0
  32. package/dist/drag-drop.d.ts +23 -0
  33. package/dist/drag-drop.js +2 -0
  34. package/dist/drag-drop.js.map +1 -0
  35. package/dist/editable.d.ts +3 -0
  36. package/dist/editable.js +1 -1
  37. package/dist/editable.js.map +1 -1
  38. package/dist/form/context.d.ts +3 -0
  39. package/dist/form/context.js +1 -1
  40. package/dist/form/context.js.map +1 -1
  41. package/dist/form/contracts.d.ts +1 -0
  42. package/dist/form/control-inventory.d.ts +20 -0
  43. package/dist/form/control-inventory.js +1 -1
  44. package/dist/form/control-inventory.js.map +1 -1
  45. package/dist/form/control.d.ts +44 -1
  46. package/dist/form/control.js +1 -1
  47. package/dist/form/control.js.map +1 -1
  48. package/dist/form/field.d.ts +10 -0
  49. package/dist/form/field.js +1 -1
  50. package/dist/form/field.js.map +1 -1
  51. package/dist/form/file-input.d.ts +229 -0
  52. package/dist/form/file-input.js +2 -0
  53. package/dist/form/file-input.js.map +1 -0
  54. package/dist/form/file-upload/group.d.ts +28 -0
  55. package/dist/form/file-upload/group.js +2 -0
  56. package/dist/form/file-upload/group.js.map +1 -0
  57. package/dist/form/file-upload.d.ts +26 -0
  58. package/dist/form/file-upload.js +2 -0
  59. package/dist/form/file-upload.js.map +1 -0
  60. package/dist/form/root.js +1 -1
  61. package/dist/form/root.js.map +1 -1
  62. package/dist/form-boundary.d.ts +2 -0
  63. package/dist/form-boundary.js +2 -0
  64. package/dist/form-boundary.js.map +1 -0
  65. package/dist/fullscreen.d.ts +16 -0
  66. package/dist/fullscreen.js +2 -0
  67. package/dist/fullscreen.js.map +1 -0
  68. package/dist/host-provider.d.ts +99 -1
  69. package/dist/host-provider.js +1 -1
  70. package/dist/host-provider.js.map +1 -1
  71. package/dist/image.d.ts +24 -0
  72. package/dist/image.js +2 -0
  73. package/dist/image.js.map +1 -0
  74. package/dist/index.d.ts +6 -5
  75. package/dist/index.js +1 -1
  76. package/dist/index.js.map +1 -1
  77. package/dist/input/native-field.d.ts +33 -6
  78. package/dist/input/native-field.js +1 -1
  79. package/dist/input/native-field.js.map +1 -1
  80. package/dist/input/native-range-field.d.ts +16 -7
  81. package/dist/input/native-range-field.js +1 -1
  82. package/dist/input/native-range-field.js.map +1 -1
  83. package/dist/internal/cascade-choice.js +1 -1
  84. package/dist/internal/cascade-choice.js.map +1 -1
  85. package/dist/internal/connection-lifetime.d.ts +10 -0
  86. package/dist/internal/connection-lifetime.js +2 -0
  87. package/dist/internal/connection-lifetime.js.map +1 -0
  88. package/dist/internal/popup-presentation.d.ts +32 -0
  89. package/dist/internal/popup-presentation.js +2 -0
  90. package/dist/internal/popup-presentation.js.map +1 -0
  91. package/dist/internal/portal-move.d.ts +11 -0
  92. package/dist/internal/portal-move.js +2 -0
  93. package/dist/internal/portal-move.js.map +1 -0
  94. package/dist/internal/scheduled-task.js +1 -1
  95. package/dist/internal/scheduled-task.js.map +1 -1
  96. package/dist/internal/tabs-context.d.ts +11 -0
  97. package/dist/internal/tabs-context.js +1 -1
  98. package/dist/internal/tabs-context.js.map +1 -1
  99. package/dist/internal/tree-parts.d.ts +142 -0
  100. package/dist/internal/tree-parts.js +2 -0
  101. package/dist/internal/tree-parts.js.map +1 -0
  102. package/dist/listbox.d.ts +11 -0
  103. package/dist/listbox.js +1 -1
  104. package/dist/listbox.js.map +1 -1
  105. package/dist/media-gesture.d.ts +20 -0
  106. package/dist/media-gesture.js +2 -0
  107. package/dist/media-gesture.js.map +1 -0
  108. package/dist/menu.d.ts +239 -0
  109. package/dist/menu.js +1 -1
  110. package/dist/menu.js.map +1 -1
  111. package/dist/meter-group.js +1 -1
  112. package/dist/meter-group.js.map +1 -1
  113. package/dist/multi-thumb-slider.js +1 -1
  114. package/dist/multi-thumb-slider.js.map +1 -1
  115. package/dist/number-field.d.ts +18 -1
  116. package/dist/number-field.js +1 -1
  117. package/dist/number-field.js.map +1 -1
  118. package/dist/overlay/dialog.d.ts +1 -0
  119. package/dist/overlay/dialog.js.map +1 -1
  120. package/dist/overlay/drawer.d.ts +33 -4
  121. package/dist/overlay/drawer.js +1 -1
  122. package/dist/overlay/drawer.js.map +1 -1
  123. package/dist/overlay/popover.d.ts +2 -1
  124. package/dist/overlay/popover.js.map +1 -1
  125. package/dist/overlay/popup.d.ts +50 -2
  126. package/dist/overlay/popup.js +1 -1
  127. package/dist/overlay/popup.js.map +1 -1
  128. package/dist/overlay/tooltip.d.ts +38 -3
  129. package/dist/overlay/tooltip.js +1 -1
  130. package/dist/overlay/tooltip.js.map +1 -1
  131. package/dist/pagination.js +1 -1
  132. package/dist/pagination.js.map +1 -1
  133. package/dist/pin-input.js +1 -1
  134. package/dist/pin-input.js.map +1 -1
  135. package/dist/presence/presence.d.ts +1 -1
  136. package/dist/presence/presence.js +1 -1
  137. package/dist/presence/presence.js.map +1 -1
  138. package/dist/primitive.d.ts +37 -3
  139. package/dist/primitive.js +1 -1
  140. package/dist/primitive.js.map +1 -1
  141. package/dist/quantity-field.js +1 -1
  142. package/dist/quantity-field.js.map +1 -1
  143. package/dist/radio-group.js +1 -1
  144. package/dist/radio-group.js.map +1 -1
  145. package/dist/rating.js +1 -1
  146. package/dist/rating.js.map +1 -1
  147. package/dist/reorder.d.ts +169 -77
  148. package/dist/reorder.js +1 -1
  149. package/dist/reorder.js.map +1 -1
  150. package/dist/select.d.ts +21 -0
  151. package/dist/select.js +1 -1
  152. package/dist/select.js.map +1 -1
  153. package/dist/slider.js +1 -1
  154. package/dist/slider.js.map +1 -1
  155. package/dist/spin-button.d.ts +19 -0
  156. package/dist/spin-button.js +1 -1
  157. package/dist/spin-button.js.map +1 -1
  158. package/dist/stepper.js +1 -1
  159. package/dist/stepper.js.map +1 -1
  160. package/dist/switch.js +1 -1
  161. package/dist/switch.js.map +1 -1
  162. package/dist/tabs.d.ts +2 -0
  163. package/dist/tabs.js +1 -1
  164. package/dist/tabs.js.map +1 -1
  165. package/dist/tabular/components.d.ts +5 -0
  166. package/dist/tabular/components.js.map +1 -1
  167. package/dist/tabular/controller.d.ts +1 -0
  168. package/dist/tabular/controller.js +1 -1
  169. package/dist/tabular/controller.js.map +1 -1
  170. package/dist/tabular/data-grid.d.ts +4 -4
  171. package/dist/tabular/data-grid.js +1 -1
  172. package/dist/tabular/data-grid.js.map +1 -1
  173. package/dist/tabular/data-table.d.ts +4 -4
  174. package/dist/tabular/data-table.js +1 -1
  175. package/dist/tabular/data-table.js.map +1 -1
  176. package/dist/tabular/data-tree-grid.d.ts +4 -4
  177. package/dist/tabular/data-tree-grid.js +1 -1
  178. package/dist/tabular/data-tree-grid.js.map +1 -1
  179. package/dist/tabular/parts.d.ts +11 -1
  180. package/dist/tabular/parts.js +1 -1
  181. package/dist/tabular/parts.js.map +1 -1
  182. package/dist/tags-input.d.ts +12 -1
  183. package/dist/tags-input.js +1 -1
  184. package/dist/tags-input.js.map +1 -1
  185. package/dist/temporal/calendar.d.ts +15 -111
  186. package/dist/temporal/calendar.js +1 -1
  187. package/dist/temporal/calendar.js.map +1 -1
  188. package/dist/temporal/capabilities/date-picker.js +1 -1
  189. package/dist/temporal/capabilities/date-picker.js.map +1 -1
  190. package/dist/temporal/capabilities/date-time-picker.js +1 -1
  191. package/dist/temporal/capabilities/date-time-picker.js.map +1 -1
  192. package/dist/temporal/capabilities/date-time-range-picker.js +1 -1
  193. package/dist/temporal/capabilities/date-time-range-picker.js.map +1 -1
  194. package/dist/temporal/capability.d.ts +13 -1
  195. package/dist/temporal/capability.js.map +1 -1
  196. package/dist/temporal/date-field.d.ts +1 -1
  197. package/dist/temporal/date-field.js +1 -1
  198. package/dist/temporal/date-field.js.map +1 -1
  199. package/dist/temporal/date-picker.d.ts +3 -1
  200. package/dist/temporal/date-picker.js.map +1 -1
  201. package/dist/temporal/date-range-field.d.ts +20 -0
  202. package/dist/temporal/date-range-field.js +1 -1
  203. package/dist/temporal/date-range-field.js.map +1 -1
  204. package/dist/temporal/date-range-picker.d.ts +3 -1
  205. package/dist/temporal/date-range-picker.js.map +1 -1
  206. package/dist/temporal/date-time-field.d.ts +4 -1
  207. package/dist/temporal/date-time-field.js +1 -1
  208. package/dist/temporal/date-time-field.js.map +1 -1
  209. package/dist/temporal/date-time-picker.d.ts +3 -1
  210. package/dist/temporal/date-time-picker.js +1 -1
  211. package/dist/temporal/date-time-picker.js.map +1 -1
  212. package/dist/temporal/date-time-range-field.d.ts +158 -0
  213. package/dist/temporal/date-time-range-field.js +2 -0
  214. package/dist/temporal/date-time-range-field.js.map +1 -0
  215. package/dist/temporal/date-time-range-picker.d.ts +3 -1
  216. package/dist/temporal/date-time-range-picker.js +1 -1
  217. package/dist/temporal/date-time-range-picker.js.map +1 -1
  218. package/dist/temporal/internal/time-presentation.d.ts +15 -0
  219. package/dist/temporal/internal/time-presentation.js +2 -0
  220. package/dist/temporal/internal/time-presentation.js.map +1 -0
  221. package/dist/temporal/month-picker.d.ts +3 -1
  222. package/dist/temporal/month-picker.js.map +1 -1
  223. package/dist/temporal/month-range-picker.d.ts +3 -1
  224. package/dist/temporal/month-range-picker.js.map +1 -1
  225. package/dist/temporal/picker.d.ts +23 -1
  226. package/dist/temporal/picker.js +1 -1
  227. package/dist/temporal/picker.js.map +1 -1
  228. package/dist/temporal/range-calendar.d.ts +119 -2
  229. package/dist/temporal/range-calendar.js +1 -1
  230. package/dist/temporal/range-calendar.js.map +1 -1
  231. package/dist/temporal/temporal-provider.d.ts +23 -0
  232. package/dist/temporal/temporal-provider.js +1 -1
  233. package/dist/temporal/temporal-provider.js.map +1 -1
  234. package/dist/temporal/time-field.d.ts +4 -1
  235. package/dist/temporal/time-field.js +1 -1
  236. package/dist/temporal/time-field.js.map +1 -1
  237. package/dist/temporal/time-picker.d.ts +112 -0
  238. package/dist/temporal/time-picker.js +2 -0
  239. package/dist/temporal/time-picker.js.map +1 -0
  240. package/dist/temporal/time-range-field.d.ts +32 -1
  241. package/dist/temporal/time-range-field.js +1 -1
  242. package/dist/temporal/time-range-field.js.map +1 -1
  243. package/dist/temporal/year-picker.d.ts +3 -1
  244. package/dist/temporal/year-picker.js.map +1 -1
  245. package/dist/temporal/year-range-picker.d.ts +3 -1
  246. package/dist/temporal/year-range-picker.js.map +1 -1
  247. package/dist/text.d.ts +43 -1
  248. package/dist/text.js +1 -1
  249. package/dist/text.js.map +1 -1
  250. package/dist/timer.d.ts +16 -5
  251. package/dist/timer.js +1 -1
  252. package/dist/timer.js.map +1 -1
  253. package/dist/toast.js +1 -1
  254. package/dist/toast.js.map +1 -1
  255. package/dist/toggle-group.js +1 -1
  256. package/dist/toggle-group.js.map +1 -1
  257. package/dist/toolbar.js +1 -1
  258. package/dist/toolbar.js.map +1 -1
  259. package/dist/transfer.d.ts +191 -0
  260. package/dist/transfer.js +2 -0
  261. package/dist/transfer.js.map +1 -0
  262. package/dist/tree-grid.d.ts +122 -0
  263. package/dist/tree-grid.js +1 -1
  264. package/dist/tree-grid.js.map +1 -1
  265. package/dist/tree-select.d.ts +186 -0
  266. package/dist/tree-select.js +2 -0
  267. package/dist/tree-select.js.map +1 -0
  268. package/dist/tree-view.js +1 -1
  269. package/dist/tree-view.js.map +1 -1
  270. package/dist/virtual/virtual-collection.d.ts +2 -0
  271. package/dist/virtual/virtual-collection.js.map +1 -1
  272. package/dist/virtual/virtual-grid.d.ts +12 -2
  273. package/dist/virtual/virtual-grid.js +1 -1
  274. package/dist/virtual/virtual-grid.js.map +1 -1
  275. package/dist/virtual/virtual-list.d.ts +12 -3
  276. package/dist/virtual/virtual-list.js +1 -1
  277. package/dist/virtual/virtual-list.js.map +1 -1
  278. package/dist/virtual/virtual-masonry.d.ts +12 -2
  279. package/dist/virtual/virtual-masonry.js +1 -1
  280. package/dist/virtual/virtual-masonry.js.map +1 -1
  281. package/dist/virtual/virtual-spatial.d.ts +12 -2
  282. package/dist/virtual/virtual-spatial.js +1 -1
  283. package/dist/virtual/virtual-spatial.js.map +1 -1
  284. package/dist/window-splitter.js +1 -1
  285. package/dist/window-splitter.js.map +1 -1
  286. package/package.json +88 -17
@@ -0,0 +1,229 @@
1
+ import { type EmitsToProps, type PropType, type PublicProps, type SlotsType, type VNodeChild } from 'vue';
2
+ import { type FileInputChangeSource, type FileInputErrorCode } from '@sectile/dom/form/file-input';
3
+ import type { SectileError } from '@sectile/core/result';
4
+ import type { FilePolicyOptions } from '@sectile/form/files';
5
+ import { type PrimitiveAs, type PrimitiveElementExpose } from '../primitive.js';
6
+ export type { FileInputChangeSource, FileInputErrorCode } from '@sectile/dom/form/file-input';
7
+ export type { FilePolicyOptions } from '@sectile/form/files';
8
+ export interface FileInputRootProps {
9
+ readonly modelValue?: readonly File[];
10
+ readonly defaultValue?: readonly File[];
11
+ readonly policy?: FilePolicyOptions;
12
+ readonly id?: string;
13
+ readonly name?: string;
14
+ readonly form?: string;
15
+ readonly required?: boolean;
16
+ readonly disabled?: boolean;
17
+ readonly readonly?: boolean;
18
+ readonly as?: PrimitiveAs;
19
+ readonly asChild?: boolean;
20
+ }
21
+ export interface FileInputSlotProps {
22
+ readonly files: readonly File[];
23
+ /** Undefined until the native owner admits a nonempty authored selection. */
24
+ readonly totalSize: number | undefined;
25
+ readonly ready: boolean;
26
+ readonly disabled: boolean;
27
+ readonly readonly: boolean;
28
+ readonly required: boolean;
29
+ readonly faulted: boolean;
30
+ readonly error: SectileError<FileInputErrorCode> | undefined;
31
+ }
32
+ export interface FileInputPartProps {
33
+ readonly as?: PrimitiveAs;
34
+ readonly asChild?: boolean;
35
+ }
36
+ export interface FileInputInputExpose {
37
+ readonly element: HTMLInputElement | null;
38
+ }
39
+ export type FileInputRootEmits = {
40
+ 'update:modelValue': [files: readonly File[]];
41
+ change: [files: readonly File[], source: FileInputChangeSource];
42
+ reject: [error: SectileError<FileInputErrorCode>];
43
+ };
44
+ export interface FileInputRootSlots {
45
+ default: (state: FileInputSlotProps) => VNodeChild;
46
+ }
47
+ export interface FileInputRootExpose extends PrimitiveElementExpose {
48
+ readonly input: HTMLInputElement | null;
49
+ readonly files: readonly File[];
50
+ open(): boolean;
51
+ focus(): boolean;
52
+ clear(): boolean;
53
+ selectFiles(files: ArrayLike<File>): boolean;
54
+ refresh(): boolean;
55
+ }
56
+ declare const Root: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
57
+ as: {
58
+ type: PropType<PrimitiveAs>;
59
+ default: string;
60
+ };
61
+ asChild: {
62
+ type: BooleanConstructor;
63
+ default: boolean;
64
+ };
65
+ modelValue: {
66
+ type: PropType<readonly File[]>;
67
+ default: undefined;
68
+ };
69
+ defaultValue: {
70
+ type: PropType<readonly File[]>;
71
+ default: undefined;
72
+ };
73
+ policy: {
74
+ type: PropType<FilePolicyOptions>;
75
+ default: undefined;
76
+ };
77
+ id: {
78
+ type: StringConstructor;
79
+ default: undefined;
80
+ };
81
+ name: {
82
+ type: StringConstructor;
83
+ default: undefined;
84
+ };
85
+ form: {
86
+ type: StringConstructor;
87
+ default: undefined;
88
+ };
89
+ required: {
90
+ type: BooleanConstructor;
91
+ default: undefined;
92
+ };
93
+ disabled: {
94
+ type: BooleanConstructor;
95
+ default: undefined;
96
+ };
97
+ readonly: {
98
+ type: BooleanConstructor;
99
+ default: undefined;
100
+ };
101
+ }>, () => VNodeChild, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
102
+ 'update:modelValue': (_files: readonly File[]) => boolean;
103
+ change: (_files: readonly File[], _source: FileInputChangeSource) => boolean;
104
+ reject: (_error: SectileError<FileInputErrorCode>) => boolean;
105
+ }, string, PublicProps, Readonly<import("vue").ExtractPropTypes<{
106
+ as: {
107
+ type: PropType<PrimitiveAs>;
108
+ default: string;
109
+ };
110
+ asChild: {
111
+ type: BooleanConstructor;
112
+ default: boolean;
113
+ };
114
+ modelValue: {
115
+ type: PropType<readonly File[]>;
116
+ default: undefined;
117
+ };
118
+ defaultValue: {
119
+ type: PropType<readonly File[]>;
120
+ default: undefined;
121
+ };
122
+ policy: {
123
+ type: PropType<FilePolicyOptions>;
124
+ default: undefined;
125
+ };
126
+ id: {
127
+ type: StringConstructor;
128
+ default: undefined;
129
+ };
130
+ name: {
131
+ type: StringConstructor;
132
+ default: undefined;
133
+ };
134
+ form: {
135
+ type: StringConstructor;
136
+ default: undefined;
137
+ };
138
+ required: {
139
+ type: BooleanConstructor;
140
+ default: undefined;
141
+ };
142
+ disabled: {
143
+ type: BooleanConstructor;
144
+ default: undefined;
145
+ };
146
+ readonly: {
147
+ type: BooleanConstructor;
148
+ default: undefined;
149
+ };
150
+ }>> & Readonly<{
151
+ onChange?: (_files: readonly File[], _source: FileInputChangeSource) => any;
152
+ onReject?: (_error: SectileError<FileInputErrorCode>) => any;
153
+ "onUpdate:modelValue"?: (_files: readonly File[]) => any;
154
+ }>, {
155
+ as: PrimitiveAs;
156
+ asChild: boolean;
157
+ modelValue: readonly File[];
158
+ defaultValue: readonly File[];
159
+ policy: FilePolicyOptions;
160
+ id: string;
161
+ name: string;
162
+ form: string;
163
+ required: boolean;
164
+ disabled: boolean;
165
+ readonly: boolean;
166
+ }, SlotsType<{
167
+ default: (state: FileInputSlotProps) => VNodeChild;
168
+ }>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
169
+ type RootInstance = InstanceType<typeof Root> & FileInputRootExpose;
170
+ export type FileInputRootPublicProps = FileInputRootProps & PublicProps & EmitsToProps<FileInputRootEmits>;
171
+ export declare const FileInputRoot: new (props: FileInputRootPublicProps) => Omit<RootInstance, '$props'> & {
172
+ readonly $props: FileInputRootPublicProps;
173
+ };
174
+ declare const Input: import("vue").DefineComponent<{}, () => VNodeChild, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
175
+ type InputInstance = InstanceType<typeof Input> & FileInputInputExpose;
176
+ export declare const FileInputInput: new (props: PublicProps) => InputInstance;
177
+ declare function createFileAction(clear: boolean): import("vue").DefineComponent<import("vue").ExtractPropTypes<{
178
+ asChild: {
179
+ type: BooleanConstructor;
180
+ default: boolean;
181
+ };
182
+ as: {
183
+ type: PropType<PrimitiveAs>;
184
+ default: string;
185
+ };
186
+ }>, () => VNodeChild, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, PublicProps, Readonly<import("vue").ExtractPropTypes<{
187
+ asChild: {
188
+ type: BooleanConstructor;
189
+ default: boolean;
190
+ };
191
+ as: {
192
+ type: PropType<PrimitiveAs>;
193
+ default: string;
194
+ };
195
+ }>> & Readonly<{}>, {
196
+ asChild: boolean;
197
+ as: PrimitiveAs;
198
+ }, SlotsType<{
199
+ default: (state: FileInputSlotProps) => VNodeChild;
200
+ }>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
201
+ type ActionInstance = InstanceType<ReturnType<typeof createFileAction>> & PrimitiveElementExpose;
202
+ export declare const FileInputTrigger: new (props: FileInputPartProps & PublicProps) => ActionInstance;
203
+ export declare const FileInputClear: new (props: FileInputPartProps & PublicProps) => ActionInstance;
204
+ declare const Dropzone: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
205
+ as: {
206
+ type: PropType<PrimitiveAs>;
207
+ default: string;
208
+ };
209
+ asChild: {
210
+ type: BooleanConstructor;
211
+ default: boolean;
212
+ };
213
+ }>, () => VNodeChild, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, PublicProps, Readonly<import("vue").ExtractPropTypes<{
214
+ as: {
215
+ type: PropType<PrimitiveAs>;
216
+ default: string;
217
+ };
218
+ asChild: {
219
+ type: BooleanConstructor;
220
+ default: boolean;
221
+ };
222
+ }>> & Readonly<{}>, {
223
+ as: PrimitiveAs;
224
+ asChild: boolean;
225
+ }, SlotsType<{
226
+ default: (state: FileInputSlotProps) => VNodeChild;
227
+ }>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
228
+ type DropzoneInstance = InstanceType<typeof Dropzone> & PrimitiveElementExpose;
229
+ export declare const FileInputDropzone: new (props: FileInputPartProps & PublicProps) => DropzoneInstance;
@@ -0,0 +1,2 @@
1
+ import{computed,defineComponent,h,inject,mergeProps,onBeforeUnmount,onMounted,onScopeDispose,provide,shallowRef,useTemplateRef,watch}from'vue';import{tryCreateFileInput}from'@sectile/dom/form/file-input';import{Primitive}from'../primitive.js';import{createComponentHandle}from'../component-handle.js';import{useHostActive}from'../host-provider.js';import{useControlledStateInvariant}from'../internal/controlled-state.js';import{useConnectionLifetime}from'../internal/connection-lifetime.js';import{useNextTickTask}from'../internal/scheduled-task.js';import{nativeInputControlCapabilities,useFormControl,useFormFieldDefaults}from'./control.js';import{partProps}from'./part.js';const noFiles=Object.freeze([]);function projectElement(current){return{get element(){return current()}}}function createFileInputHandle(){return createComponentHandle(current=>({get element(){return current()?.element??null},get input(){return current()?.input??null},get files(){return current()?.native?.getSnapshot().state.files??current()?.files??noFiles},open:()=>current()?.native?.open()??false,focus:()=>current()?.native?.focus()??false,clear:()=>current()?.native?.clear().ok??false,selectFiles:files=>current()?.native?.selectFiles(files).ok??false,refresh:()=>{const native=current()?.native;return native?.getActive()?native.refresh().ok:false}}))}const contextKey=Symbol('SectileFileInput');function useFileInputContext(name){const context=inject(contextKey);if(!context)throw new TypeError(`${name} requires FileInputRoot.`);return context}function createFileInputRoot(){return defineComponent({name:'SectileFileInputRoot',inheritAttrs:false,props:{...partProps,modelValue:{type:Array,default:undefined},defaultValue:{type:Array,default:undefined},policy:{type:Object,default:undefined},id:{type:String,default:undefined},name:{type:String,default:undefined},form:{type:String,default:undefined},required:{type:Boolean,default:undefined},disabled:{type:Boolean,default:undefined},readonly:{type:Boolean,default:undefined}},emits:{'update:modelValue':_files=>true,change:(_files,_source)=>true,reject:_error=>true},slots:Object,setup(props,{attrs,emit,expose,slots}){const controlled=useControlledStateInvariant('FileInputRoot','modelValue',()=>props.modelValue);const active=useHostActive(),defaults=useFormFieldDefaults();const interaction=computed(()=>({disabled:props.disabled??defaults?.value.disabled??false,readOnly:props.readonly??defaults?.value.readonly??false,required:props.required??defaults?.value.required??false}));const input=shallowRef(null),dropzone=shallowRef(null);const selection=shallowRef(),policy=shallowRef(),error=shallowRef();const ready=shallowRef(false),faulted=shallowRef(false),admissionFailed=shallowRef(false);const control={element:null,input:null,native:undefined,files:props.modelValue??props.defaultValue??noFiles};const handle=createFileInputHandle();handle.set(control);expose(handle.view);let alive=true,epoch,initialFiles=props.modelValue??props.defaultValue??noFiles;let connectedInput=null,pendingPolicy=false,pendingValue=false;let inputClaimed=false,dropzoneClaimed=false;let resetProposal=false;const resetProposalTask=useNextTickTask(()=>{resetProposal=false});const publish=()=>{const native=control.native;if(!alive||!native)return;const previous=selection.value?.files;selection.value=native.getSnapshot().state;policy.value=native.getPolicy();control.files=selection.value.files;faulted.value=native.getFaulted();ready.value=native.getActive();if(participation.participating&&previous!==selection.value.files)valueTask.schedule()};const reject=failure=>{error.value=failure;emit('reject',failure)};const participation=useFormControl({element:input,semanticControl:input,focusTarget:input,validationTarget:input,labelMode:'for',capabilities:{...nativeInputControlCapabilities,readonly:false},getValue:()=>control.native?.getSnapshot().state.files??selection.value?.files??initialFiles,prepareSubmission:()=>{if(admissionFailed.value)throw error.value;const result=control.native?.refresh();if(result&&!result.ok)throw result.error;valueTask.cancel();participation.refreshValue?.()}});const valueTask=useNextTickTask(()=>participation.refreshValue?.());const release=()=>{const held=control.native;if(alive&&held&&connectedInput===input.value){held.suspend();publish();return}epoch=undefined;const native=control.native;control.native=undefined;ready.value=false;connectedInput=null;try{if(alive&&native){selection.value=native.getSnapshot().state;control.files=selection.value.files;policy.value=native.getPolicy()}}finally{native?.destroy()}};const attach=([element,available])=>{if(!alive||!element||!available)return;if(control.native&&connectedInput===element){control.native.resume();publish();return}const token={};epoch=token;if(admissionFailed.value)element.disabled=interaction.value.disabled;admissionFailed.value=false;const result=tryCreateFileInput({element,...interaction.value,policy:policy.value??props.policy??{},...controlled?{value:selection.value?.files??props.modelValue??initialFiles}:{defaultValue:selection.value?.files??initialFiles},...dropzone.value===null?{}:{dropTarget:dropzone.value},onUpdate(){if(alive&&epoch===token)publish()},onValueChange(files,source){if(alive&&epoch===token){error.value=undefined;resetProposalTask.cancel();resetProposal=controlled&&source==='reset';if(!controlled&&source==='reset'){valueTask.cancel();participation.refreshValue?.('baseline')}emit('update:modelValue',files);if(alive&&epoch===token)emit('change',files,source);if(resetProposal&&alive&&epoch===token)resetProposalTask.schedule()}},onReject(failure){if(alive&&epoch===token)reject(failure)}});if(!alive||epoch!==token){if(result.ok)result.value.destroy();return}if(!result.ok){admissionFailed.value=true;element.disabled=true;reject(result.error);return}control.native=result.value;connectedInput=element;error.value=undefined;publish();const configurePolicy=pendingPolicy,configureValue=pendingValue;pendingPolicy=false;pendingValue=false;if(configurePolicy)result.value.syncPolicy(props.policy??{});if(configureValue&&props.modelValue!==undefined)result.value.syncControlledValue(props.modelValue)};useConnectionLifetime({read:()=>[input.value,active.value],equal:(a,b)=>a[0]===b[0]&&a[1]===b[1],connect:attach,disconnect:release,dispose(){alive=false;resetProposal=false;pendingPolicy=false;pendingValue=false;handle.release();initialFiles=noFiles;selection.value=undefined;policy.value=undefined;error.value=undefined;control.files=noFiles;control.input=null;control.element=null;input.value=null;dropzone.value=null}});watch(()=>props.modelValue,files=>{if(!controlled||files===undefined)return;if(!control.native){initialFiles=files;pendingValue=selection.value!==undefined;return}const reset=resetProposal;resetProposal=false;const result=control.native.syncControlledValue(files);if(result.ok){error.value=undefined;publish();if(reset){valueTask.cancel();participation.refreshValue?.('baseline')}}},{flush:'sync'});watch(()=>props.policy,value=>{if(control.native){const result=control.native.syncPolicy(value??{});if(result.ok){error.value=undefined;publish()}}else{pendingPolicy=selection.value!==undefined;if(admissionFailed.value)attach([input.value,active.value])}});watch(interaction,value=>{control.native?.syncInteraction(value)},{flush:'sync'});watch(dropzone,value=>{control.native?.setDropTarget(value)},{flush:'post'});watch([()=>props.form,()=>props.name,()=>props.id],()=>{control.native?.refresh()},{flush:'post'});const state=computed(()=>({files:selection.value?.files??initialFiles,totalSize:selection.value?.totalSize??(initialFiles.length===0?0:undefined),ready:ready.value,disabled:interaction.value.disabled,readonly:interaction.value.readOnly,required:interaction.value.required,faulted:faulted.value,error:error.value}));const inputProps=computed(()=>({...participation.controlProps.value,...props.id===undefined?{}:{id:props.id},...props.name===undefined?{}:{name:props.name},...props.form===undefined?{}:{form:props.form},type:'file',disabled:interaction.value.disabled||faulted.value||admissionFailed.value,required:interaction.value.required,accept:policy.value?.accept??props.policy?.accept,multiple:policy.value?.multiple??props.policy?.multiple??false,'data-scope':'file-input','data-part':'input'}));provide(contextKey,{state,inputProps,actions:handle.view,claimInput(){if(inputClaimed)throw new TypeError('FileInputRoot requires at most one FileInputInput.');inputClaimed=true;return()=>{inputClaimed=false}},setInput(value){control.input=value;input.value=value},claimDropzone(){if(dropzoneClaimed)throw new TypeError('FileInputRoot requires at most one FileInputDropzone.');dropzoneClaimed=true;return()=>{dropzoneClaimed=false}},setDropzone(value){dropzone.value=value}});return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:value=>{control.element=value},inert:!active.value?true:undefined,'data-scope':'file-input','data-part':'root','data-disabled':interaction.value.disabled?'':undefined,'data-readonly':interaction.value.readOnly?'':undefined,'data-state':faulted.value||admissionFailed.value?'error':ready.value?'ready':'pending'}),{default:()=>slots.default?.(state.value)})}})}const Root=/* @__PURE__ */createFileInputRoot();export const FileInputRoot=Root;const Input=/* @__PURE__ */defineComponent({name:'SectileFileInputInput',inheritAttrs:false,setup(_props,{attrs,expose}){const context=useFileInputContext('FileInputInput'),release=context.claimInput();const element=useTemplateRef('input');const handle=createComponentHandle(projectElement);expose(handle.view);onMounted(()=>{handle.set(element.value);context.setInput(element.value)});onBeforeUnmount(()=>{context.setInput(null)});onScopeDispose(()=>{release();handle.release()});return()=>{const{value:_value,defaultValue:_defaultValue,readonly:_readonly,readOnly:_readOnly,...nativeAttrs}=attrs;return h('input',mergeProps(nativeAttrs,context.inputProps.value,{ref:'input'}))}}});export const FileInputInput=Input;function createFileAction(clear){return defineComponent({name:clear?'SectileFileInputClear':'SectileFileInputTrigger',inheritAttrs:false,props:{...partProps,as:{...partProps.as,default:'button'}},slots:Object,setup(props,{attrs,expose,slots}){const context=useFileInputContext(clear?'FileInputClear':'FileInputTrigger');const handle=createComponentHandle(projectElement);expose(handle.view);onScopeDispose(handle.release);return()=>{const state=context.state.value,blocked=!state.ready||state.disabled||state.readonly||state.faulted||clear&&state.files.length===0;return h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,type:'button',disabled:blocked,elementRef(value){handle.set(value)},'aria-disabled':blocked?'true':undefined,'data-scope':'file-input','data-part':clear?'clear':'trigger',onClick(event){if(!event.defaultPrevented&&!blocked){if(clear)context.actions.clear();else context.actions.open()}}}),{default:()=>slots.default?.(state)})}}})}export const FileInputTrigger=/* @__PURE__ */createFileAction(false);export const FileInputClear=/* @__PURE__ */createFileAction(true);const Dropzone=/* @__PURE__ */defineComponent({name:'SectileFileInputDropzone',inheritAttrs:false,props:partProps,slots:Object,setup(props,{attrs,expose,slots}){const context=useFileInputContext('FileInputDropzone'),release=context.claimDropzone();const handle=createComponentHandle(projectElement);expose(handle.view);onBeforeUnmount(()=>context.setDropzone(null));onScopeDispose(()=>{release();handle.release()});return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef(value){handle.set(value);context.setDropzone(value)},'data-scope':'file-input','data-part':'dropzone'}),{default:()=>slots.default?.(context.state.value)})}});export const FileInputDropzone=Dropzone;
2
+ //# sourceMappingURL=file-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-input.js","names":["computed","defineComponent","h","inject","mergeProps","onBeforeUnmount","onMounted","onScopeDispose","provide","shallowRef","useTemplateRef","watch","tryCreateFileInput","Primitive","createComponentHandle","useHostActive","useControlledStateInvariant","useConnectionLifetime","useNextTickTask","nativeInputControlCapabilities","useFormControl","useFormFieldDefaults","partProps","noFiles","Object","freeze","projectElement","current","element","createFileInputHandle","input","files","native","getSnapshot","state","open","focus","clear","ok","selectFiles","refresh","getActive","contextKey","Symbol","useFileInputContext","name","context","TypeError","createFileInputRoot","inheritAttrs","props","modelValue","type","Array","default","undefined","defaultValue","policy","id","String","form","required","Boolean","disabled","readonly","emits","_files","change","_source","reject","_error","slots","setup","attrs","emit","expose","controlled","active","defaults","interaction","value","readOnly","dropzone","selection","error","ready","faulted","admissionFailed","control","handle","set","view","alive","epoch","initialFiles","connectedInput","pendingPolicy","pendingValue","inputClaimed","dropzoneClaimed","resetProposal","resetProposalTask","publish","previous","getPolicy","getFaulted","participation","participating","valueTask","schedule","failure","semanticControl","focusTarget","validationTarget","labelMode","capabilities","getValue","prepareSubmission","result","cancel","refreshValue","release","held","suspend","destroy","attach","available","resume","token","dropTarget","onUpdate","onValueChange","source","onReject","configurePolicy","configureValue","syncPolicy","syncControlledValue","read","equal","a","b","connect","disconnect","dispose","reset","flush","syncInteraction","setDropTarget","totalSize","length","inputProps","controlProps","accept","multiple","actions","claimInput","setInput","claimDropzone","setDropzone","as","asChild","elementRef","inert","Root","FileInputRoot","Input","_props","_value","_defaultValue","_readonly","_readOnly","nativeAttrs","ref","FileInputInput","createFileAction","blocked","onClick","event","defaultPrevented","FileInputTrigger","FileInputClear","Dropzone","FileInputDropzone"],"sources":["../../src/form/file-input.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,28 @@
1
+ import { type MaybeRefOrGetter, type Ref, type ShallowRef } from 'vue';
2
+ import { type FileUploadAdapter, type FileUploadGroupErrorCode, type FileUploadGroupSnapshot, type FileUploadItem, type FileUploadItemSnapshot } from '@sectile/dom/form/file-upload';
3
+ import type { FileMetadata } from '@sectile/form/files';
4
+ import type { StableID } from '@sectile/core/identity';
5
+ import { type Result, type SectileError } from '@sectile/core/result';
6
+ export type { FileUploadItem, FileUploadItemSnapshot, FileUploadGroupCounts, FileUploadGroupSnapshot, FileUploadGroupState, FileUploadGroupErrorCode } from '@sectile/dom/form/file-upload';
7
+ export interface UseFileUploadGroupOptions<ID extends StableID, T extends FileMetadata, Receipt = unknown> {
8
+ readonly items: MaybeRefOrGetter<readonly FileUploadItem<ID, T>[]>;
9
+ readonly adapter: FileUploadAdapter<NoInfer<T>, Receipt> | Readonly<Ref<FileUploadAdapter<NoInfer<T>, Receipt>>>;
10
+ readonly concurrency?: MaybeRefOrGetter<number>;
11
+ readonly maxFiles?: number;
12
+ readonly active?: MaybeRefOrGetter<boolean>;
13
+ readonly onCleanupError?: (error: unknown) => void;
14
+ }
15
+ export interface UseFileUploadGroupReturn<ID extends StableID, T extends FileMetadata, Receipt = unknown> {
16
+ readonly snapshot: Readonly<ShallowRef<FileUploadGroupSnapshot<ID> | undefined>>;
17
+ readonly error: Readonly<ShallowRef<SectileError<FileUploadGroupErrorCode> | undefined>>;
18
+ readonly ready: Readonly<ShallowRef<boolean>>;
19
+ /** Read an admitted item without registering a scoped subscription. */
20
+ getItem(id: ID): FileUploadItemSnapshot<T, Receipt> | undefined;
21
+ start(ids?: readonly ID[]): Result<FileUploadGroupSnapshot<ID>, FileUploadGroupErrorCode>;
22
+ cancel(ids?: readonly ID[]): Result<FileUploadGroupSnapshot<ID>, FileUploadGroupErrorCode>;
23
+ reset(ids?: readonly ID[]): Result<FileUploadGroupSnapshot<ID>, FileUploadGroupErrorCode>;
24
+ /** Register in the current Vue scope; only this key's changes publish to the ref. */
25
+ useItem(id: MaybeRefOrGetter<ID>): Readonly<ShallowRef<FileUploadItemSnapshot<T, Receipt> | undefined>>;
26
+ }
27
+ /** Vue owns keyed shallow publication; the native group owns all execution and membership semantics. */
28
+ export declare function useFileUploadGroup<const ID extends StableID, T extends FileMetadata, Receipt = unknown>(options: UseFileUploadGroupOptions<ID, T, Receipt>): UseFileUploadGroupReturn<ID, T, Receipt>;
@@ -0,0 +1,2 @@
1
+ import{getCurrentInstance,getCurrentScope,onScopeDispose,shallowReadonly,shallowRef,toValue,unref,watch}from"vue";import{tryCreateFileUploadGroup}from"@sectile/dom/form/file-upload";import{failResult}from"@sectile/core/result";import{createComponentHandle}from"../../component-handle.js";import{useHostActive}from"../../host-provider.js";import{useConnectionLifetime}from"../../internal/connection-lifetime.js";function inactive(){return failResult("transition-rejection","dom.file-upload-group-inactive","The upload group scope is not available.")}function detach(row,control){if(row.id!==void 0&&control){const bucket=control.observed.get(row.id);bucket?.delete(row);if(bucket?.size===0)control.observed.delete(row.id)}row.id=void 0;row.value.value=void 0}function observe(source,current){if(!getCurrentScope())throw Object.assign(new TypeError("useItem requires a Vue scope"),{code:"vue.file-upload-item-scope-required"});const row={id:void 0,source,value:shallowRef(),stop:void 0};let alive=true;onScopeDispose(()=>{alive=false;const control2=current();detach(row,control2);control2?.rows.delete(row);row.source=void 0;row.stop?.();row.stop=void 0});const control=current();if(control){control.rows.add(row);const stop=watch(()=>{try{return row.source===void 0?void 0:toValue(row.source)}catch(failure){detach(row,current());throw failure}},id=>{const held=current();detach(row,held);if(!alive||!held||id===void 0)return;row.id=id;let bucket=held.observed.get(id);if(!bucket){bucket=new Set;held.observed.set(id,bucket)}bucket.add(row);row.value.value=held.native?.getItemSnapshot(id)},{flush:"sync",immediate:true});if(alive&&current())row.stop=stop;else stop()}else row.source=void 0;return shallowReadonly(row.value)}function useFileUploadGroup(options){if(!getCurrentInstance())throw Object.assign(new TypeError("useFileUploadGroup requires component setup"),{code:"vue.file-upload-scope-required"});let itemsSource=options.items;let adapterSource=options.adapter;let concurrencySource=options.concurrency,activeSource=options.active,maxFiles=options.maxFiles,cleanupError=options.onCleanupError;let alive=true,epoch;const control={native:void 0,available:false,rows:new Set,observed:new Map};const snapshot=shallowRef(),error=shallowRef(),ready=shallowRef(false);const handle=createComponentHandle(current=>{const command=(kind,ids)=>{const held=current();return held?.available?held.native?.[kind](ids)??inactive():inactive()};return{getItem:id=>current()?.native?.getItemSnapshot(id),start:ids=>command("start",ids),cancel:ids=>command("cancel",ids),reset:ids=>command("reset",ids),useItem:id=>observe(id,current)}});handle.set(control);const hostActive=useHostActive();const availability=enabled=>{control.available=enabled===true;ready.value=control.available&&control.native!==void 0;if(!control.available)control.native?.cancel()};watch(()=>{try{return hostActive.value&&(activeSource===void 0||toValue(activeSource))}catch(failure){availability(false);throw failure}},availability,{flush:"sync",immediate:true});watch(ready,available=>{if(!available&&!control.available)control.native?.cancel()},{flush:"post"});const release=()=>{epoch=void 0;const held=control.native;control.native=void 0;snapshot.value=void 0;error.value=void 0;ready.value=false;for(const row of control.rows)row.value.value=void 0;held?.destroy()};const read=()=>[itemsSource===void 0?void 0:toValue(itemsSource),unref(adapterSource),concurrencySource===void 0?3:toValue(concurrencySource)];useConnectionLifetime({read,equal:(a,b)=>control.native!==void 0&&a[1]===b[1],disconnect:release,connect([items,adapter,concurrency]){if(!alive)return;const token={};epoch=token;const result=tryCreateFileUploadGroup({items,adapter,concurrency,...maxFiles===void 0?{}:{maxFiles},...cleanupError===void 0?{}:{onCleanupError:cleanupError},onItemUpdate(id,item){if(!alive||epoch!==token)return;const bucket=control.observed.get(id);if(bucket){for(const row of[...bucket])if(alive&&epoch===token&&row.id===id)row.value.value=item}},onUpdate(){if(alive&&epoch===token&&control.native)snapshot.value=control.native.getSnapshot()}});if(!alive||epoch!==token){if(result.ok)result.value.destroy();return}if(!result.ok){error.value=result.error;return}control.native=result.value;snapshot.value=result.value.getSnapshot();if(!alive||epoch!==token)return;ready.value=control.available;for(const row of[...control.rows])if(alive&&epoch===token&&row.id!==void 0)row.value.value=result.value.getItemSnapshot(row.id)},dispose(){alive=false;control.available=false;handle.release();itemsSource=void 0;adapterSource=void 0;concurrencySource=void 0;activeSource=void 0;maxFiles=void 0;cleanupError=void 0;for(const row of control.rows){row.source=void 0;row.stop?.();row.stop=void 0;row.id=void 0;row.value.value=void 0}control.rows.clear();control.observed.clear()}});watch(()=>{try{return read()}catch{return void 0}},(input,previous)=>{const native=control.native;if(!alive||!native||!input)return;let failure;if(!previous||input[0]!==previous[0]){const result=native.syncItems(input[0]);if(result&&!result.ok)failure=result.error}if(!previous||input[2]!==previous[2]){const result=native.setConcurrency(input[2]);if(result&&!result.ok)failure??=result.error}error.value=failure},{flush:"post"});return Object.freeze({...handle.view,snapshot:shallowReadonly(snapshot),error:shallowReadonly(error),ready:shallowReadonly(ready)})}export{useFileUploadGroup};
2
+ //# sourceMappingURL=group.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/form/file-upload/group.ts"],"mappings":"AAAA,OAAS,mBAAoB,gBAAiB,eAAgB,gBAAiB,WAAY,QAAS,MAAO,UAC3B,MAChF,OAAS,6BAC+E,gCAGxF,OAAS,eAAkD,uBAE3D,OAAS,0BAA6B,4BACtC,OAAS,kBAAqB,yBAC9B,OAAS,0BAA6B,wCAmCtC,SAAS,UAAQ,CACf,OAAO,WAAW,uBAAwB,iCAAkC,0CAA0C,CACxH,CACA,SAAS,OAA6D,IAA0B,QAAuC,CACrI,GAAI,IAAI,KAAO,QAAa,QAAS,CACnC,MAAM,OAAS,QAAQ,SAAS,IAAI,IAAI,EAAE,EAAG,QAAQ,OAAO,GAAG,EAC/D,GAAI,QAAQ,OAAS,EAAG,QAAQ,SAAS,OAAO,IAAI,EAAE,CACxD,CACA,IAAI,GAAK,OAAW,IAAI,MAAM,MAAQ,MACxC,CACA,SAAS,QAA8D,OAA8B,QAA6C,CAChJ,GAAI,CAAC,gBAAe,EAAI,MAAM,OAAO,OAAO,IAAI,UAAU,8BAA8B,EAAG,CAAE,KAAM,qCAAqC,CAAE,EAC1I,MAAM,IAA2B,CAAE,GAAI,OAAW,OAAQ,MAAO,WAAU,EAAI,KAAM,MAAS,EAC9F,IAAI,MAAQ,KACZ,eAAe,IAAK,CAClB,MAAQ,MAAO,MAAMA,SAAU,QAAO,EAAI,OAAO,IAAKA,QAAO,EAAGA,UAAS,KAAK,OAAO,GAAG,EACxF,IAAI,OAAS,OAAW,IAAI,OAAM,EAAI,IAAI,KAAO,MACnD,CAAC,EACD,MAAM,QAAU,QAAO,EACvB,GAAI,QAAS,CACX,QAAQ,KAAK,IAAI,GAAG,EACpB,MAAM,KAAO,MAAM,IAAK,CACtB,GAAI,CAAE,OAAO,IAAI,SAAW,OAAY,OAAY,QAAQ,IAAI,MAAM,CAAG,OAClE,QAAS,CAAE,OAAO,IAAK,QAAO,CAAE,EAAG,MAAM,OAAS,CAC3D,EAAG,IAAK,CACN,MAAM,KAAO,QAAO,EAAI,OAAO,IAAK,IAAI,EACxC,GAAI,CAAC,OAAS,CAAC,MAAQ,KAAO,OAAW,OACzC,IAAI,GAAK,GACT,IAAI,OAAS,KAAK,SAAS,IAAI,EAAE,EAAG,GAAI,CAAC,OAAQ,CAAE,OAAS,IAAI,IAAO,KAAK,SAAS,IAAI,GAAI,MAAM,CAAG,CACtG,OAAO,IAAI,GAAG,EAAG,IAAI,MAAM,MAAQ,KAAK,QAAQ,gBAAgB,EAAE,CACpE,EAAG,CAAE,MAAO,OAAQ,UAAW,IAAI,CAAE,EACrC,GAAI,OAAS,QAAO,EAAI,IAAI,KAAO,UAAW,KAAI,CACpD,MAAO,IAAI,OAAS,OACpB,OAAO,gBAAgB,IAAI,KAAK,CAClC,CAEM,SAAU,mBAAyF,QAAkD,CACzJ,GAAI,CAAC,mBAAkB,EAAI,MAAM,OAAO,OAAO,IAAI,UAAU,6CAA6C,EAAG,CAAE,KAAM,gCAAgC,CAAE,EACvJ,IAAI,YAA8E,QAAQ,MAC1F,IAAI,cAAkF,QAAQ,QAC9F,IAAI,kBAAoB,QAAQ,YAAa,aAAe,QAAQ,OAAQ,SAAW,QAAQ,SAAU,aAAe,QAAQ,eAChI,IAAI,MAAQ,KAAM,MAClB,MAAM,QAAmC,CAAE,OAAQ,OAAW,UAAW,MAAO,KAAM,IAAI,IAAO,SAAU,IAAI,GAAK,EACpH,MAAM,SAAW,WAAU,EAAiC,MAAQ,WAAU,EAA4C,MAAQ,WAAW,KAAK,EAClJ,MAAM,OAAS,sBAAqJ,SAAU,CAC5K,MAAM,QAAU,CAAC,KAAoC,MAAiG,CACpJ,MAAM,KAAO,QAAO,EAAI,OAAO,MAAM,UAAY,KAAK,SAAS,IAAI,EAAE,GAAG,GAAK,SAAQ,EAAK,SAAQ,CACpG,EACA,MAAO,CAAE,QAAS,IAAM,QAAO,GAAI,QAAQ,gBAAgB,EAAE,EAAG,MAAO,KAAO,QAAQ,QAAS,GAAG,EAAG,OAAQ,KAAO,QAAQ,SAAU,GAAG,EAAG,MAAO,KAAO,QAAQ,QAAS,GAAG,EAAG,QAAS,IAAM,QAAQ,GAAI,OAAO,CAAC,CACtN,CAAC,EACD,OAAO,IAAI,OAAO,EAClB,MAAM,WAAa,cAAa,EAChC,MAAM,aAAgB,SAA0B,CAC9C,QAAQ,UAAY,UAAY,KAAM,MAAM,MAAQ,QAAQ,WAAa,QAAQ,SAAW,OAC5F,GAAI,CAAC,QAAQ,UAAW,QAAQ,QAAQ,OAAM,CAChD,EACA,MAAM,IAAK,CACT,GAAI,CAAE,OAAO,WAAW,QAAU,eAAiB,QAAa,QAAQ,YAAY,EAAI,OACjF,QAAS,CAAE,aAAa,KAAK,EAAG,MAAM,OAAS,CACxD,EAAG,aAAc,CAAE,MAAO,OAAQ,UAAW,IAAI,CAAE,EAGnD,MAAM,MAAO,WAAY,CAAG,GAAI,CAAC,WAAa,CAAC,QAAQ,UAAW,QAAQ,QAAQ,OAAM,CAAI,EAAG,CAAE,MAAO,MAAM,CAAE,EAChH,MAAM,QAAU,IAAW,CACzB,MAAQ,OAAW,MAAM,KAAO,QAAQ,OAAQ,QAAQ,OAAS,OACjE,SAAS,MAAQ,OAAW,MAAM,MAAQ,OAAW,MAAM,MAAQ,MACnE,UAAW,OAAO,QAAQ,KAAM,IAAI,MAAM,MAAQ,OAClD,MAAM,QAAO,CACf,EAEA,MAAM,KAAO,IAAa,CAAC,cAAgB,OAAY,OAAY,QAAQ,WAAW,EAAG,MAAM,aAAa,EAAG,oBAAsB,OAAY,EAAI,QAAQ,iBAAiB,CAAC,EAC/K,sBAA6B,CAC3B,KACA,MAAO,CAAC,EAAG,IAAM,QAAQ,SAAW,QAAa,EAAE,CAAC,IAAM,EAAE,CAAC,EAC7D,WAAY,QACZ,QAAQ,CAAC,MAAO,QAAS,WAAW,EAAC,CACnC,GAAI,CAAC,MAAO,OACZ,MAAM,MAAQ,CAAA,EAAI,MAAQ,MAC1B,MAAM,OAAS,yBAAyC,CAAE,MAAe,QAAmB,YAC1F,GAAI,WAAa,OAAY,CAAA,EAAK,CAAE,QAAQ,EAAK,GAAI,eAAiB,OAAY,CAAA,EAAK,CAAE,eAAgB,YAAY,EACrH,aAAa,GAAI,KAAI,CACnB,GAAI,CAAC,OAAS,QAAU,MAAO,OAC/B,MAAM,OAAS,QAAQ,SAAS,IAAI,EAAE,EACtC,GAAI,QAAQ,UAAW,MAAO,CAAC,GAAG,MAAM,EAAG,GAAI,OAAS,QAAU,OAAS,IAAI,KAAO,GAAI,IAAI,MAAM,MAAQ,KAC9G,EACA,UAAQ,CAAK,GAAI,OAAS,QAAU,OAAS,QAAQ,OAAQ,SAAS,MAAQ,QAAQ,OAAO,YAAW,CAAI,CAAC,CAC9G,EACD,GAAI,CAAC,OAAS,QAAU,MAAO,CAAE,GAAI,OAAO,GAAI,OAAO,MAAM,QAAO,EAAI,MAAQ,CAChF,GAAI,CAAC,OAAO,GAAI,CAAE,MAAM,MAAQ,OAAO,MAAO,MAAQ,CACtD,QAAQ,OAAS,OAAO,MAAO,SAAS,MAAQ,OAAO,MAAM,YAAW,EACxE,GAAI,CAAC,OAAS,QAAU,MAAO,OAC/B,MAAM,MAAQ,QAAQ,UACtB,UAAW,MAAO,CAAC,GAAG,QAAQ,IAAI,EAAG,GAAI,OAAS,QAAU,OAAS,IAAI,KAAO,OAAW,IAAI,MAAM,MAAQ,OAAO,MAAM,gBAAgB,IAAI,EAAE,CAClJ,EACA,SAAO,CACL,MAAQ,MAAO,QAAQ,UAAY,MAAO,OAAO,QAAO,EACxD,YAAc,OAAW,cAAgB,OAAW,kBAAoB,OAAW,aAAe,OAAW,SAAW,OAAW,aAAe,OAClJ,UAAW,OAAO,QAAQ,KAAM,CAAE,IAAI,OAAS,OAAW,IAAI,OAAM,EAAI,IAAI,KAAO,OAAW,IAAI,GAAK,OAAW,IAAI,MAAM,MAAQ,MAAW,CAC/I,QAAQ,KAAK,MAAK,EAAI,QAAQ,SAAS,MAAK,CAC9C,EACD,EACD,MAAM,IAAK,CAAG,GAAI,CAAE,OAAO,KAAI,CAAI,MAAQ,CAAE,OAAO,MAAW,CAAE,EAAG,CAAC,MAAO,WAAY,CACtF,MAAM,OAAS,QAAQ,OACvB,GAAI,CAAC,OAAS,CAAC,QAAU,CAAC,MAAO,OACjC,IAAI,QACJ,GAAI,CAAC,UAAY,MAAM,CAAC,IAAM,SAAS,CAAC,EAAG,CAAE,MAAM,OAAS,OAAO,UAAU,MAAM,CAAC,CAAE,EAAG,GAAI,QAAU,CAAC,OAAO,GAAI,QAAU,OAAO,KAAO,CAC3I,GAAI,CAAC,UAAY,MAAM,CAAC,IAAM,SAAS,CAAC,EAAG,CAAE,MAAM,OAAS,OAAO,eAAe,MAAM,CAAC,CAAC,EAAG,GAAI,QAAU,CAAC,OAAO,GAAI,UAAY,OAAO,KAAO,CACjJ,MAAM,MAAQ,OAChB,EAAG,CAAE,MAAO,MAAM,CAAE,EACpB,OAAO,OAAO,OAAO,CAAE,GAAG,OAAO,KAAM,SAAU,gBAAgB,QAAQ,EAAG,MAAO,gBAAgB,KAAK,EAAG,MAAO,gBAAgB,KAAK,CAAC,CAAE,CAC5I","names":["control"],"file":"group.js"}
@@ -0,0 +1,26 @@
1
+ import { type MaybeRefOrGetter, type Ref, type ShallowRef } from 'vue';
2
+ import { type FileUploadAdapter, type FileUploadHostErrorCode, type FileUploadSnapshot } from '@sectile/dom/form/file-upload';
3
+ import type { FileMetadata } from '@sectile/form/files';
4
+ import { type Result, type SectileError } from '@sectile/core/result';
5
+ export * from './file-upload/group.js';
6
+ export type { FileUploadAdapter, FileUploadConnection, FileUploadHostErrorCode, FileUploadProgressInput, FileUploadRequest, FileUploadSnapshot, FileUploadTask } from '@sectile/dom/form/file-upload';
7
+ export interface UseFileUploadOptions<T extends FileMetadata, Receipt = unknown> {
8
+ readonly file: MaybeRefOrGetter<T>;
9
+ /** Functions are adapters, never getters; use a ref for reactive replacement. */
10
+ readonly adapter: FileUploadAdapter<NoInfer<T>, Receipt> | Readonly<Ref<FileUploadAdapter<NoInfer<T>, Receipt>>>;
11
+ readonly active?: MaybeRefOrGetter<boolean>;
12
+ readonly onCleanupError?: (error: unknown) => void;
13
+ }
14
+ interface UploadActions<T extends FileMetadata, Receipt> {
15
+ start(): Result<FileUploadSnapshot<T, Receipt>, FileUploadHostErrorCode>;
16
+ cancel(): Result<FileUploadSnapshot<T, Receipt>, FileUploadHostErrorCode>;
17
+ reset(): Result<FileUploadSnapshot<T, Receipt>, FileUploadHostErrorCode>;
18
+ }
19
+ export interface UseFileUploadReturn<T extends FileMetadata, Receipt = unknown> extends UploadActions<T, Receipt> {
20
+ readonly snapshot: Readonly<ShallowRef<FileUploadSnapshot<T, Receipt> | undefined>>;
21
+ /** Connection admission failure, not transport failure (which belongs to snapshot state). */
22
+ readonly error: Readonly<ShallowRef<SectileError<FileUploadHostErrorCode> | undefined>>;
23
+ readonly ready: Readonly<ShallowRef<boolean>>;
24
+ }
25
+ /** Component-scoped shallow publication; native/Form owners retain all attempt semantics. */
26
+ export declare function useFileUpload<T extends FileMetadata, Receipt = unknown>(options: UseFileUploadOptions<T, Receipt>): UseFileUploadReturn<T, Receipt>;
@@ -0,0 +1,2 @@
1
+ import{getCurrentInstance,shallowReadonly,shallowRef,toValue,unref,watch}from"vue";import{tryCreateFileUpload}from"@sectile/dom/form/file-upload";import{failResult}from"@sectile/core/result";import{createComponentHandle}from"../component-handle.js";import{useHostActive}from"../host-provider.js";import{useConnectionLifetime}from"../internal/connection-lifetime.js";export*from"./file-upload/group.js";function inactive(){return failResult("transition-rejection","dom.file-upload-inactive","The upload scope is not available.")}function actionHandle(){return createComponentHandle(current=>({start:()=>{const control=current();return control?.available?control.native?.start()??inactive():inactive()},cancel:()=>{const control=current();return control?.available?control.native?.cancel()??inactive():inactive()},reset:()=>{const control=current();return control?.available?control.native?.reset()??inactive():inactive()}}))}function useFileUpload(options){if(!getCurrentInstance())throw Object.assign(new TypeError("useFileUpload requires component setup"),{code:"vue.file-upload-scope-required"});let fileSource=options.file;let adapterSource=options.adapter;let activeSource=options.active,cleanupError=options.onCleanupError;let alive=true,epoch;const hostActive=useHostActive(),control={native:void 0,available:false};const snapshot=shallowRef(),error=shallowRef(),ready=shallowRef(false);const actions=actionHandle();actions.set(control);const availability=enabled=>{const available=enabled===true;control.available=available;ready.value=available&&control.native!==void 0;if(!available&&control.native?.getSnapshot().state?.status==="uploading")control.native.cancel()};watch(()=>{try{return hostActive.value&&(activeSource===void 0||toValue(activeSource))}catch(failure){availability(false);throw failure}},availability,{flush:"sync",immediate:true});const release=()=>{epoch=void 0;const held=control.native;control.native=void 0;snapshot.value=void 0;error.value=void 0;ready.value=false;held?.destroy()};useConnectionLifetime({read:()=>[fileSource===void 0?void 0:toValue(fileSource),unref(adapterSource)],equal:(a,b)=>a[0]===b[0]&&a[1]===b[1],disconnect:release,connect([file,adapter]){if(!alive)return;const token={};epoch=token;const result=tryCreateFileUpload({file,adapter,...cleanupError===void 0?{}:{onCleanupError:cleanupError},onUpdate(){if(alive&&epoch===token&&control.native)snapshot.value=control.native.getSnapshot()}});if(!alive||epoch!==token){if(result.ok)result.value.destroy();return}if(!result.ok){error.value=result.error;return}control.native=result.value;snapshot.value=result.value.getSnapshot();ready.value=control.available},dispose(){alive=false;control.available=false;actions.release();fileSource=void 0;adapterSource=void 0;activeSource=void 0;cleanupError=void 0}});return Object.freeze({...actions.view,snapshot:shallowReadonly(snapshot),error:shallowReadonly(error),ready:shallowReadonly(ready)})}export{useFileUpload};
2
+ //# sourceMappingURL=file-upload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/form/file-upload.ts"],"mappings":"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","names":[],"file":"file-upload.js"}
package/dist/form/root.js CHANGED
@@ -1,2 +1,2 @@
1
- import{createForm}from"@sectile/dom/form";import{defineComponent,shallowRef,nextTick,onMounted,onBeforeUnmount,watch,provide,h,mergeProps}from"vue";import{useHostId}from"../host-provider.js";import{useNextTickTask}from"../internal/scheduled-task.js";import{getFormFieldIDByPath}from"@sectile/form/state";import{formContextKey,useFormSelectorFromContext}from"./context.js";const FormRootImpl=defineComponent({name:"SectileFormRoot",inheritAttrs:false,props:{issues:{type:Array,default:()=>[]},schema:{type:Object,default:void 0},validate:{type:Function,default:void 0},validateOn:{type:Array,default:()=>[]},revalidateOn:{type:Array,default:()=>["input"]},onSubmit:{type:Function,default:void 0},mapSubmitError:{type:Function,default:void 0}},emits:{reset:()=>true,stateChange:_state=>true},slots:Object,setup(props,{attrs,emit,expose,slots}){const root=shallowRef(null);const summary=shallowRef(null);const summaryId=`${useHostId()}-summary`;const connection=shallowRef(null);const participants=new Map;const fieldDiagnostics=new Map;let syncConfiguredIssues=()=>{};let syncFieldDiagnostics=()=>{};const register=participant=>{const existing=participants.get(participant.id);existing?.unregister?.();const registered={participant};participants.set(participant.id,registered);if(connection.value!==null)registered.unregister=connection.value.registerParticipant(participant);void nextTick(()=>{syncConfiguredIssues();syncFieldDiagnostics()});return()=>{if(participants.get(participant.id)!==registered)return;registered.unregister?.();participants.delete(participant.id);void nextTick(()=>{syncConfiguredIssues();syncFieldDiagnostics()})}};const setFieldDiagnostic=(id,issue)=>{if(issue===null)fieldDiagnostics.delete(id);else fieldDiagnostics.set(id,issue);void nextTick(syncFieldDiagnostics)};const submit=payload=>{const handler=props.onSubmit;if(handler===void 0)return;const target=connection.value;if(target===null)return;const settle=resolved=>{if(typeof resolved!=="object"||resolved===null||resolved.ok!==false){return{ok:true}}const issues=resolveIssueInputs(target,"server",resolved.issues??[]);const failure=resolved.failure??(issues.length===0?submissionErrorFailure():void 0);return{ok:false,...failure===void 0?{}:{failure},...issues.length===0?{}:{issues}}};let result;try{const candidate=handler(toFormSubmitEvent(payload));if(isPromiseLike(candidate)){return Promise.resolve(candidate).then(settle,error=>({ok:false,failure:mapSubmissionError(props.mapSubmitError,error)}))}result=candidate}catch(error){return{ok:false,failure:mapSubmissionError(props.mapSubmitError,error)}}return settle(result)};const configuration=()=>({...summary.value===null?{}:{summary:summary.value},renderSummaryContent:false,manageSummaryVisibility:false,...props.schema===void 0?{}:{schema:props.schema},...props.validate===void 0?{}:{validate:props.validate},validateOn:props.validateOn,revalidateOn:props.revalidateOn,...props.onSubmit===void 0?{}:{onSubmit:submit},onReset:()=>{emit("reset");void nextTick(syncFieldDiagnostics)},onStateChange:next=>{emit("stateChange",next)}});syncConfiguredIssues=()=>{const target=connection.value;if(target===null)return;target.replaceIssues("form",resolveIssueInputs(target,"form",props.issues))};syncFieldDiagnostics=()=>{connection.value?.replaceIssues("field",[...fieldDiagnostics.values()])};const mount=()=>{if(root.value===null)return;connection.value?.destroy();connection.value=createForm({form:root.value,...configuration()});for(const registered of participants.values()){registered.unregister=connection.value.registerParticipant(registered.participant)}syncConfiguredIssues();syncFieldDiagnostics();emit("stateChange",connection.value.state)};const mountTask=useNextTickTask(mount);onMounted(mountTask.schedule);onBeforeUnmount(()=>{mountTask.cancel();connection.value?.destroy();connection.value=null});watch([summary,()=>props.schema,()=>props.validate,()=>[...props.validateOn],()=>[...props.revalidateOn],()=>props.onSubmit,()=>props.mapSubmitError],()=>{void nextTick(()=>connection.value?.reconfigure(configuration()))});watch(()=>props.issues,()=>{void nextTick(syncConfiguredIssues)},{deep:true});const actions={submitStarted:()=>connection.value?.submitStarted()??null,submitSucceeded:generation=>connection.value?.submitSucceeded(generation)??false,submitFailed:(generation,result)=>connection.value?.submitFailed(generation,result)??false,replaceIssues:(source,issues)=>connection.value?.replaceIssues(source,issues)??false,reinitialize:options=>connection.value?.reinitialize(options),reset:()=>connection.value?.reset()};const formContext={summary,summaryId,register,setFieldDiagnostic,connection};provide(formContextKey,formContext);const validation=useFormSelectorFromContext(formContext,()=>current=>current.validation);const submission=useFormSelectorFromContext(formContext,()=>current=>current.submission);const selectedState=useFormSelectorFromContext(formContext,()=>current=>current);const valid=useFormSelectorFromContext(formContext,()=>current=>current.valid);const touched=useFormSelectorFromContext(formContext,()=>current=>current.touched);const dirty=useFormSelectorFromContext(formContext,()=>current=>current.dirty);const slotProps=Object.freeze({get state(){return selectedState.value},get validation(){return validation.value},get submission(){return submission.value},get valid(){return valid.value},get touched(){return touched.value},get dirty(){return dirty.value},get submitted(){return submission.value.count>0},get submitCount(){return submission.value.count},...actions});expose(actions);return()=>h("form",mergeProps(attrs,{ref:element=>{root.value=element},"data-scope":"form","data-part":"root","data-validation-status":validation.value.status,"data-submission-status":submission.value.status}),slots["default"]?.(slotProps)??[])}});const FormRoot=FormRootImpl;function toFormSubmitEvent(payload){return Object.freeze({formData:payload.formData,values:payload.values,submitter:payload.submitter,state:payload.state,reinitialize:payload.reinitialize,nativeEvent:payload.event,get defaultPrevented(){return payload.event.defaultPrevented},preventDefault:()=>payload.event.preventDefault(),stopPropagation:()=>payload.event.stopPropagation(),stopImmediatePropagation:()=>payload.event.stopImmediatePropagation()})}function isPromiseLike(value){return typeof value==="object"&&value!==null&&"then"in value&&typeof value.then==="function"}function resolveIssueInputs(target,source,input){const state=target.getSnapshot().state;return Object.freeze(input.map((issue,index)=>{const owner=issue.path===void 0?null:getFormFieldIDByPath(state,issue.path);const relatedFieldIds=new Set;for(const path of issue.relatedPaths??[]){const related2=getFormFieldIDByPath(state,path);if(related2!==null&&related2!==owner)relatedFieldIds.add(related2)}const related=Object.freeze([...relatedFieldIds]);return Object.freeze({id:issue.id??`form-${source}-issue-${index+1}`,message:issue.message,source,...owner===null?{}:{fieldId:owner},...related.length===0?{}:{relatedFieldIds:related}})}))}function mapSubmissionError(mapper,reason){if(mapper!==void 0){try{const mapped=mapper(reason);if(mapped!==void 0)return Object.freeze({message:mapped.message})}catch{}}return submissionErrorFailure()}function submissionErrorFailure(){return Object.freeze({message:"Form submission failed."})}export{FormRoot};
1
+ import{createForm}from"@sectile/dom/form";import{defineComponent,shallowRef,nextTick,onMounted,onBeforeUnmount,watch,provide,h,mergeProps}from"vue";import{provideHostActive,useHostActive,useHostId}from"../host-provider.js";import{useNextTickTask}from"../internal/scheduled-task.js";import{getFormFieldIDByPath}from"@sectile/form/state";import{formContextKey,useFormSelectorFromContext}from"./context.js";const FormRootImpl=defineComponent({name:"SectileFormRoot",inheritAttrs:false,props:{issues:{type:Array,default:()=>[]},schema:{type:Object,default:void 0},validate:{type:Function,default:void 0},validateOn:{type:Array,default:()=>[]},revalidateOn:{type:Array,default:()=>["input"]},onSubmit:{type:Function,default:void 0},mapSubmitError:{type:Function,default:void 0}},emits:{reset:()=>true,stateChange:_state=>true},slots:Object,setup(props,{attrs,emit,expose,slots}){const availability=useHostActive();const active=shallowRef(availability.value);provideHostActive(active);const root=shallowRef(null);const summary=shallowRef(null);const summaryId=`${useHostId()}-summary`;const connection=shallowRef(null);const participants=new Map;let resetGeneration=0;let resetConnection=null;const resetValuesTask=useNextTickTask(()=>{const target=resetConnection;const generation=resetGeneration;resetConnection=null;if(target===null||connection.value!==target||!active.value)return;for(const[id,registered]of[...participants]){if(connection.value!==target||!active.value||generation!==resetGeneration)break;if(participants.get(id)===registered&&registered.participant.active!==false)target.refreshParticipant(id,"baseline")}});const fieldDiagnostics=new Map;let syncConfiguredIssues=()=>{};let syncFieldDiagnostics=()=>{};const register=participant=>{const registered={participant};participants.set(participant.id,registered);if(connection.value!==null)registered.unregister=connection.value.registerParticipant(participant);void nextTick(()=>{syncConfiguredIssues();syncFieldDiagnostics()});return()=>{if(participants.get(participant.id)!==registered)return;registered.unregister?.();participants.delete(participant.id);void nextTick(()=>{syncConfiguredIssues();syncFieldDiagnostics()})}};const setFieldDiagnostic=(id,issue)=>{if(issue===null)fieldDiagnostics.delete(id);else fieldDiagnostics.set(id,issue);void nextTick(syncFieldDiagnostics)};const submit=payload=>{const handler=props.onSubmit;if(handler===void 0)return;const target=connection.value;if(target===null)return;const settle=resolved=>{if(typeof resolved!=="object"||resolved===null||resolved.ok!==false){return{ok:true}}const issues=resolveIssueInputs(target,"server",resolved.issues??[]);const failure=resolved.failure??(issues.length===0?submissionErrorFailure():void 0);return{ok:false,...failure===void 0?{}:{failure},...issues.length===0?{}:{issues}}};let result;try{const candidate=handler(toFormSubmitEvent(payload));if(isPromiseLike(candidate)){return Promise.resolve(candidate).then(settle,error=>({ok:false,failure:mapSubmissionError(props.mapSubmitError,error)}))}result=candidate}catch(error){return{ok:false,failure:mapSubmissionError(props.mapSubmitError,error)}}return settle(result)};const configuration=()=>({...summary.value===null?{}:{summary:summary.value},renderSummaryContent:false,manageSummaryVisibility:false,...props.schema===void 0?{}:{schema:props.schema},...props.validate===void 0?{}:{validate:props.validate},validateOn:props.validateOn,revalidateOn:props.revalidateOn,...props.onSubmit===void 0?{}:{onSubmit:submit},onReset:()=>{const target=connection.value,generation=++resetGeneration;emit("reset");queueMicrotask(()=>{if(target===null||connection.value!==target||!active.value||generation!==resetGeneration)return;resetConnection=target;resetValuesTask.schedule()});void nextTick(syncFieldDiagnostics)},onStateChange:next=>{emit("stateChange",next)}});syncConfiguredIssues=()=>{const target=connection.value;if(target===null)return;target.replaceIssues("form",resolveIssueInputs(target,"form",props.issues))};syncFieldDiagnostics=()=>{connection.value?.replaceIssues("field",[...fieldDiagnostics.values()])};const mount=()=>{if(root.value===null||!availability.value)return;connection.value?.destroy();connection.value=createForm({form:root.value,...configuration()});for(const registered of participants.values()){registered.unregister=connection.value.registerParticipant(registered.participant)}syncConfiguredIssues();syncFieldDiagnostics();emit("stateChange",connection.value.state);active.value=connection.value.getActive()};const mountTask=useNextTickTask(mount);onMounted(mountTask.schedule);onBeforeUnmount(()=>{resetGeneration++;resetConnection=null;resetValuesTask.cancel();mountTask.cancel();connection.value?.destroy();connection.value=null});watch(availability,next=>{if(!next){resetGeneration++;resetConnection=null;resetValuesTask.cancel();active.value=false;mountTask.cancel();connection.value?.suspend()}},{flush:"sync"});watch(availability,next=>{if(!next)return;if(connection.value===null)mountTask.schedule();else{try{connection.value.reconfigure(configuration());connection.value.resume();active.value=connection.value.getActive()}catch(error){active.value=false;try{connection.value.suspend()}catch{}throw error}}},{flush:"post"});watch([summary,()=>props.schema,()=>props.validate,()=>[...props.validateOn],()=>[...props.revalidateOn],()=>props.onSubmit,()=>props.mapSubmitError],()=>{void nextTick(()=>{if(active.value)connection.value?.reconfigure(configuration())})});watch(()=>props.issues,()=>{void nextTick(syncConfiguredIssues)},{deep:true});const actions={submitStarted:()=>connection.value?.submitStarted()??null,submitSucceeded:generation=>connection.value?.submitSucceeded(generation)??false,submitFailed:(generation,result)=>connection.value?.submitFailed(generation,result)??false,replaceIssues:(source,issues)=>connection.value?.replaceIssues(source,issues)??false,reinitialize:options=>connection.value?.reinitialize(options),reset:()=>connection.value?.reset()};const formContext={active,summary,summaryId,register,setFieldDiagnostic,connection};provide(formContextKey,formContext);const validation=useFormSelectorFromContext(formContext,()=>current=>current.validation);const submission=useFormSelectorFromContext(formContext,()=>current=>current.submission);const selectedState=useFormSelectorFromContext(formContext,()=>current=>current);const valid=useFormSelectorFromContext(formContext,()=>current=>current.valid);const touched=useFormSelectorFromContext(formContext,()=>current=>current.touched);const dirty=useFormSelectorFromContext(formContext,()=>current=>current.dirty);const slotProps=Object.freeze({get state(){return selectedState.value},get validation(){return validation.value},get submission(){return submission.value},get valid(){return valid.value},get touched(){return touched.value},get dirty(){return dirty.value},get submitted(){return submission.value.count>0},get submitCount(){return submission.value.count},...actions});expose(actions);return()=>h("form",mergeProps(attrs,{ref:element=>{root.value=element},"data-scope":"form","data-part":"root",...!active.value?{inert:true,"aria-hidden":"true"}:{},"data-validation-status":validation.value.status,"data-submission-status":submission.value.status}),slots["default"]?.(slotProps)??[])}});const FormRoot=FormRootImpl;function toFormSubmitEvent(payload){return Object.freeze({formData:payload.formData,values:payload.values,submitter:payload.submitter,state:payload.state,reinitialize:payload.reinitialize,nativeEvent:payload.event,get defaultPrevented(){return payload.event.defaultPrevented},preventDefault:()=>payload.event.preventDefault(),stopPropagation:()=>payload.event.stopPropagation(),stopImmediatePropagation:()=>payload.event.stopImmediatePropagation()})}function isPromiseLike(value){return typeof value==="object"&&value!==null&&"then"in value&&typeof value.then==="function"}function resolveIssueInputs(target,source,input){const state=target.getSnapshot().state;return Object.freeze(input.map((issue,index)=>{const owner=issue.path===void 0?null:getFormFieldIDByPath(state,issue.path);const relatedFieldIds=new Set;for(const path of issue.relatedPaths??[]){const related2=getFormFieldIDByPath(state,path);if(related2!==null&&related2!==owner)relatedFieldIds.add(related2)}const related=Object.freeze([...relatedFieldIds]);return Object.freeze({id:issue.id??`form-${source}-issue-${index+1}`,message:issue.message,source,...owner===null?{}:{fieldId:owner},...related.length===0?{}:{relatedFieldIds:related}})}))}function mapSubmissionError(mapper,reason){if(mapper!==void 0){try{const mapped=mapper(reason);if(mapped!==void 0)return Object.freeze({message:mapped.message})}catch{}}return submissionErrorFailure()}function submissionErrorFailure(){return Object.freeze({message:"Form submission failed."})}export{FormRoot};
2
2
  //# sourceMappingURL=root.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/form/root.ts"],"mappings":"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","names":["related"],"file":"root.js"}
1
+ {"version":3,"sources":["../../src/form/root.ts"],"mappings":"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","names":["related"],"file":"root.js"}
@@ -0,0 +1,2 @@
1
+ export declare const provideFormBoundary: () => void;
2
+ export { useFormFieldDefaults, provideFormControlReset, type FormFieldDefaults } from './form/control.js';
@@ -0,0 +1,2 @@
1
+ import{provideFormBoundary as provideBoundary}from"./form/context.js";const provideFormBoundary=provideBoundary;import{useFormFieldDefaults,provideFormControlReset}from"./form/control.js";export{provideFormBoundary,provideFormControlReset,useFormFieldDefaults};
2
+ //# sourceMappingURL=form-boundary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/form-boundary.ts"],"mappings":"AACA,OAAS,uBAAuB,oBAAuB,oBAEhD,MAAM,oBAAkC,gBAC/C,OAAS,qBAAsB,4BAAuD","names":[],"file":"form-boundary.js"}
@@ -0,0 +1,16 @@
1
+ import { type Ref, type ShallowRef } from 'vue';
2
+ import { type FullscreenConnection, type FullscreenErrorCode, type FullscreenSnapshot } from '@sectile/dom/fullscreen';
3
+ export type { FullscreenErrorCode, FullscreenOperation, FullscreenSnapshot } from '@sectile/dom/fullscreen';
4
+ export interface UseFullscreenOptions {
5
+ readonly element: Readonly<Ref<HTMLElement | null>>;
6
+ readonly active?: Readonly<Ref<boolean>>;
7
+ }
8
+ type FullscreenMethods = Pick<FullscreenConnection, 'enter' | 'exit' | 'refresh'>;
9
+ export interface UseFullscreenReturn extends FullscreenMethods {
10
+ /** Undefined before mount, while inactive, and after the owning scope retires. */
11
+ readonly snapshot: Readonly<ShallowRef<FullscreenSnapshot | undefined>>;
12
+ /** Connection admission failure, not the result of enter/exit/refresh. */
13
+ readonly error: Readonly<ShallowRef<FullscreenErrorCode | undefined>>;
14
+ }
15
+ /** Component-scoped publication and lifetime over the canonical native owner. */
16
+ export declare function useFullscreen(options: UseFullscreenOptions): UseFullscreenReturn;
@@ -0,0 +1,2 @@
1
+ import{getCurrentInstance,isRef,shallowReadonly,shallowRef}from"vue";import{failResult}from"@sectile/core/result";import{connectFullscreen}from"@sectile/dom/fullscreen";import{createComponentHandle}from"./component-handle.js";import{useHostActive}from"./host-provider.js";import{useConnectionLifetime}from"./internal/connection-lifetime.js";const disposed=()=>failResult("resource-rejection","dom.fullscreen-disposed","No active fullscreen connection");function projectMethods(current){return Object.freeze({enter:()=>current()?.enter()??Promise.resolve(disposed()),exit:()=>current()?.exit()??Promise.resolve(disposed()),refresh:()=>current()?.refresh()??disposed()})}function useFullscreen(options){if(!getCurrentInstance())throw Object.assign(new TypeError("useFullscreen requires component setup"),{code:"vue.fullscreen-scope-required"});if(!isRef(options.element)||options.active!==void 0&&(!isRef(options.active)||typeof options.active.value!=="boolean")){throw Object.assign(new TypeError("useFullscreen requires an element ref and optional active ref"),{code:"vue.fullscreen-invalid"})}let element=options.element;let active=options.active;let host=useHostActive();let alive=true,native,epoch;const snapshot=shallowRef(),error=shallowRef();const handle=createComponentHandle(projectMethods);const read=()=>{const enabled=alive&&host?.value!==false&&active?.value!==false;return[enabled?element?.value??null:null,enabled]};const release=()=>{epoch=void 0;handle.release();const held=native;native=void 0;try{held?.disconnect()}finally{snapshot.value=void 0;error.value=void 0}};const attach=([target,enabled])=>{if(!enabled||!target)return;const token={};epoch=token;const result=connectFullscreen({element:target,onChange(value){if(alive&&epoch===token)snapshot.value=value}});if(result.ok){if(alive&&epoch===token){native=result.value;handle.set(native)}else result.value.disconnect()}else if(epoch===token){epoch=void 0;error.value=result.error.code}};useConnectionLifetime({read,equal:(next,previous)=>next[0]===previous[0]&&next[1]===previous[1],connect:attach,disconnect:release,dispose(){alive=false;element=void 0;active=void 0;host=void 0}});return Object.freeze({...handle.view,snapshot:shallowReadonly(snapshot),error:shallowReadonly(error)})}export{useFullscreen};
2
+ //# sourceMappingURL=fullscreen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/fullscreen.ts"],"mappings":"AAAA,OAAS,mBAAoB,MAAO,gBAAiB,eAA6C,MAClG,OAAS,eAA+B,uBACxC,OAAS,sBAAuG,0BAChH,OAAS,0BAA6B,wBACtC,OAAS,kBAAqB,qBAC9B,OAAS,0BAA6B,oCAetC,MAAM,SAAW,IAA0C,WAAW,qBAAsB,0BAA2B,iCAAiC,EAExJ,SAAS,eAAe,QAA0C,CAChE,OAAO,OAAO,OAAO,CACnB,MAAO,IAAM,QAAO,GAAI,MAAK,GAAM,QAAQ,QAAQ,SAAQ,CAAE,EAC7D,KAAM,IAAM,QAAO,GAAI,KAAI,GAAM,QAAQ,QAAQ,SAAQ,CAAE,EAC3D,QAAS,IAAM,QAAO,GAAI,QAAO,GAAM,SAAQ,EAChD,CACH,CAGM,SAAU,cAAc,QAA6B,CACzD,GAAI,CAAC,mBAAkB,EAAI,MAAM,OAAO,OAAO,IAAI,UAAU,wCAAwC,EAAG,CAAE,KAAM,+BAA+B,CAAE,EACjJ,GAAI,CAAC,MAAM,QAAQ,OAAO,GAAK,QAAQ,SAAW,SAAc,CAAC,MAAM,QAAQ,MAAM,GAAK,OAAO,QAAQ,OAAO,QAAU,WAAY,CACpI,MAAM,OAAO,OAAO,IAAI,UAAU,+DAA+D,EAAG,CAAE,KAAM,wBAAwB,CAAE,CACxI,CACA,IAAI,QAAuD,QAAQ,QACnE,IAAI,OAAyC,QAAQ,OACrD,IAAI,KAAqD,cAAa,EACtE,IAAI,MAAQ,KAAM,OAA0C,MAC5D,MAAM,SAAW,WAAU,EAAwB,MAAQ,WAAU,EACrE,MAAM,OAAS,sBAA+D,cAAc,EAC5F,MAAM,KAAO,IAAsB,CACjC,MAAM,QAAU,OAAS,MAAM,QAAU,OAAS,QAAQ,QAAU,MACpE,MAAO,CAAC,QAAU,SAAS,OAAS,KAAO,KAAM,OAAO,CAC1D,EACA,MAAM,QAAU,IAAW,CACzB,MAAQ,OAAW,OAAO,QAAO,EACjC,MAAM,KAAO,OAAQ,OAAS,OAC9B,GAAI,CAAE,MAAM,WAAU,CAAI,SAChB,SAAS,MAAQ,OAAW,MAAM,MAAQ,MAAW,CACjE,EACA,MAAM,OAAS,CAAC,CAAC,OAAQ,OAAO,IAA4B,CAC1D,GAAI,CAAC,SAAW,CAAC,OAAQ,OACzB,MAAM,MAAQ,CAAA,EAAI,MAAQ,MAC1B,MAAM,OAAS,kBAAkB,CAAE,QAAS,OAAQ,SAAS,MAAK,CAChE,GAAI,OAAS,QAAU,MAAO,SAAS,MAAQ,KACjD,CAAC,CAAE,EACH,GAAI,OAAO,GAAI,CACb,GAAI,OAAS,QAAU,MAAO,CAAE,OAAS,OAAO,MAAO,OAAO,IAAI,MAAM,CAAG,MACtE,OAAO,MAAM,WAAU,CAC9B,SAAW,QAAU,MAAO,CAAE,MAAQ,OAAW,MAAM,MAAQ,OAAO,MAAM,IAAM,CACpF,EACA,sBAAuC,CAAE,KAAM,MAAO,CAAC,KAAM,WAAa,KAAK,CAAC,IAAM,SAAS,CAAC,GAAK,KAAK,CAAC,IAAM,SAAS,CAAC,EAAG,QAAS,OAAQ,WAAY,QAAS,SAAO,CACzK,MAAQ,MAAO,QAAU,OAAW,OAAS,OAAW,KAAO,MACjE,CAAC,CAAE,EACH,OAAO,OAAO,OAAO,CAAE,GAAG,OAAO,KAAM,SAAU,gBAAgB,QAAQ,EAAG,MAAO,gBAAgB,KAAK,CAAC,CAAE,CAC7G","names":[],"file":"fullscreen.js"}