@satinhq/kit 0.1.0-beta.3 → 0.1.0-beta.4

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 (240) hide show
  1. package/NOTICE +1 -1
  2. package/README.md +1 -2
  3. package/dist/acknowledgements/inventory.json +1 -1
  4. package/dist/actions/RowActions.d.ts +2 -2
  5. package/dist/actions/RowActions.js +91 -25
  6. package/dist/actions/fullSwipeContact.d.ts +73 -0
  7. package/dist/actions/fullSwipeContact.js +186 -0
  8. package/dist/actions/rowScrub.d.ts +7 -4
  9. package/dist/actions/rowScrub.js +39 -37
  10. package/dist/actions/types.d.ts +13 -7
  11. package/dist/app/InstallComponents.d.ts +4 -7
  12. package/dist/app/InstallComponents.js +7 -7
  13. package/dist/app/InstallationDiagnostics.d.ts +2 -1
  14. package/dist/app/InstallationDiagnostics.js +2 -1
  15. package/dist/app/appearance.d.ts +5 -3
  16. package/dist/app/appearance.js +5 -3
  17. package/dist/app/appearanceStore.d.ts +3 -2
  18. package/dist/app/buildInfo.d.ts +4 -4
  19. package/dist/app/buildInfo.js +2 -2
  20. package/dist/app/definition.d.ts +11 -3
  21. package/dist/app/definition.js +2 -0
  22. package/dist/app/head.d.ts +2 -1
  23. package/dist/app/head.js +13 -16
  24. package/dist/app/inlineCSP.d.ts +6 -0
  25. package/dist/app/inlineCSP.js +25 -0
  26. package/dist/app/install.d.ts +1 -0
  27. package/dist/app/install.js +5 -2
  28. package/dist/app/installCheck.js +32 -86
  29. package/dist/app/installContext.d.ts +10 -5
  30. package/dist/app/installContext.js +2 -0
  31. package/dist/app/installCustom.js +1 -0
  32. package/dist/app/installExperience.js +0 -60
  33. package/dist/app/installationFailure.d.ts +3 -2
  34. package/dist/app/installationFailure.js +1 -1
  35. package/dist/app/launchScreen.d.ts +6 -2
  36. package/dist/app/launchScreen.js +104 -1
  37. package/dist/app/launchScreenRuntime.d.ts +31 -4
  38. package/dist/app/launchScreenRuntime.js +150 -22
  39. package/dist/app/launchWatchdog.js +25 -65
  40. package/dist/app/platformScripts.js +11 -0
  41. package/dist/app/styles.d.ts +3 -0
  42. package/dist/app/styles.js +42 -0
  43. package/dist/app/viewportValue.d.ts +2 -1
  44. package/dist/app/vite.d.ts +4 -0
  45. package/dist/app/vite.js +22 -24
  46. package/dist/content/content.d.ts +35 -30
  47. package/dist/content/content.js +19 -16
  48. package/dist/content/layout.d.ts +10 -2
  49. package/dist/content/layout.js +4 -2
  50. package/dist/content/scaledMetric.d.ts +2 -1
  51. package/dist/content/scaledMetric.js +2 -1
  52. package/dist/controls/ColorPicker.d.ts +2 -4
  53. package/dist/controls/ColorPicker.js +2 -4
  54. package/dist/controls/DatePicker.d.ts +4 -4
  55. package/dist/controls/DatePicker.js +2 -2
  56. package/dist/controls/ProgressView.d.ts +4 -4
  57. package/dist/controls/ProgressView.js +1 -2
  58. package/dist/data/database.d.ts +9 -8
  59. package/dist/data/database.js +4 -4
  60. package/dist/docs/reference.md +982 -964
  61. package/dist/docs/tailwind.md +76 -0
  62. package/dist/docs/tokens.md +1 -1
  63. package/dist/gestures/GestureView.d.ts +3 -1
  64. package/dist/gestures/GestureView.js +2 -1
  65. package/dist/gestures/gesture.d.ts +22 -2
  66. package/dist/gestures/gesture.js +7 -2
  67. package/dist/glass/GlassEffect.d.ts +2 -1
  68. package/dist/glass/GlassEffect.js +2 -1
  69. package/dist/glass/GlassPresentation.d.ts +1 -0
  70. package/dist/glass/GlassPresentation.js +21 -4
  71. package/dist/glass/TabBar.js +23 -1
  72. package/dist/glass/errorAlert.js +2 -1
  73. package/dist/glass/errors.d.ts +3 -1
  74. package/dist/glass/fallback/runtime.d.ts +1 -0
  75. package/dist/glass/fallback/runtime.js +8 -1
  76. package/dist/glass/liquidContext.d.ts +2 -0
  77. package/dist/glass/menuPresenter.d.ts +2 -0
  78. package/dist/glass/regions.d.ts +2 -1
  79. package/dist/glass/renderSpecs.d.ts +1 -0
  80. package/dist/glass/renderSpecs.js +1 -0
  81. package/dist/glass/webgpu/controlRim.d.ts +29 -0
  82. package/dist/glass/webgpu/controlRim.js +68 -0
  83. package/dist/glass/webgpu/passes.d.ts +2 -2
  84. package/dist/glass/webgpu/production.d.ts +1 -0
  85. package/dist/glass/webgpu/production.js +27 -1
  86. package/dist/glass/webgpu/rasterUniforms.js +9 -0
  87. package/dist/glass/webgpu/shaders.d.ts +2 -2
  88. package/dist/glass/webgpu/shaders.js +5 -1
  89. package/dist/haptics/SensoryButton.d.ts +4 -4
  90. package/dist/haptics/SensoryButton.js +3 -3
  91. package/dist/image/Image.d.ts +6 -3
  92. package/dist/image/Image.js +4 -3
  93. package/dist/image/asset.d.ts +2 -1
  94. package/dist/keyboard/adapter.d.ts +3 -4
  95. package/dist/keyboard/geometry.d.ts +1 -1
  96. package/dist/list-form/ListForm.d.ts +8 -7
  97. package/dist/list-form/ListForm.js +2 -2
  98. package/dist/list-form/editing.d.ts +5 -6
  99. package/dist/list-form/editing.js +4 -5
  100. package/dist/list-form/offsets.d.ts +2 -2
  101. package/dist/list-form/offsets.js +2 -2
  102. package/dist/media/react.d.ts +2 -1
  103. package/dist/media/react.js +2 -1
  104. package/dist/media/types.d.ts +6 -3
  105. package/dist/motion/TransitionView.d.ts +4 -2
  106. package/dist/motion/TransitionView.js +3 -2
  107. package/dist/motion/animationValue.d.ts +1 -1
  108. package/dist/motion/matchedGeometry.d.ts +6 -5
  109. package/dist/motion/matchedGeometry.js +2 -1
  110. package/dist/motion/transition.d.ts +4 -1
  111. package/dist/motion/transition.js +2 -0
  112. package/dist/navigation/DetailList.d.ts +1 -1
  113. package/dist/navigation/DetailList.js +1 -1
  114. package/dist/navigation/Sidebar.d.ts +3 -1
  115. package/dist/navigation/Sidebar.js +1 -1
  116. package/dist/navigation/SidebarSymbol.d.ts +2 -1
  117. package/dist/navigation/SidebarSymbol.js +2 -1
  118. package/dist/navigation/navigationContext.d.ts +2 -1
  119. package/dist/navigation/navigationContext.js +2 -1
  120. package/dist/navigation/splitContext.d.ts +2 -1
  121. package/dist/navigation/splitContext.js +2 -1
  122. package/dist/navigation/toolbarMinimization.d.ts +4 -3
  123. package/dist/navigation/types.d.ts +7 -5
  124. package/dist/presentation/Presentation.d.ts +8 -7
  125. package/dist/presentation/Presentation.js +3 -2
  126. package/dist/presentation/model.d.ts +2 -1
  127. package/dist/press/Pressable.d.ts +5 -1
  128. package/dist/press/Pressable.js +2 -0
  129. package/dist/press/stateMachine.d.ts +1 -1
  130. package/dist/public/Label.d.ts +2 -1
  131. package/dist/public/Label.js +2 -1
  132. package/dist/public/Screen.d.ts +4 -6
  133. package/dist/public/actions.d.ts +2 -1
  134. package/dist/public/actions.js +2 -1
  135. package/dist/public/buttonBorderShape.d.ts +2 -1
  136. package/dist/public/colors.d.ts +7 -4
  137. package/dist/public/colors.js +3 -2
  138. package/dist/public/controlStyle.d.ts +17 -14
  139. package/dist/public/controls.d.ts +27 -26
  140. package/dist/public/controls.js +20 -19
  141. package/dist/public/deviceActions.d.ts +6 -4
  142. package/dist/public/deviceActions.js +4 -2
  143. package/dist/public/environment.d.ts +16 -13
  144. package/dist/public/environment.js +11 -9
  145. package/dist/public/filePickers.d.ts +6 -4
  146. package/dist/public/filePickers.js +3 -2
  147. package/dist/public/glass.d.ts +6 -3
  148. package/dist/public/glass.js +2 -1
  149. package/dist/public/glassValue.d.ts +3 -4
  150. package/dist/public/glassValue.js +3 -4
  151. package/dist/public/keyboard.d.ts +4 -1
  152. package/dist/public/keyboard.js +2 -1
  153. package/dist/public/navigationTransition.d.ts +5 -5
  154. package/dist/public/navigationTransition.js +2 -2
  155. package/dist/public/presentation.d.ts +8 -7
  156. package/dist/public/presentation.js +5 -5
  157. package/dist/public/runtime.d.ts +9 -8
  158. package/dist/public/runtime.js +7 -7
  159. package/dist/public/scroll.d.ts +6 -3
  160. package/dist/public/scroll.js +3 -1
  161. package/dist/public/structure.d.ts +2 -2
  162. package/dist/public/toolbar.d.ts +15 -11
  163. package/dist/public/toolbar.js +12 -7
  164. package/dist/reachability/model.d.ts +4 -3
  165. package/dist/reachability/react.d.ts +4 -1
  166. package/dist/reachability/react.js +2 -1
  167. package/dist/root/SatinRoot.d.ts +3 -3
  168. package/dist/root/SatinRoot.js +12 -36
  169. package/dist/root/mountSatin.d.ts +1 -1
  170. package/dist/root/mountSatin.js +26 -35
  171. package/dist/root/runtimeContext.d.ts +2 -1
  172. package/dist/root/runtimeContext.js +2 -1
  173. package/dist/safe-area/Overlay.d.ts +3 -2
  174. package/dist/safe-area/Overlay.js +2 -1
  175. package/dist/safe-area/SafeAreaInset.d.ts +11 -7
  176. package/dist/safe-area/SafeAreaInset.js +7 -6
  177. package/dist/safe-area/context.d.ts +3 -3
  178. package/dist/safe-area/context.js +1 -1
  179. package/dist/safe-area/displayCorners.d.ts +4 -2
  180. package/dist/safe-area/displayCorners.js +4 -2
  181. package/dist/safe-area/modifiers.d.ts +14 -10
  182. package/dist/safe-area/modifiers.js +8 -4
  183. package/dist/scroll/ScrollSurface.js +5 -1
  184. package/dist/scroll/ScrollTarget.d.ts +1 -1
  185. package/dist/scroll/ScrollTarget.js +1 -1
  186. package/dist/scroll/edgePolicy.d.ts +2 -2
  187. package/dist/scroll/position.d.ts +5 -3
  188. package/dist/scroll/types.d.ts +1 -1
  189. package/dist/search/PadSearchDrawer.d.ts +7 -0
  190. package/dist/search/PadSearchDrawer.js +8 -0
  191. package/dist/search/PadSearchPresentationContext.d.ts +6 -0
  192. package/dist/search/PadSearchPresentationContext.js +4 -0
  193. package/dist/search/SearchDrawer.d.ts +1 -1
  194. package/dist/search/SearchDrawer.js +6 -1
  195. package/dist/search/SearchSuggestionsPopover.d.ts +6 -0
  196. package/dist/search/SearchSuggestionsPopover.js +42 -0
  197. package/dist/search/SearchToolbarField.d.ts +2 -1
  198. package/dist/search/SearchToolbarField.js +28 -7
  199. package/dist/search/padSearchBarMotion.d.ts +69 -0
  200. package/dist/search/padSearchBarMotion.js +73 -0
  201. package/dist/search/padSearchFieldSamples.json +491 -0
  202. package/dist/search/searchPlacement.d.ts +3 -0
  203. package/dist/search/searchPlacement.js +7 -0
  204. package/dist/search/searchable.d.ts +14 -12
  205. package/dist/search/usePadSearchFieldMotion.d.ts +4 -0
  206. package/dist/search/usePadSearchFieldMotion.js +100 -0
  207. package/dist/search/useSearchPresentation.d.ts +2 -1
  208. package/dist/search/useSearchPresentation.js +23 -5
  209. package/dist/server.d.ts +4 -4
  210. package/dist/server.js +4 -4
  211. package/dist/shapes/corners.d.ts +3 -3
  212. package/dist/shapes/corners.js +1 -2
  213. package/dist/styles.css +8289 -8244
  214. package/dist/sw/vite.d.ts +4 -0
  215. package/dist/sw/vite.js +2 -0
  216. package/dist/symbols/Symbol.d.ts +7 -5
  217. package/dist/symbols/Symbol.js +5 -3
  218. package/dist/symbols/catalogue.d.ts +1 -1
  219. package/dist/symbols/types.d.ts +6 -4
  220. package/dist/tabs/TabSection.d.ts +3 -2
  221. package/dist/tabs/TabSection.js +2 -1
  222. package/dist/tabs/TabView.js +54 -51
  223. package/dist/tasks/useTask.d.ts +5 -4
  224. package/dist/tasks/useTask.js +4 -3
  225. package/dist/testing.d.ts +3 -2
  226. package/dist/testing.js +3 -2
  227. package/dist/text-input/focusChain.d.ts +4 -3
  228. package/dist/text-input/focusChain.js +3 -2
  229. package/dist/text-input/kinds.d.ts +1 -1
  230. package/dist/web/WebView.d.ts +10 -3
  231. package/dist/web/WebView.js +3 -2
  232. package/dist/web/authentication.d.ts +12 -1
  233. package/dist/web/authentication.js +2 -1
  234. package/dist/web/openURL.d.ts +10 -4
  235. package/dist/web/openURL.js +4 -2
  236. package/dist/web/useWebAuthentication.d.ts +2 -1
  237. package/dist/web/useWebAuthentication.js +2 -1
  238. package/dist/zoom/Zoomable.d.ts +3 -3
  239. package/dist/zoom/Zoomable.js +2 -2
  240. package/package.json +1 -1
@@ -0,0 +1,491 @@
1
+ {
2
+ "activate": [
3
+ [
4
+ 0,
5
+ 0,
6
+ 1
7
+ ],
8
+ [
9
+ 57.4967,
10
+ 0.0,
11
+ 1.0
12
+ ],
13
+ [
14
+ 74.1729,
15
+ 0.0652467,
16
+ 1.0138658
17
+ ],
18
+ [
19
+ 90.849,
20
+ 0.2004327,
21
+ 1.0439458
22
+ ],
23
+ [
24
+ 107.5252,
25
+ 0.3763662,
26
+ 1.0818851
27
+ ],
28
+ [
29
+ 124.2014,
30
+ 0.5673563,
31
+ 1.1210582
32
+ ],
33
+ [
34
+ 140.8775,
35
+ 0.7382877,
36
+ 1.1567626
37
+ ],
38
+ [
39
+ 157.5537,
40
+ 0.9098744,
41
+ 1.1861394
42
+ ],
43
+ [
44
+ 174.2299,
45
+ 1.0536432,
46
+ 1.2064163
47
+ ],
48
+ [
49
+ 190.906,
50
+ 1.1562577,
51
+ 1.2093241
52
+ ],
53
+ [
54
+ 207.5822,
55
+ 1.2430089,
56
+ 1.197464
57
+ ],
58
+ [
59
+ 224.2584,
60
+ 1.2866309,
61
+ 1.1753846
62
+ ],
63
+ [
64
+ 240.9345,
65
+ 1.2933475,
66
+ 1.1473579
67
+ ],
68
+ [
69
+ 257.6107,
70
+ 1.2721306,
71
+ 1.1170045
72
+ ],
73
+ [
74
+ 274.2869,
75
+ 1.2308359,
76
+ 1.087125
77
+ ],
78
+ [
79
+ 290.963,
80
+ 1.1887407,
81
+ 1.0596843
82
+ ],
83
+ [
84
+ 307.6392,
85
+ 1.1376266,
86
+ 1.0358958
87
+ ],
88
+ [
89
+ 324.3154,
90
+ 1.0935446,
91
+ 1.0163525
92
+ ],
93
+ [
94
+ 340.9915,
95
+ 1.0583051,
96
+ 1.0011722
97
+ ],
98
+ [
99
+ 357.6677,
100
+ 1.0201898,
101
+ 0.9901336
102
+ ],
103
+ [
104
+ 374.3439,
105
+ 0.9668736,
106
+ 0.9827955
107
+ ],
108
+ [
109
+ 391.02,
110
+ 0.9475126,
111
+ 0.9785925
112
+ ],
113
+ [
114
+ 407.6962,
115
+ 0.9360613,
116
+ 0.9769109
117
+ ],
118
+ [
119
+ 424.3724,
120
+ 0.931238,
121
+ 0.977144
122
+ ],
123
+ [
124
+ 441.0485,
125
+ 0.9316799,
126
+ 0.9787317
127
+ ],
128
+ [
129
+ 457.7247,
130
+ 0.9360493,
131
+ 0.9811846
132
+ ],
133
+ [
134
+ 474.4009,
135
+ 0.9431103,
136
+ 0.9840978
137
+ ],
138
+ [
139
+ 491.077,
140
+ 0.9523869,
141
+ 0.9874203
142
+ ],
143
+ [
144
+ 507.7532,
145
+ 0.9607718,
146
+ 0.9899524
147
+ ],
148
+ [
149
+ 524.4294,
150
+ 0.9694654,
151
+ 0.9923857
152
+ ],
153
+ [
154
+ 541.1055,
155
+ 0.9827386,
156
+ 0.995813
157
+ ],
158
+ [
159
+ 557.7817,
160
+ 0.989996,
161
+ 0.997571
162
+ ],
163
+ [
164
+ 574.4579,
165
+ 0.9961717,
166
+ 0.9990055
167
+ ],
168
+ [
169
+ 591.134,
170
+ 0.9983121,
171
+ 0.9994891
172
+ ],
173
+ [
174
+ 607.8102,
175
+ 1.0028168,
176
+ 1.0004818
177
+ ],
178
+ [
179
+ 624.4864,
180
+ 1.0061356,
181
+ 1.001188
182
+ ],
183
+ [
184
+ 641.1625,
185
+ 1.0083492,
186
+ 1.001643
187
+ ],
188
+ [
189
+ 657.8387,
190
+ 1.0099158,
191
+ 1.0
192
+ ],
193
+ [
194
+ 674.5149,
195
+ 1.0099896,
196
+ 1.0
197
+ ],
198
+ [
199
+ 691.191,
200
+ 1.0097343,
201
+ 1.0
202
+ ],
203
+ [
204
+ 707.8672,
205
+ 1.0089822,
206
+ 1.0
207
+ ],
208
+ [
209
+ 724.5434,
210
+ 0.97795,
211
+ 0.9946097
212
+ ],
213
+ [
214
+ 741.2195,
215
+ 1.0071289,
216
+ 1.0
217
+ ],
218
+ [
219
+ 757.8957,
220
+ 1.0057733,
221
+ 1.0
222
+ ],
223
+ [
224
+ 774.5719,
225
+ 1.0038603,
226
+ 1.0
227
+ ],
228
+ [
229
+ 791.248,
230
+ 1.00259,
231
+ 1.0
232
+ ],
233
+ [
234
+ 807.9242,
235
+ 1.0014612,
236
+ 1.0
237
+ ],
238
+ [
239
+ 824.6004,
240
+ 1.0,
241
+ 1.0
242
+ ],
243
+ [
244
+ 841.2765,
245
+ 1,
246
+ 1
247
+ ]
248
+ ],
249
+ "dismiss": [
250
+ [
251
+ 0,
252
+ 1,
253
+ 1
254
+ ],
255
+ [
256
+ 13.4173,
257
+ 1.0,
258
+ 1.0
259
+ ],
260
+ [
261
+ 30.0935,
262
+ 0.9902184,
263
+ 1.0138658
264
+ ],
265
+ [
266
+ 46.7696,
267
+ 0.9753552,
268
+ 1.0439458
269
+ ],
270
+ [
271
+ 63.4458,
272
+ 0.9511823,
273
+ 1.0818851
274
+ ],
275
+ [
276
+ 80.122,
277
+ 0.9298425,
278
+ 1.1210582
279
+ ],
280
+ [
281
+ 96.7981,
282
+ 0.8887576,
283
+ 1.1567626
284
+ ],
285
+ [
286
+ 113.4743,
287
+ 0.8346821,
288
+ 1.1861394
289
+ ],
290
+ [
291
+ 130.1505,
292
+ 0.7780072,
293
+ 1.2064163
294
+ ],
295
+ [
296
+ 146.8266,
297
+ 0.7319768,
298
+ 1.2093241
299
+ ],
300
+ [
301
+ 163.5028,
302
+ 0.6684435,
303
+ 1.197464
304
+ ],
305
+ [
306
+ 180.179,
307
+ 0.5867632,
308
+ 1.1753846
309
+ ],
310
+ [
311
+ 196.8551,
312
+ 0.4932982,
313
+ 1.1473579
314
+ ],
315
+ [
316
+ 213.5313,
317
+ 0.3971412,
318
+ 1.1170045
319
+ ],
320
+ [
321
+ 230.2075,
322
+ 0.3061625,
323
+ 1.087125
324
+ ],
325
+ [
326
+ 246.8836,
327
+ 0.2137481,
328
+ 1.0596843
329
+ ],
330
+ [
331
+ 263.5598,
332
+ 0.1377417,
333
+ 1.0358958
334
+ ],
335
+ [
336
+ 280.236,
337
+ 0.0685651,
338
+ 1.0163525
339
+ ],
340
+ [
341
+ 296.9121,
342
+ 0.0082783,
343
+ 1.0011722
344
+ ],
345
+ [
346
+ 313.5883,
347
+ -0.0297469,
348
+ 0.9901336
349
+ ],
350
+ [
351
+ 330.2645,
352
+ -0.0332873,
353
+ 0.9827955
354
+ ],
355
+ [
356
+ 346.9406,
357
+ -0.0527703,
358
+ 0.9785925
359
+ ],
360
+ [
361
+ 363.6168,
362
+ -0.0642726,
363
+ 0.9769109
364
+ ],
365
+ [
366
+ 380.293,
367
+ -0.0690909,
368
+ 0.977144
369
+ ],
370
+ [
371
+ 396.9691,
372
+ -0.0686091,
373
+ 0.9787317
374
+ ],
375
+ [
376
+ 413.6453,
377
+ -0.0641841,
378
+ 0.9811846
379
+ ],
380
+ [
381
+ 430.3215,
382
+ -0.0570659,
383
+ 0.9840978
384
+ ],
385
+ [
386
+ 446.9976,
387
+ -0.0477432,
388
+ 0.9874203
389
+ ],
390
+ [
391
+ 463.6738,
392
+ -0.0393105,
393
+ 0.9899524
394
+ ],
395
+ [
396
+ 480.35,
397
+ -0.0305346,
398
+ 0.9923857
399
+ ],
400
+ [
401
+ 497.0261,
402
+ -0.02205,
403
+ 0.9946097
404
+ ],
405
+ [
406
+ 513.7023,
407
+ -0.0142398,
408
+ 0.9965544
409
+ ],
410
+ [
411
+ 530.3785,
412
+ -0.0073957,
413
+ 0.9981838
414
+ ],
415
+ [
416
+ 547.0546,
417
+ -0.0016879,
418
+ 0.9994891
419
+ ],
420
+ [
421
+ 563.7308,
422
+ 0.0028168,
423
+ 1.0004818
424
+ ],
425
+ [
426
+ 580.407,
427
+ 0.0075891,
428
+ 1.0014886
429
+ ],
430
+ [
431
+ 597.0831,
432
+ 0.0075891,
433
+ 1.0014886
434
+ ],
435
+ [
436
+ 613.7593,
437
+ 0.0099158,
438
+ 1.0
439
+ ],
440
+ [
441
+ 630.4355,
442
+ 0.0099052,
443
+ 1.0
444
+ ],
445
+ [
446
+ 647.1116,
447
+ 0.0093324,
448
+ 1.0
449
+ ],
450
+ [
451
+ 663.7878,
452
+ 0.008358,
453
+ 1.0
454
+ ],
455
+ [
456
+ 680.464,
457
+ 0.0091977,
458
+ 1.001812
459
+ ],
460
+ [
461
+ 697.1401,
462
+ 0.0057733,
463
+ 1.0
464
+ ],
465
+ [
466
+ 713.8163,
467
+ 0.0043971,
468
+ 1.0
469
+ ],
470
+ [
471
+ 730.4925,
472
+ 0.0030836,
473
+ 1.0
474
+ ],
475
+ [
476
+ 747.1686,
477
+ 0.0018932,
478
+ 1.0
479
+ ],
480
+ [
481
+ 763.8448,
482
+ 0.0014612,
483
+ 1.0
484
+ ],
485
+ [
486
+ 780.521,
487
+ 0,
488
+ 1
489
+ ]
490
+ ]
491
+ }
@@ -1,8 +1,11 @@
1
+ import type { DeviceIdiom } from '../layout/deviceIdiom.js';
1
2
  import type { SearchFieldPlacement } from './searchable.js';
2
3
  /** Stock iOS 27.0 reference List + searchable defaults: a tab owns the bottom dock, so
3
4
  * iPhone automatic search uses the drawer there; iPad uses the trailing navigation
4
5
  * toolbar. Explicit drawer/default-toolbar-item requests keep their existing paths. */
5
6
  export declare function resolveSearchPlacement(placement: SearchFieldPlacement | undefined, screen: Readonly<{
7
+ idiom?: DeviceIdiom;
8
+ pane?: 'stack' | 'sidebar' | 'detail';
6
9
  compact: boolean;
7
10
  bottomBarItems: boolean;
8
11
  searchToolbarItem: boolean;
@@ -4,6 +4,13 @@
4
4
  export function resolveSearchPlacement(placement, screen) {
5
5
  if (placement === 'navigationBarDrawer')
6
6
  return 'navigationBarDrawer';
7
+ // iPad remains iPad in a narrow window. Sidebar search belongs below its own
8
+ // toolbar; an explicit toolbar request always stays in the trailing slot.
9
+ if (screen.idiom === 'pad') {
10
+ if (placement === 'toolbar')
11
+ return 'navigationBarToolbar';
12
+ return screen.pane === 'sidebar' ? 'navigationBarDrawer' : 'navigationBarToolbar';
13
+ }
7
14
  if (placement === 'toolbar' || screen.searchToolbarItem) {
8
15
  return screen.compact && !screen.scoped ? 'toolbar' : 'navigationBarDrawer';
9
16
  }
@@ -1,6 +1,5 @@
1
1
  import type { ReactNode } from 'react';
2
- /** `searchScopes(_:activation: .onSearchPresentation)`: a controlled scope bar shown
3
- * under the field while search is presented. */
2
+ /** A controlled scope bar, shown under the search field while search is presented. */
4
3
  export type SearchScopes = Readonly<{
5
4
  selection: string;
6
5
  onSelectionChange(selection: string): void;
@@ -9,23 +8,26 @@ export type SearchScopes = Readonly<{
9
8
  label: string;
10
9
  }>[];
11
10
  }>;
12
- /** `searchSuggestions` with `searchCompletion`: choosing one replaces the text. It does
13
- * not submit. */
11
+ /** A suggestion shown under the search field. Choosing one replaces the search text; it does not
12
+ * submit. */
14
13
  export type SearchSuggestion = Readonly<{
15
14
  id: string;
16
15
  text: string;
17
16
  label?: ReactNode;
18
17
  }>;
19
- /** `SearchFieldPlacement`. `'automatic'` uses platform placement on iPhone: the bottom toolbar
20
- * outside a TabView when the screen has no other bottom bar items or scopes, else a drawer that
21
- * scrolls away with content. Regular-width automatic search uses the trailing navigation toolbar. */
18
+ /** Where the search field goes. On iPhone, `'automatic'` uses the bottom toolbar outside a
19
+ * `TabView` when the screen has no other bottom bar items or scopes; otherwise it uses a drawer
20
+ * that scrolls away with the content. On iPad, automatic search belongs to the trailing
21
+ * navigation toolbar, or below the sidebar toolbar in a split view. Explicit toolbar
22
+ * placement stays trailing on iPad, including narrow windows. */
22
23
  export type SearchFieldPlacement = 'automatic' | 'navigationBarDrawer' | 'toolbar';
23
24
  /**
24
- * `searchable(text:isPresented:placement:prompt:)`. The bar owns the field: its capsule,
25
- * magnifier, clear button, close button, scope bar and collapse on scroll. In the bottom toolbar,
26
- * the presented field rides above the keyboard with a close button, and the bar and title give
27
- * way. Place `<DefaultToolbarItem kind="search" placement="bottomBar" />` to put it beside other
28
- * bottom bar items (Messages).
25
+ * A search field for a screen or list: its controlled text, prompt, placement, scopes and
26
+ * suggestions. The bar owns the field: its capsule, magnifier, clear button, close button, scope
27
+ * bar and collapse on scroll. In the bottom toolbar, the presented field rides above the
28
+ * keyboard with a close button, and the bar and title give way. Place
29
+ * `<DefaultToolbarItem kind="search" placement="bottomBar" />` to put it beside other bottom bar
30
+ * items.
29
31
  */
30
32
  export type Searchable = Readonly<{
31
33
  text: string;
@@ -0,0 +1,4 @@
1
+ import { type RefObject } from 'react';
2
+ import type { GlassRegionRegistry } from '../glass/regionRegistry.js';
3
+ /** One field-owned layout track also moves the adjacent toolbar items. */
4
+ export declare function usePadSearchFieldMotion(row: RefObject<HTMLDivElement | null>, enabled: boolean, presented: boolean, searchTab: boolean, regions?: GlassRegionRegistry): void;
@@ -0,0 +1,100 @@
1
+ import { useLayoutEffect, useRef } from 'react';
2
+ import { animateElement, animateLayout } from '../motion/animate.js';
3
+ import { menuSpring, menuSpringSettle } from '../glass/lens/menuSpring.js';
4
+ import samples from './padSearchFieldSamples.json';
5
+ function observed(rows, ms, column = 1) {
6
+ if (ms <= rows[0][0])
7
+ return rows[0][column];
8
+ for (let i = 1; i < rows.length; i++) {
9
+ const left = rows[i - 1], right = rows[i];
10
+ if (ms <= right[0])
11
+ return (left[column] +
12
+ ((right[column] - left[column]) * (ms - left[0])) / (right[0] - left[0]));
13
+ }
14
+ return rows.at(-1)[column];
15
+ }
16
+ /** One field-owned layout track also moves the adjacent toolbar items. */
17
+ export function usePadSearchFieldMotion(row, enabled, presented, searchTab, regions) {
18
+ const previous = useRef(presented);
19
+ const heightAnimation = useRef(null);
20
+ const running = useRef(null);
21
+ useLayoutEffect(() => {
22
+ if (!enabled || previous.current === presented)
23
+ return;
24
+ const oldPresented = previous.current;
25
+ previous.current = presented;
26
+ const item = row.current?.closest('[data-satin-search-pad-item]');
27
+ if (!item)
28
+ return;
29
+ const now = performance.now();
30
+ const old = running.current;
31
+ const elapsed = old ? now - old.start : 0;
32
+ const interrupted = old !== null && elapsed < old.duration;
33
+ const from = interrupted ? old.sample(elapsed) : oldPresented ? 280 : 240;
34
+ const velocity = interrupted
35
+ ? (old.sample(elapsed + 0.5) - old.sample(elapsed - 0.5)) * 1000
36
+ : 0;
37
+ old?.animation.cancel();
38
+ heightAnimation.current?.cancel();
39
+ const target = presented ? 280 : 240;
40
+ if (matchMedia('(prefers-reduced-motion: reduce)').matches) {
41
+ running.current = null;
42
+ return;
43
+ }
44
+ let duration;
45
+ let sample;
46
+ if (searchTab && !interrupted) {
47
+ const rows = presented ? samples.activate : samples.dismiss;
48
+ duration = rows.at(-1)[0];
49
+ sample = ms => 240 + 40 * observed(rows, ms);
50
+ }
51
+ else {
52
+ // reference ordinary field: independent activate/dismiss fits, RMS .303/.277 pt.
53
+ // An interrupted tab track carries its measured velocity into its fitted spring.
54
+ const omega = searchTab
55
+ ? presented
56
+ ? 17.805645
57
+ : 11.419662
58
+ : presented
59
+ ? 16.212655
60
+ : 16.137595;
61
+ const zeta = searchTab ? (presented ? 0.374592 : 0.64327) : presented ? 0.799286 : 0.797249;
62
+ const spring = {
63
+ omega,
64
+ zeta,
65
+ delay: 0,
66
+ velocity: Math.abs(from - target) > 0.001 ? velocity / (from - target) : 0,
67
+ };
68
+ duration = menuSpringSettle(spring);
69
+ sample = ms => target + (from - target) * menuSpring(spring, ms).value;
70
+ }
71
+ const count = Math.max(1, Math.ceil(duration / (1000 / 60)));
72
+ const frames = Array.from({ length: count + 1 }, (_, index) => {
73
+ const width = index === count ? target : sample((duration * index) / count);
74
+ return { width: `${width}px`, flexBasis: `${width}px`, offset: index / count };
75
+ });
76
+ const animation = animateLayout(item, frames, { duration, easing: 'linear' });
77
+ if (searchTab && !interrupted && row.current) {
78
+ const rows = presented ? samples.activate : samples.dismiss;
79
+ heightAnimation.current = animateElement(row.current, Array.from({ length: count + 1 }, (_, index) => ({
80
+ transform: `scaleY(${index === count ? 1 : observed(rows, (duration * index) / count, 2)})`,
81
+ offset: index / count,
82
+ })), { duration, easing: 'linear' });
83
+ }
84
+ running.current = { start: now, duration, sample, animation };
85
+ let frame = 0;
86
+ const update = () => {
87
+ regions?.invalidate();
88
+ if (animation.playState === 'running')
89
+ frame = requestAnimationFrame(update);
90
+ };
91
+ update();
92
+ return () => {
93
+ cancelAnimationFrame(frame);
94
+ };
95
+ }, [enabled, presented, searchTab, regions, row]);
96
+ useLayoutEffect(() => () => {
97
+ running.current?.animation.cancel();
98
+ heightAnimation.current?.cancel();
99
+ }, []);
100
+ }
@@ -1,6 +1,6 @@
1
1
  import { type RefObject } from 'react';
2
2
  import { type Searchable, type SearchSuggestion } from './searchable.js';
3
- export declare function useSearchPresentation(configuration: Searchable, input: RefObject<HTMLInputElement | null>): {
3
+ export declare function useSearchPresentation(configuration: Searchable, input: RefObject<HTMLInputElement | null>, pad?: boolean): {
4
4
  presented: boolean;
5
5
  present: () => void;
6
6
  dismiss: () => void;
@@ -12,4 +12,5 @@ export declare function useSearchPresentation(configuration: Searchable, input:
12
12
  text: string;
13
13
  label?: import("react").ReactNode;
14
14
  }>[];
15
+ resign: () => void;
15
16
  };