@g9tm/lynxcontrols 0.0.0-stage → 1.4.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 (545) hide show
  1. package/README.md +22 -2
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/base/base.css +16 -0
  4. package/dist/base/base.css.map +1 -0
  5. package/dist/base/control.d.ts +44 -0
  6. package/dist/base/control.d.ts.map +1 -0
  7. package/dist/base/control.jsx +24 -0
  8. package/dist/base/control.jsx.map +1 -0
  9. package/dist/base/corner-badge.d.ts +35 -0
  10. package/dist/base/corner-badge.d.ts.map +1 -0
  11. package/dist/base/corner-badge.jsx +45 -0
  12. package/dist/base/corner-badge.jsx.map +1 -0
  13. package/dist/base/disposer.d.ts +28 -0
  14. package/dist/base/disposer.d.ts.map +1 -0
  15. package/dist/base/disposer.jsx +61 -0
  16. package/dist/base/disposer.jsx.map +1 -0
  17. package/dist/base/index.d.ts +10 -0
  18. package/dist/base/index.d.ts.map +1 -0
  19. package/dist/base/index.jsx +9 -0
  20. package/dist/base/press.d.ts +38 -0
  21. package/dist/base/press.d.ts.map +1 -0
  22. package/dist/base/press.jsx +73 -0
  23. package/dist/base/press.jsx.map +1 -0
  24. package/dist/base/pressable.d.ts +25 -0
  25. package/dist/base/pressable.d.ts.map +1 -0
  26. package/dist/base/pressable.jsx +38 -0
  27. package/dist/base/pressable.jsx.map +1 -0
  28. package/dist/base/selection-item.d.ts +29 -0
  29. package/dist/base/selection-item.d.ts.map +1 -0
  30. package/dist/base/selection-item.jsx +6 -0
  31. package/dist/base/selection-item.jsx.map +1 -0
  32. package/dist/base/timers.d.ts +7 -0
  33. package/dist/base/timers.d.ts.map +1 -0
  34. package/dist/base/timers.jsx +10 -0
  35. package/dist/base/timers.jsx.map +1 -0
  36. package/dist/base/use-controllable-state.d.ts +30 -0
  37. package/dist/base/use-controllable-state.d.ts.map +1 -0
  38. package/dist/base/use-controllable-state.jsx +49 -0
  39. package/dist/base/use-controllable-state.jsx.map +1 -0
  40. package/dist/base/use-stable-callback.d.ts +8 -0
  41. package/dist/base/use-stable-callback.d.ts.map +1 -0
  42. package/dist/base/use-stable-callback.jsx +12 -0
  43. package/dist/base/use-stable-callback.jsx.map +1 -0
  44. package/dist/button/button.css +162 -0
  45. package/dist/button/button.css.map +1 -0
  46. package/dist/button/button.d.ts +52 -0
  47. package/dist/button/button.d.ts.map +1 -0
  48. package/dist/button/button.jsx +87 -0
  49. package/dist/button/button.jsx.map +1 -0
  50. package/dist/button/header-action-button.d.ts +34 -0
  51. package/dist/button/header-action-button.d.ts.map +1 -0
  52. package/dist/button/header-action-button.jsx +51 -0
  53. package/dist/button/header-action-button.jsx.map +1 -0
  54. package/dist/button/icon-button.d.ts +46 -0
  55. package/dist/button/icon-button.d.ts.map +1 -0
  56. package/dist/button/icon-button.jsx +69 -0
  57. package/dist/button/icon-button.jsx.map +1 -0
  58. package/dist/button/index.d.ts +9 -0
  59. package/dist/button/index.d.ts.map +1 -0
  60. package/dist/button/index.jsx +8 -0
  61. package/dist/button/nav-card.d.ts +58 -0
  62. package/dist/button/nav-card.d.ts.map +1 -0
  63. package/dist/button/nav-card.jsx +95 -0
  64. package/dist/button/nav-card.jsx.map +1 -0
  65. package/dist/button/safe-tap.d.ts +27 -0
  66. package/dist/button/safe-tap.d.ts.map +1 -0
  67. package/dist/button/safe-tap.jsx +46 -0
  68. package/dist/button/safe-tap.jsx.map +1 -0
  69. package/dist/button/safe.d.ts +84 -0
  70. package/dist/button/safe.d.ts.map +1 -0
  71. package/dist/button/safe.jsx +116 -0
  72. package/dist/button/safe.jsx.map +1 -0
  73. package/dist/button/vertical-icon-text-button.d.ts +18 -0
  74. package/dist/button/vertical-icon-text-button.d.ts.map +1 -0
  75. package/dist/button/vertical-icon-text-button.jsx +21 -0
  76. package/dist/button/vertical-icon-text-button.jsx.map +1 -0
  77. package/dist/button/visuals.d.ts +53 -0
  78. package/dist/button/visuals.d.ts.map +1 -0
  79. package/dist/button/visuals.jsx +92 -0
  80. package/dist/button/visuals.jsx.map +1 -0
  81. package/dist/cascade/cascade-panel.d.ts +80 -0
  82. package/dist/cascade/cascade-panel.d.ts.map +1 -0
  83. package/dist/cascade/cascade-panel.jsx +179 -0
  84. package/dist/cascade/cascade-panel.jsx.map +1 -0
  85. package/dist/cascade/cascade.css +70 -0
  86. package/dist/cascade/cascade.css.map +1 -0
  87. package/dist/cascade/index.d.ts +3 -0
  88. package/dist/cascade/index.d.ts.map +1 -0
  89. package/dist/cascade/index.jsx +2 -0
  90. package/dist/cascade/model.d.ts +68 -0
  91. package/dist/cascade/model.d.ts.map +1 -0
  92. package/dist/cascade/model.jsx +161 -0
  93. package/dist/cascade/model.jsx.map +1 -0
  94. package/dist/deferred/deferred-content.d.ts +82 -0
  95. package/dist/deferred/deferred-content.d.ts.map +1 -0
  96. package/dist/deferred/deferred-content.jsx +263 -0
  97. package/dist/deferred/deferred-content.jsx.map +1 -0
  98. package/dist/deferred/deferred.css +62 -0
  99. package/dist/deferred/deferred.css.map +1 -0
  100. package/dist/deferred/index.d.ts +3 -0
  101. package/dist/deferred/index.d.ts.map +1 -0
  102. package/dist/deferred/index.jsx +2 -0
  103. package/dist/deferred/readiness-signal.d.ts +16 -0
  104. package/dist/deferred/readiness-signal.d.ts.map +1 -0
  105. package/dist/deferred/readiness-signal.jsx +29 -0
  106. package/dist/deferred/readiness-signal.jsx.map +1 -0
  107. package/dist/display/activity-indicator.d.ts +21 -0
  108. package/dist/display/activity-indicator.d.ts.map +1 -0
  109. package/dist/display/activity-indicator.jsx +22 -0
  110. package/dist/display/activity-indicator.jsx.map +1 -0
  111. package/dist/display/culture-date-time-label.d.ts +64 -0
  112. package/dist/display/culture-date-time-label.d.ts.map +1 -0
  113. package/dist/display/culture-date-time-label.jsx +71 -0
  114. package/dist/display/culture-date-time-label.jsx.map +1 -0
  115. package/dist/display/display.css +217 -0
  116. package/dist/display/display.css.map +1 -0
  117. package/dist/display/index.d.ts +7 -0
  118. package/dist/display/index.d.ts.map +1 -0
  119. package/dist/display/index.jsx +6 -0
  120. package/dist/display/progress-bar.d.ts +38 -0
  121. package/dist/display/progress-bar.d.ts.map +1 -0
  122. package/dist/display/progress-bar.jsx +57 -0
  123. package/dist/display/progress-bar.jsx.map +1 -0
  124. package/dist/display/separator.d.ts +30 -0
  125. package/dist/display/separator.d.ts.map +1 -0
  126. package/dist/display/separator.jsx +55 -0
  127. package/dist/display/separator.jsx.map +1 -0
  128. package/dist/display/shimmer.d.ts +41 -0
  129. package/dist/display/shimmer.d.ts.map +1 -0
  130. package/dist/display/shimmer.jsx +41 -0
  131. package/dist/display/shimmer.jsx.map +1 -0
  132. package/dist/display/title-with-line.d.ts +13 -0
  133. package/dist/display/title-with-line.d.ts.map +1 -0
  134. package/dist/display/title-with-line.jsx +21 -0
  135. package/dist/display/title-with-line.jsx.map +1 -0
  136. package/dist/edge-panel/edge-panel.css +132 -0
  137. package/dist/edge-panel/edge-panel.css.map +1 -0
  138. package/dist/edge-panel/edge-panel.d.ts +87 -0
  139. package/dist/edge-panel/edge-panel.d.ts.map +1 -0
  140. package/dist/edge-panel/edge-panel.jsx +326 -0
  141. package/dist/edge-panel/edge-panel.jsx.map +1 -0
  142. package/dist/edge-panel/helper.d.ts +27 -0
  143. package/dist/edge-panel/helper.d.ts.map +1 -0
  144. package/dist/edge-panel/helper.jsx +118 -0
  145. package/dist/edge-panel/helper.jsx.map +1 -0
  146. package/dist/edge-panel/index.d.ts +4 -0
  147. package/dist/edge-panel/index.d.ts.map +1 -0
  148. package/dist/edge-panel/index.jsx +3 -0
  149. package/dist/edge-panel/types.d.ts +155 -0
  150. package/dist/edge-panel/types.d.ts.map +1 -0
  151. package/dist/edge-panel/types.jsx +139 -0
  152. package/dist/edge-panel/types.jsx.map +1 -0
  153. package/dist/expander/expander.css +54 -0
  154. package/dist/expander/expander.css.map +1 -0
  155. package/dist/expander/expander.d.ts +46 -0
  156. package/dist/expander/expander.d.ts.map +1 -0
  157. package/dist/expander/expander.jsx +110 -0
  158. package/dist/expander/expander.jsx.map +1 -0
  159. package/dist/expander/index.d.ts +2 -0
  160. package/dist/expander/index.d.ts.map +1 -0
  161. package/dist/expander/index.jsx +1 -0
  162. package/dist/fields/dictation.d.ts +43 -0
  163. package/dist/fields/dictation.d.ts.map +1 -0
  164. package/dist/fields/dictation.jsx +124 -0
  165. package/dist/fields/dictation.jsx.map +1 -0
  166. package/dist/fields/editor.d.ts +26 -0
  167. package/dist/fields/editor.d.ts.map +1 -0
  168. package/dist/fields/editor.jsx +46 -0
  169. package/dist/fields/editor.jsx.map +1 -0
  170. package/dist/fields/fields.css +156 -0
  171. package/dist/fields/fields.css.map +1 -0
  172. package/dist/fields/index.d.ts +12 -0
  173. package/dist/fields/index.d.ts.map +1 -0
  174. package/dist/fields/index.jsx +11 -0
  175. package/dist/fields/input-policy.d.ts +48 -0
  176. package/dist/fields/input-policy.d.ts.map +1 -0
  177. package/dist/fields/input-policy.jsx +215 -0
  178. package/dist/fields/input-policy.jsx.map +1 -0
  179. package/dist/fields/outlined-field.d.ts +146 -0
  180. package/dist/fields/outlined-field.d.ts.map +1 -0
  181. package/dist/fields/outlined-field.jsx +196 -0
  182. package/dist/fields/outlined-field.jsx.map +1 -0
  183. package/dist/fields/pin-entry.d.ts +63 -0
  184. package/dist/fields/pin-entry.d.ts.map +1 -0
  185. package/dist/fields/pin-entry.jsx +293 -0
  186. package/dist/fields/pin-entry.jsx.map +1 -0
  187. package/dist/fields/search-entry.d.ts +35 -0
  188. package/dist/fields/search-entry.d.ts.map +1 -0
  189. package/dist/fields/search-entry.jsx +118 -0
  190. package/dist/fields/search-entry.jsx.map +1 -0
  191. package/dist/fields/slot-layout.d.ts +33 -0
  192. package/dist/fields/slot-layout.d.ts.map +1 -0
  193. package/dist/fields/slot-layout.jsx +33 -0
  194. package/dist/fields/slot-layout.jsx.map +1 -0
  195. package/dist/fields/text-entry.d.ts +62 -0
  196. package/dist/fields/text-entry.d.ts.map +1 -0
  197. package/dist/fields/text-entry.jsx +72 -0
  198. package/dist/fields/text-entry.jsx.map +1 -0
  199. package/dist/fields/use-dictation.d.ts +34 -0
  200. package/dist/fields/use-dictation.d.ts.map +1 -0
  201. package/dist/fields/use-dictation.jsx +80 -0
  202. package/dist/fields/use-dictation.jsx.map +1 -0
  203. package/dist/fields/use-text-input.d.ts +150 -0
  204. package/dist/fields/use-text-input.d.ts.map +1 -0
  205. package/dist/fields/use-text-input.jsx +237 -0
  206. package/dist/fields/use-text-input.jsx.map +1 -0
  207. package/dist/fields/validator.d.ts +14 -0
  208. package/dist/fields/validator.d.ts.map +1 -0
  209. package/dist/fields/validator.jsx +20 -0
  210. package/dist/fields/validator.jsx.map +1 -0
  211. package/dist/host/back.d.ts +42 -0
  212. package/dist/host/back.d.ts.map +1 -0
  213. package/dist/host/back.jsx +47 -0
  214. package/dist/host/back.jsx.map +1 -0
  215. package/dist/host/hooks.d.ts +85 -0
  216. package/dist/host/hooks.d.ts.map +1 -0
  217. package/dist/host/hooks.jsx +163 -0
  218. package/dist/host/hooks.jsx.map +1 -0
  219. package/dist/host/host.css +81 -0
  220. package/dist/host/host.css.map +1 -0
  221. package/dist/host/host.d.ts +70 -0
  222. package/dist/host/host.d.ts.map +1 -0
  223. package/dist/host/host.jsx +229 -0
  224. package/dist/host/host.jsx.map +1 -0
  225. package/dist/host/index.d.ts +9 -0
  226. package/dist/host/index.d.ts.map +1 -0
  227. package/dist/host/index.jsx +8 -0
  228. package/dist/host/keyboard.d.ts +24 -0
  229. package/dist/host/keyboard.d.ts.map +1 -0
  230. package/dist/host/keyboard.jsx +28 -0
  231. package/dist/host/keyboard.jsx.map +1 -0
  232. package/dist/host/layers.d.ts +69 -0
  233. package/dist/host/layers.d.ts.map +1 -0
  234. package/dist/host/layers.jsx +111 -0
  235. package/dist/host/layers.jsx.map +1 -0
  236. package/dist/host/page-loading-overlay.d.ts +17 -0
  237. package/dist/host/page-loading-overlay.d.ts.map +1 -0
  238. package/dist/host/page-loading-overlay.jsx +16 -0
  239. package/dist/host/page-loading-overlay.jsx.map +1 -0
  240. package/dist/host/readiness.d.ts +57 -0
  241. package/dist/host/readiness.d.ts.map +1 -0
  242. package/dist/host/readiness.jsx +138 -0
  243. package/dist/host/readiness.jsx.map +1 -0
  244. package/dist/host/registry.d.ts +106 -0
  245. package/dist/host/registry.d.ts.map +1 -0
  246. package/dist/host/registry.jsx +93 -0
  247. package/dist/host/registry.jsx.map +1 -0
  248. package/dist/icon/icon.css +39 -0
  249. package/dist/icon/icon.css.map +1 -0
  250. package/dist/icon/icon.d.ts +57 -0
  251. package/dist/icon/icon.d.ts.map +1 -0
  252. package/dist/icon/icon.jsx +115 -0
  253. package/dist/icon/icon.jsx.map +1 -0
  254. package/dist/icon/index.d.ts +4 -0
  255. package/dist/icon/index.d.ts.map +1 -0
  256. package/dist/icon/index.jsx +3 -0
  257. package/dist/icon/slot.d.ts +45 -0
  258. package/dist/icon/slot.d.ts.map +1 -0
  259. package/dist/icon/slot.jsx +61 -0
  260. package/dist/icon/slot.jsx.map +1 -0
  261. package/dist/icon/swatch.d.ts +29 -0
  262. package/dist/icon/swatch.d.ts.map +1 -0
  263. package/dist/icon/swatch.jsx +25 -0
  264. package/dist/icon/swatch.jsx.map +1 -0
  265. package/dist/index.d.ts +23 -0
  266. package/dist/index.d.ts.map +1 -0
  267. package/dist/index.jsx +1 -0
  268. package/dist/pickers/combo-box.d.ts +42 -0
  269. package/dist/pickers/combo-box.d.ts.map +1 -0
  270. package/dist/pickers/combo-box.jsx +129 -0
  271. package/dist/pickers/combo-box.jsx.map +1 -0
  272. package/dist/pickers/date-time-picker.d.ts +63 -0
  273. package/dist/pickers/date-time-picker.d.ts.map +1 -0
  274. package/dist/pickers/date-time-picker.jsx +141 -0
  275. package/dist/pickers/date-time-picker.jsx.map +1 -0
  276. package/dist/pickers/date-time.d.ts +82 -0
  277. package/dist/pickers/date-time.d.ts.map +1 -0
  278. package/dist/pickers/date-time.jsx +130 -0
  279. package/dist/pickers/date-time.jsx.map +1 -0
  280. package/dist/pickers/index.d.ts +10 -0
  281. package/dist/pickers/index.d.ts.map +1 -0
  282. package/dist/pickers/index.jsx +9 -0
  283. package/dist/pickers/picker-sheet.d.ts +21 -0
  284. package/dist/pickers/picker-sheet.d.ts.map +1 -0
  285. package/dist/pickers/picker-sheet.jsx +61 -0
  286. package/dist/pickers/picker-sheet.jsx.map +1 -0
  287. package/dist/pickers/picker.d.ts +32 -0
  288. package/dist/pickers/picker.d.ts.map +1 -0
  289. package/dist/pickers/picker.jsx +72 -0
  290. package/dist/pickers/picker.jsx.map +1 -0
  291. package/dist/pickers/pickers.css +219 -0
  292. package/dist/pickers/pickers.css.map +1 -0
  293. package/dist/pickers/timespan-picker.d.ts +36 -0
  294. package/dist/pickers/timespan-picker.d.ts.map +1 -0
  295. package/dist/pickers/timespan-picker.jsx +99 -0
  296. package/dist/pickers/timespan-picker.jsx.map +1 -0
  297. package/dist/pickers/timespan.d.ts +38 -0
  298. package/dist/pickers/timespan.d.ts.map +1 -0
  299. package/dist/pickers/timespan.jsx +49 -0
  300. package/dist/pickers/timespan.jsx.map +1 -0
  301. package/dist/pickers/trigger.d.ts +34 -0
  302. package/dist/pickers/trigger.d.ts.map +1 -0
  303. package/dist/pickers/trigger.jsx +77 -0
  304. package/dist/pickers/trigger.jsx.map +1 -0
  305. package/dist/pickers/wheel-column.d.ts +32 -0
  306. package/dist/pickers/wheel-column.d.ts.map +1 -0
  307. package/dist/pickers/wheel-column.jsx +99 -0
  308. package/dist/pickers/wheel-column.jsx.map +1 -0
  309. package/dist/plus-button/index.d.ts +3 -0
  310. package/dist/plus-button/index.d.ts.map +1 -0
  311. package/dist/plus-button/index.jsx +2 -0
  312. package/dist/plus-button/model.d.ts +65 -0
  313. package/dist/plus-button/model.d.ts.map +1 -0
  314. package/dist/plus-button/model.jsx +86 -0
  315. package/dist/plus-button/model.jsx.map +1 -0
  316. package/dist/plus-button/plus-button.css +67 -0
  317. package/dist/plus-button/plus-button.css.map +1 -0
  318. package/dist/plus-button/plus-button.d.ts +38 -0
  319. package/dist/plus-button/plus-button.d.ts.map +1 -0
  320. package/dist/plus-button/plus-button.jsx +155 -0
  321. package/dist/plus-button/plus-button.jsx.map +1 -0
  322. package/dist/popup/frame.d.ts +101 -0
  323. package/dist/popup/frame.d.ts.map +1 -0
  324. package/dist/popup/frame.jsx +244 -0
  325. package/dist/popup/frame.jsx.map +1 -0
  326. package/dist/popup/index.d.ts +8 -0
  327. package/dist/popup/index.d.ts.map +1 -0
  328. package/dist/popup/index.jsx +7 -0
  329. package/dist/popup/input-form.d.ts +35 -0
  330. package/dist/popup/input-form.d.ts.map +1 -0
  331. package/dist/popup/input-form.jsx +160 -0
  332. package/dist/popup/input-form.jsx.map +1 -0
  333. package/dist/popup/input.d.ts +175 -0
  334. package/dist/popup/input.d.ts.map +1 -0
  335. package/dist/popup/input.jsx +176 -0
  336. package/dist/popup/input.jsx.map +1 -0
  337. package/dist/popup/popup-view.d.ts +25 -0
  338. package/dist/popup/popup-view.d.ts.map +1 -0
  339. package/dist/popup/popup-view.jsx +67 -0
  340. package/dist/popup/popup-view.jsx.map +1 -0
  341. package/dist/popup/popup.css +203 -0
  342. package/dist/popup/popup.css.map +1 -0
  343. package/dist/popup/queue.d.ts +90 -0
  344. package/dist/popup/queue.d.ts.map +1 -0
  345. package/dist/popup/queue.jsx +309 -0
  346. package/dist/popup/queue.jsx.map +1 -0
  347. package/dist/popup/service.d.ts +60 -0
  348. package/dist/popup/service.d.ts.map +1 -0
  349. package/dist/popup/service.jsx +342 -0
  350. package/dist/popup/service.jsx.map +1 -0
  351. package/dist/popup/types.d.ts +211 -0
  352. package/dist/popup/types.d.ts.map +1 -0
  353. package/dist/popup/types.jsx +218 -0
  354. package/dist/popup/types.jsx.map +1 -0
  355. package/dist/provider/contexts.d.ts +41 -0
  356. package/dist/provider/contexts.d.ts.map +1 -0
  357. package/dist/provider/contexts.jsx +11 -0
  358. package/dist/provider/contexts.jsx.map +1 -0
  359. package/dist/provider/global-events.d.ts +8 -0
  360. package/dist/provider/global-events.d.ts.map +1 -0
  361. package/dist/provider/global-events.jsx +17 -0
  362. package/dist/provider/global-events.jsx.map +1 -0
  363. package/dist/provider/hooks.d.ts +49 -0
  364. package/dist/provider/hooks.d.ts.map +1 -0
  365. package/dist/provider/hooks.jsx +72 -0
  366. package/dist/provider/hooks.jsx.map +1 -0
  367. package/dist/provider/index.d.ts +5 -0
  368. package/dist/provider/index.d.ts.map +1 -0
  369. package/dist/provider/index.jsx +3 -0
  370. package/dist/provider/provider.css +18 -0
  371. package/dist/provider/provider.css.map +1 -0
  372. package/dist/provider/provider.d.ts +51 -0
  373. package/dist/provider/provider.d.ts.map +1 -0
  374. package/dist/provider/provider.jsx +290 -0
  375. package/dist/provider/provider.jsx.map +1 -0
  376. package/dist/provider/settings.d.ts +99 -0
  377. package/dist/provider/settings.d.ts.map +1 -0
  378. package/dist/provider/settings.jsx +45 -0
  379. package/dist/provider/settings.jsx.map +1 -0
  380. package/dist/provider/theme-css.d.ts +12 -0
  381. package/dist/provider/theme-css.d.ts.map +1 -0
  382. package/dist/provider/theme-css.jsx +19 -0
  383. package/dist/provider/theme-css.jsx.map +1 -0
  384. package/dist/provider/theme-root.d.ts +10 -0
  385. package/dist/provider/theme-root.d.ts.map +1 -0
  386. package/dist/provider/theme-root.jsx +24 -0
  387. package/dist/provider/theme-root.jsx.map +1 -0
  388. package/dist/provider/theme.css +473 -0
  389. package/dist/provider/theme.css.map +1 -0
  390. package/dist/range-slider/index.d.ts +3 -0
  391. package/dist/range-slider/index.d.ts.map +1 -0
  392. package/dist/range-slider/index.jsx +2 -0
  393. package/dist/range-slider/math.d.ts +23 -0
  394. package/dist/range-slider/math.d.ts.map +1 -0
  395. package/dist/range-slider/math.jsx +71 -0
  396. package/dist/range-slider/math.jsx.map +1 -0
  397. package/dist/range-slider/range-slider.css +90 -0
  398. package/dist/range-slider/range-slider.css.map +1 -0
  399. package/dist/range-slider/range-slider.d.ts +52 -0
  400. package/dist/range-slider/range-slider.d.ts.map +1 -0
  401. package/dist/range-slider/range-slider.jsx +159 -0
  402. package/dist/range-slider/range-slider.jsx.map +1 -0
  403. package/dist/selection/index.d.ts +5 -0
  404. package/dist/selection/index.d.ts.map +1 -0
  405. package/dist/selection/index.jsx +3 -0
  406. package/dist/selection/model.d.ts +53 -0
  407. package/dist/selection/model.d.ts.map +1 -0
  408. package/dist/selection/model.jsx +69 -0
  409. package/dist/selection/model.jsx.map +1 -0
  410. package/dist/selection/selection-sheet.d.ts +80 -0
  411. package/dist/selection/selection-sheet.d.ts.map +1 -0
  412. package/dist/selection/selection-sheet.jsx +362 -0
  413. package/dist/selection/selection-sheet.jsx.map +1 -0
  414. package/dist/selection/selection.css +75 -0
  415. package/dist/selection/selection.css.map +1 -0
  416. package/dist/selection/use-selection-model.d.ts +9 -0
  417. package/dist/selection/use-selection-model.d.ts.map +1 -0
  418. package/dist/selection/use-selection-model.jsx +22 -0
  419. package/dist/selection/use-selection-model.jsx.map +1 -0
  420. package/dist/sheet/frame.d.ts +45 -0
  421. package/dist/sheet/frame.d.ts.map +1 -0
  422. package/dist/sheet/frame.jsx +205 -0
  423. package/dist/sheet/frame.jsx.map +1 -0
  424. package/dist/sheet/header.d.ts +35 -0
  425. package/dist/sheet/header.d.ts.map +1 -0
  426. package/dist/sheet/header.jsx +145 -0
  427. package/dist/sheet/header.jsx.map +1 -0
  428. package/dist/sheet/height-memo.d.ts +47 -0
  429. package/dist/sheet/height-memo.d.ts.map +1 -0
  430. package/dist/sheet/height-memo.jsx +100 -0
  431. package/dist/sheet/height-memo.jsx.map +1 -0
  432. package/dist/sheet/index.d.ts +11 -0
  433. package/dist/sheet/index.d.ts.map +1 -0
  434. package/dist/sheet/index.jsx +10 -0
  435. package/dist/sheet/loadable.d.ts +35 -0
  436. package/dist/sheet/loadable.d.ts.map +1 -0
  437. package/dist/sheet/loadable.jsx +65 -0
  438. package/dist/sheet/loadable.jsx.map +1 -0
  439. package/dist/sheet/options.d.ts +220 -0
  440. package/dist/sheet/options.d.ts.map +1 -0
  441. package/dist/sheet/options.jsx +91 -0
  442. package/dist/sheet/options.jsx.map +1 -0
  443. package/dist/sheet/processing.d.ts +22 -0
  444. package/dist/sheet/processing.d.ts.map +1 -0
  445. package/dist/sheet/processing.jsx +66 -0
  446. package/dist/sheet/processing.jsx.map +1 -0
  447. package/dist/sheet/service.d.ts +55 -0
  448. package/dist/sheet/service.d.ts.map +1 -0
  449. package/dist/sheet/service.jsx +143 -0
  450. package/dist/sheet/service.jsx.map +1 -0
  451. package/dist/sheet/sheet.css +195 -0
  452. package/dist/sheet/sheet.css.map +1 -0
  453. package/dist/sheet/sheet.d.ts +19 -0
  454. package/dist/sheet/sheet.d.ts.map +1 -0
  455. package/dist/sheet/sheet.jsx +40 -0
  456. package/dist/sheet/sheet.jsx.map +1 -0
  457. package/dist/sheet/sizing.d.ts +69 -0
  458. package/dist/sheet/sizing.d.ts.map +1 -0
  459. package/dist/sheet/sizing.jsx +146 -0
  460. package/dist/sheet/sizing.jsx.map +1 -0
  461. package/dist/sheet/stack.d.ts +161 -0
  462. package/dist/sheet/stack.d.ts.map +1 -0
  463. package/dist/sheet/stack.jsx +378 -0
  464. package/dist/sheet/stack.jsx.map +1 -0
  465. package/dist/swipe/index.d.ts +3 -0
  466. package/dist/swipe/index.d.ts.map +1 -0
  467. package/dist/swipe/index.jsx +2 -0
  468. package/dist/swipe/model.d.ts +72 -0
  469. package/dist/swipe/model.d.ts.map +1 -0
  470. package/dist/swipe/model.jsx +66 -0
  471. package/dist/swipe/model.jsx.map +1 -0
  472. package/dist/swipe/swipe-view.d.ts +40 -0
  473. package/dist/swipe/swipe-view.d.ts.map +1 -0
  474. package/dist/swipe/swipe-view.jsx +163 -0
  475. package/dist/swipe/swipe-view.jsx.map +1 -0
  476. package/dist/swipe/swipe.css +34 -0
  477. package/dist/swipe/swipe.css.map +1 -0
  478. package/dist/tab-bar/index.d.ts +4 -0
  479. package/dist/tab-bar/index.d.ts.map +1 -0
  480. package/dist/tab-bar/index.jsx +3 -0
  481. package/dist/tab-bar/metrics.d.ts +230 -0
  482. package/dist/tab-bar/metrics.d.ts.map +1 -0
  483. package/dist/tab-bar/metrics.jsx +221 -0
  484. package/dist/tab-bar/metrics.jsx.map +1 -0
  485. package/dist/tab-bar/model.d.ts +170 -0
  486. package/dist/tab-bar/model.d.ts.map +1 -0
  487. package/dist/tab-bar/model.jsx +349 -0
  488. package/dist/tab-bar/model.jsx.map +1 -0
  489. package/dist/tab-bar/tab-bar.css +173 -0
  490. package/dist/tab-bar/tab-bar.css.map +1 -0
  491. package/dist/tab-bar/tab-bar.d.ts +56 -0
  492. package/dist/tab-bar/tab-bar.d.ts.map +1 -0
  493. package/dist/tab-bar/tab-bar.jsx +343 -0
  494. package/dist/tab-bar/tab-bar.jsx.map +1 -0
  495. package/dist/tabs/index.d.ts +3 -0
  496. package/dist/tabs/index.d.ts.map +1 -0
  497. package/dist/tabs/index.jsx +2 -0
  498. package/dist/tabs/model.d.ts +83 -0
  499. package/dist/tabs/model.d.ts.map +1 -0
  500. package/dist/tabs/model.jsx +113 -0
  501. package/dist/tabs/model.jsx.map +1 -0
  502. package/dist/tabs/tab-view.d.ts +47 -0
  503. package/dist/tabs/tab-view.d.ts.map +1 -0
  504. package/dist/tabs/tab-view.jsx +227 -0
  505. package/dist/tabs/tab-view.jsx.map +1 -0
  506. package/dist/tabs/tabs.css +182 -0
  507. package/dist/tabs/tabs.css.map +1 -0
  508. package/dist/toast/index.d.ts +3 -0
  509. package/dist/toast/index.d.ts.map +1 -0
  510. package/dist/toast/index.jsx +2 -0
  511. package/dist/toast/service.d.ts +48 -0
  512. package/dist/toast/service.d.ts.map +1 -0
  513. package/dist/toast/service.jsx +201 -0
  514. package/dist/toast/service.jsx.map +1 -0
  515. package/dist/toast/store.d.ts +174 -0
  516. package/dist/toast/store.d.ts.map +1 -0
  517. package/dist/toast/store.jsx +353 -0
  518. package/dist/toast/store.jsx.map +1 -0
  519. package/dist/toast/toast.css +152 -0
  520. package/dist/toast/toast.css.map +1 -0
  521. package/dist/toggle/checkbox-math.d.ts +52 -0
  522. package/dist/toggle/checkbox-math.d.ts.map +1 -0
  523. package/dist/toggle/checkbox-math.jsx +111 -0
  524. package/dist/toggle/checkbox-math.jsx.map +1 -0
  525. package/dist/toggle/checkbox.d.ts +56 -0
  526. package/dist/toggle/checkbox.d.ts.map +1 -0
  527. package/dist/toggle/checkbox.jsx +152 -0
  528. package/dist/toggle/checkbox.jsx.map +1 -0
  529. package/dist/toggle/chip-group.d.ts +50 -0
  530. package/dist/toggle/chip-group.d.ts.map +1 -0
  531. package/dist/toggle/chip-group.jsx +107 -0
  532. package/dist/toggle/chip-group.jsx.map +1 -0
  533. package/dist/toggle/index.d.ts +5 -0
  534. package/dist/toggle/index.d.ts.map +1 -0
  535. package/dist/toggle/index.jsx +4 -0
  536. package/dist/toggle/switch.d.ts +52 -0
  537. package/dist/toggle/switch.d.ts.map +1 -0
  538. package/dist/toggle/switch.jsx +192 -0
  539. package/dist/toggle/switch.jsx.map +1 -0
  540. package/dist/toggle/toggle.css +189 -0
  541. package/dist/toggle/toggle.css.map +1 -0
  542. package/package.json +155 -4
  543. package/rspeedy/index.d.ts +21 -0
  544. package/rspeedy/index.mjs +75 -0
  545. package/rspeedy/index.test.mjs +52 -0
@@ -0,0 +1,69 @@
1
+ import type { G9SheetOptions } from './options.js';
2
+ /** MAUI `G9SheetView.MinimizedHeight`: default peek height. */
3
+ export declare const g9SheetDefaultPeekHeight = 100;
4
+ /** Absolute minimum of an authoritative fit height (MAUI helper :81). */
5
+ export declare const g9SheetFitMinHeight = 80;
6
+ /** Floor while the height is unknown (loading window). */
7
+ export declare const g9SheetFitLoadingMinHeight = 180;
8
+ /** Finger travel at release that requests a close (MAUI `DragCloseThreshold`). */
9
+ export declare const g9SheetDragCloseThreshold = 72;
10
+ /** Base gap above full-screen content (MAUI safe-area rule). */
11
+ export declare const g9SheetTopSafeAreaBaseGap = 8;
12
+ /** The platform the app runs on (Lynx `SystemInfo.platform`), lower-cased; `'unknown'` outside Lynx. */
13
+ export declare function currentPlatform(): 'android' | 'ios' | 'windows' | 'macos' | 'unknown';
14
+ /** What the adapter passes to lynx-ui `SheetRoot` and how the frame behaves. */
15
+ export interface G9SheetLayout {
16
+ /** lynx-ui snap points, small to large: pixels, `'NN%'` of the host, or `'fit'`. */
17
+ readonly snapPoints: Array<number | string>;
18
+ readonly initialSnap: number;
19
+ /** One detent, or fit-to-content (MAUI "fixed"): no grabber, no detent dragging. */
20
+ readonly fixed: boolean;
21
+ readonly fit: boolean;
22
+ /** Grabber visible (`hasHandle && isDraggable && !fixed`). */
23
+ readonly showHandle: boolean;
24
+ readonly dragDisabled: boolean;
25
+ /** Drag past the lowest detent may request a close. */
26
+ readonly enableDragToClose: boolean;
27
+ /** Backdrop tap requests a close. */
28
+ readonly closeOnOverlayTap: boolean;
29
+ /** The resting body cap for a fit sheet (`maxFitToContentHeightRatio × host`), else `null`. */
30
+ readonly fitMaxHeight: number | null;
31
+ /** Whether the sheet's largest detent is full screen. */
32
+ readonly fullScreen: boolean;
33
+ }
34
+ /**
35
+ * Maps G9 options to a lynx-ui layout (the agreed mapping of MAUI `ApplyOptions`): fit → `['fit']` capped at
36
+ * `maxFitToContentHeightRatio`; states → peek pixels / half ratio / full ratio for the allowed detents, the initial
37
+ * detent from `currentState`. The MAUI quirks (a hidden 100 dp detent under `[medium, large]`, a peek-only sheet that
38
+ * may expand) are not carried over: the detents are exactly `states` (docs/sheets.md "deliberate differences").
39
+ */
40
+ export declare function resolveSheetLayout(options: G9SheetOptions, hostHeight: number, platform?: "android" | "ios" | "windows" | "macos" | "unknown"): G9SheetLayout;
41
+ /** Clamps a measured fit body height: `[80, cap]`, or `[180, cap]` while loading (MAUI fit engine). */
42
+ export declare function clampFitHeight(natural: number, cap: number, loading: boolean): number;
43
+ /**
44
+ * Scrim opacity for a visible ratio (MAUI helper overlay rule): between the smallest and the largest detent it runs
45
+ * from `min` to `max`; a single detent uses `max`; below the smallest detent it fades with the ratio.
46
+ */
47
+ export declare function sheetOverlayOpacity(visibleRatio: number, detentRatios: ReadonlyArray<number>, min: number, max: number): number;
48
+ /** The page recede behind a tall primary sheet (MAUI backdrop card): scale 1 → 0.93, translateY 0 → 12. */
49
+ export declare function backdropCardTransform(visibleRatio: number, threshold?: number): {
50
+ scale: number;
51
+ translateY: number;
52
+ };
53
+ /**
54
+ * The visible share of the host a detent sheet covers: its resting height when known, else its opening detent
55
+ * (peek = peek height, medium = half ratio, large = full ratio; `expandedFitsContent` large counts as the fit cap).
56
+ */
57
+ export declare function sheetVisibleRatio(options: G9SheetOptions, hostHeight: number, restingHeightPx: number | null, platform?: "android" | "ios" | "windows" | "macos" | "unknown"): number;
58
+ /** How far a receded parent sheet sinks: `max(24, visible × 0.25)` (MAUI stack recede). */
59
+ export declare function parentRecedeOffset(visibleHeight: number): number;
60
+ /** Top padding of a full-screen sheet (MAUI safe-area rule). */
61
+ export declare function sheetTopPadding(options: G9SheetOptions, topInset: number): number;
62
+ /**
63
+ * Size-scaled animation duration (MAUI `SizeScaledAnimationDuration`): a partial traversal takes the matching slice
64
+ * of the full duration (at least 1 ms unless the duration is 0).
65
+ */
66
+ export declare function scaledSheetDuration(durationMs: number, traversedRatio: number, sizeScaled: boolean): number;
67
+ /** Platform size constraints of the sheet surface (MAUI Android/Windows options, applied where they belong). */
68
+ export declare function platformSheetConstraints(options: G9SheetOptions, platform?: "android" | "ios" | "windows" | "macos" | "unknown"): Record<string, string>;
69
+ //# sourceMappingURL=sizing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sizing.d.ts","sourceRoot":"","sources":["../../src/sheet/sizing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,cAAc,EAAE,MAAM,WAAW,CAAC;AAI/D,+DAA+D;AAC/D,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAC5C,yEAAyE;AACzE,eAAO,MAAM,mBAAmB,KAAK,CAAC;AACtC,0DAA0D;AAC1D,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAC9C,kFAAkF;AAClF,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAC5C,gEAAgE;AAChE,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAI3C,wGAAwG;AACxG,wBAAgB,eAAe,IAAI,SAAS,GAAG,KAAK,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAQrF;AAED,gFAAgF;AAChF,MAAM,WAAW,aAAa;IAC5B,oFAAoF;IACpF,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAC5C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,oFAAoF;IACpF,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,8DAA8D;IAC9D,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,uDAAuD;IACvD,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;IACpC,qCAAqC;IACrC,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;IACpC,+FAA+F;IAC/F,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,yDAAyD;IACzD,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B;AAID;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,cAAc,EACvB,UAAU,EAAE,MAAM,EAClB,QAAQ,sDAAoB,GAC3B,aAAa,CAmDf;AAED,uGAAuG;AACvG,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAIrF;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,EACnC,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,GACV,MAAM,CAOR;AAED,2GAA2G;AAC3G,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAInH;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,cAAc,EACvB,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,GAAG,IAAI,EAC9B,QAAQ,sDAAoB,GAC3B,MAAM,CAQR;AAED,2FAA2F;AAC3F,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,gEAAgE;AAChE,wBAAgB,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIjF;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG,MAAM,CAI3G;AAED,gHAAgH;AAChH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,cAAc,EACvB,QAAQ,sDAAoB,GAC3B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAsBxB"}
@@ -0,0 +1,146 @@
1
+ const g9SheetDefaultPeekHeight = 100;
2
+ const g9SheetFitMinHeight = 80;
3
+ const g9SheetFitLoadingMinHeight = 180;
4
+ const g9SheetDragCloseThreshold = 72;
5
+ const g9SheetTopSafeAreaBaseGap = 8;
6
+ const clamp = (v, lo, hi)=>Math.min(hi, Math.max(lo, v));
7
+ function currentPlatform() {
8
+ var _ref;
9
+ const info = globalThis.SystemInfo;
10
+ const p = (null != (_ref = null == info ? void 0 : info.platform) ? _ref : '').toLowerCase();
11
+ if ('android' === p) return 'android';
12
+ if ('ios' === p) return 'ios';
13
+ if (p.startsWith('win')) return 'windows';
14
+ if ('macos' === p || 'mac' === p || 'osx' === p) return 'macos';
15
+ return 'unknown';
16
+ }
17
+ const pct = (ratio)=>`${Math.round(10000 * ratio) / 100}%`;
18
+ function resolveSheetLayout(options, hostHeight, platform = currentPlatform()) {
19
+ var _ref, _options_fullExpandedRatio, _ref1, _options_collapsedHeight, _options_currentState, _options_maxFitToContentHeightRatio;
20
+ const fit = 'fitToContent' === options.sizeMode;
21
+ const draggable = false !== options.isDraggable;
22
+ const cancelable = false !== options.isCancelable;
23
+ const intercepted = null != options.onBackRequested;
24
+ if (fit) {
25
+ var _options_maxFitToContentHeightRatio1;
26
+ const ratio = clamp(null != (_options_maxFitToContentHeightRatio1 = options.maxFitToContentHeightRatio) ? _options_maxFitToContentHeightRatio1 : 0.75, 0.2, 1);
27
+ return {
28
+ snapPoints: [
29
+ 'fit'
30
+ ],
31
+ initialSnap: 0,
32
+ fixed: true,
33
+ fit: true,
34
+ showHandle: false,
35
+ dragDisabled: true,
36
+ enableDragToClose: false,
37
+ closeOnOverlayTap: cancelable,
38
+ fitMaxHeight: Math.max(g9SheetFitMinHeight, Math.floor(hostHeight * ratio)),
39
+ fullScreen: false
40
+ };
41
+ }
42
+ const order = [
43
+ 'peek',
44
+ 'medium',
45
+ 'large'
46
+ ];
47
+ const requested = options.states && options.states.length > 0 ? options.states : [
48
+ 'medium',
49
+ 'large'
50
+ ];
51
+ const states = order.filter((d)=>requested.includes(d));
52
+ const androidHalf = 'android' === platform ? options.androidHalfExpandedRatio : null;
53
+ const half = clamp(null != (_ref = null != androidHalf ? androidHalf : options.halfExpandedRatio) ? _ref : 0.5, 0.1, 0.9);
54
+ const full = clamp(null != (_options_fullExpandedRatio = options.fullExpandedRatio) ? _options_fullExpandedRatio : 1, 0.1, 1);
55
+ const peek = Math.max(1, null != (_ref1 = null != (_options_collapsedHeight = options.collapsedHeight) ? _options_collapsedHeight : options.peekHeight) ? _ref1 : g9SheetDefaultPeekHeight);
56
+ const snap = (d)=>'peek' === d ? Math.min(peek, Math.max(1, hostHeight)) : 'medium' === d ? pct(half) : pct(full);
57
+ const snapPoints = states.map(snap);
58
+ if (options.expandedFitsContent && snapPoints.length > 0) snapPoints[snapPoints.length - 1] = 'fit';
59
+ const current = null != (_options_currentState = options.currentState) ? _options_currentState : 'medium';
60
+ const index = states.indexOf(current);
61
+ const fixed = states.length <= 1;
62
+ return {
63
+ snapPoints,
64
+ initialSnap: index >= 0 ? index : 0,
65
+ fixed,
66
+ fit: false,
67
+ showHandle: false !== options.hasHandle && draggable && !fixed,
68
+ dragDisabled: !draggable || intercepted,
69
+ enableDragToClose: cancelable && draggable && !intercepted,
70
+ closeOnOverlayTap: cancelable,
71
+ fitMaxHeight: options.expandedFitsContent ? Math.max(g9SheetFitMinHeight, Math.floor(hostHeight * clamp(null != (_options_maxFitToContentHeightRatio = options.maxFitToContentHeightRatio) ? _options_maxFitToContentHeightRatio : 0.75, 0.2, 1))) : null,
72
+ fullScreen: 1 === states.length && 'large' === states[0] && full >= 1
73
+ };
74
+ }
75
+ function clampFitHeight(natural, cap, loading) {
76
+ const min = loading ? g9SheetFitLoadingMinHeight : g9SheetFitMinHeight;
77
+ if (!(natural > 0)) return Math.min(min, cap);
78
+ return clamp(natural, Math.min(min, cap), cap);
79
+ }
80
+ function sheetOverlayOpacity(visibleRatio, detentRatios, min, max) {
81
+ if (0 === detentRatios.length) return max;
82
+ const lo = Math.min(...detentRatios);
83
+ const hi = Math.max(...detentRatios);
84
+ if (visibleRatio < lo) return (1 === detentRatios.length ? max : min) * clamp(visibleRatio / lo, 0, 1);
85
+ if (hi === lo) return max;
86
+ return min + (max - min) * clamp((visibleRatio - lo) / (hi - lo), 0, 1);
87
+ }
88
+ function backdropCardTransform(visibleRatio, threshold = 0.75) {
89
+ const raw = clamp((visibleRatio - threshold) / Math.max(1e-6, 1 - threshold), 0, 1);
90
+ const progress = raw <= 0 ? 0 : 1 - (1 - raw) ** (1 / 3);
91
+ return {
92
+ scale: 1 - 0.07 * progress,
93
+ translateY: 12 * progress
94
+ };
95
+ }
96
+ function sheetVisibleRatio(options, hostHeight, restingHeightPx, platform = currentPlatform()) {
97
+ var _layout_fitMaxHeight;
98
+ const host = Math.max(1, hostHeight);
99
+ if (null != restingHeightPx) return clamp(restingHeightPx / host, 0, 1);
100
+ const layout = resolveSheetLayout(options, host, platform);
101
+ const point = layout.snapPoints[layout.initialSnap];
102
+ if ('number' == typeof point) return clamp(point / host, 0, 1);
103
+ if ('fit' === point || void 0 === point) return (null != (_layout_fitMaxHeight = layout.fitMaxHeight) ? _layout_fitMaxHeight : 0) / host;
104
+ return clamp(Number.parseFloat(point) / 100, 0, 1);
105
+ }
106
+ function parentRecedeOffset(visibleHeight) {
107
+ return Math.max(24, 0.25 * visibleHeight);
108
+ }
109
+ function sheetTopPadding(options, topInset) {
110
+ var _options_additionalTopSafeAreaPadding;
111
+ if (null != options.topSafeAreaPaddingOverride) return Math.max(0, options.topSafeAreaPaddingOverride);
112
+ const inset = false === options.useTopSafeAreaPadding ? 0 : Math.max(0, topInset);
113
+ return inset + g9SheetTopSafeAreaBaseGap + Math.max(0, null != (_options_additionalTopSafeAreaPadding = options.additionalTopSafeAreaPadding) ? _options_additionalTopSafeAreaPadding : 0);
114
+ }
115
+ function scaledSheetDuration(durationMs, traversedRatio, sizeScaled) {
116
+ if (durationMs <= 0) return 0;
117
+ if (!sizeScaled) return durationMs;
118
+ return Math.max(1, Math.round(durationMs * clamp(traversedRatio, 0, 1)));
119
+ }
120
+ function platformSheetConstraints(options, platform = currentPlatform()) {
121
+ const px = (n)=>`${n}px`;
122
+ const style = {};
123
+ if ('android' === platform) {
124
+ if (null != options.androidMaxWidth) style.maxWidth = px(options.androidMaxWidth);
125
+ if (null != options.androidMaxHeight) style.maxHeight = px(options.androidMaxHeight);
126
+ if (options.androidMargin) {
127
+ const [l, t, r, b] = options.androidMargin;
128
+ style.margin = `${t}px ${r}px ${b}px ${l}px`;
129
+ }
130
+ }
131
+ if ('windows' === platform) {
132
+ if (null != options.windowsMaxWidth) style.maxWidth = px(options.windowsMaxWidth);
133
+ if (null != options.windowsMaxHeight) style.maxHeight = px(options.windowsMaxHeight);
134
+ if (null != options.windowsMinWidth) style.minWidth = px(options.windowsMinWidth);
135
+ if (null != options.windowsMinHeight) style.minHeight = px(options.windowsMinHeight);
136
+ }
137
+ if ('custom' === options.contentWidthMode) {
138
+ var _options_contentWidth;
139
+ style.width = px(null != (_options_contentWidth = options.contentWidth) ? _options_contentWidth : 300);
140
+ style.alignSelf = 'center';
141
+ }
142
+ return style;
143
+ }
144
+ export { backdropCardTransform, clampFitHeight, currentPlatform, g9SheetDefaultPeekHeight, g9SheetDragCloseThreshold, g9SheetFitLoadingMinHeight, g9SheetFitMinHeight, g9SheetTopSafeAreaBaseGap, parentRecedeOffset, platformSheetConstraints, resolveSheetLayout, scaledSheetDuration, sheetOverlayOpacity, sheetTopPadding, sheetVisibleRatio };
145
+
146
+ //# sourceMappingURL=sizing.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sheet/sizing.jsx","sources":["../../src/sheet/sizing.ts"],"sourcesContent":["import type { G9SheetDetent, G9SheetOptions } from './options';\n\n// Pure sizing rules of the G9 sheet (MAUI G9SheetView + G9BottomSheetHelper sizing; guide 650–980, ADR-0019/0026).\n\n/** MAUI `G9SheetView.MinimizedHeight`: default peek height. */\nexport const g9SheetDefaultPeekHeight = 100;\n/** Absolute minimum of an authoritative fit height (MAUI helper :81). */\nexport const g9SheetFitMinHeight = 80;\n/** Floor while the height is unknown (loading window). */\nexport const g9SheetFitLoadingMinHeight = 180;\n/** Finger travel at release that requests a close (MAUI `DragCloseThreshold`). */\nexport const g9SheetDragCloseThreshold = 72;\n/** Base gap above full-screen content (MAUI safe-area rule). */\nexport const g9SheetTopSafeAreaBaseGap = 8;\n\nconst clamp = (v: number, lo: number, hi: number) => Math.min(hi, Math.max(lo, v));\n\n/** The platform the app runs on (Lynx `SystemInfo.platform`), lower-cased; `'unknown'` outside Lynx. */\nexport function currentPlatform(): 'android' | 'ios' | 'windows' | 'macos' | 'unknown' {\n const info = (globalThis as { SystemInfo?: { platform?: string } }).SystemInfo;\n const p = (info?.platform ?? '').toLowerCase();\n if (p === 'android') return 'android';\n if (p === 'ios') return 'ios';\n if (p.startsWith('win')) return 'windows';\n if (p === 'macos' || p === 'mac' || p === 'osx') return 'macos';\n return 'unknown';\n}\n\n/** What the adapter passes to lynx-ui `SheetRoot` and how the frame behaves. */\nexport interface G9SheetLayout {\n /** lynx-ui snap points, small to large: pixels, `'NN%'` of the host, or `'fit'`. */\n readonly snapPoints: Array<number | string>;\n readonly initialSnap: number;\n /** One detent, or fit-to-content (MAUI \"fixed\"): no grabber, no detent dragging. */\n readonly fixed: boolean;\n readonly fit: boolean;\n /** Grabber visible (`hasHandle && isDraggable && !fixed`). */\n readonly showHandle: boolean;\n readonly dragDisabled: boolean;\n /** Drag past the lowest detent may request a close. */\n readonly enableDragToClose: boolean;\n /** Backdrop tap requests a close. */\n readonly closeOnOverlayTap: boolean;\n /** The resting body cap for a fit sheet (`maxFitToContentHeightRatio × host`), else `null`. */\n readonly fitMaxHeight: number | null;\n /** Whether the sheet's largest detent is full screen. */\n readonly fullScreen: boolean;\n}\n\nconst pct = (ratio: number) => `${Math.round(ratio * 10000) / 100}%`;\n\n/**\n * Maps G9 options to a lynx-ui layout (the agreed mapping of MAUI `ApplyOptions`): fit → `['fit']` capped at\n * `maxFitToContentHeightRatio`; states → peek pixels / half ratio / full ratio for the allowed detents, the initial\n * detent from `currentState`. The MAUI quirks (a hidden 100 dp detent under `[medium, large]`, a peek-only sheet that\n * may expand) are not carried over: the detents are exactly `states` (docs/sheets.md \"deliberate differences\").\n */\nexport function resolveSheetLayout(\n options: G9SheetOptions,\n hostHeight: number,\n platform = currentPlatform(),\n): G9SheetLayout {\n const fit = options.sizeMode === 'fitToContent';\n const draggable = options.isDraggable !== false;\n const cancelable = options.isCancelable !== false;\n const intercepted = options.onBackRequested != null;\n if (fit) {\n const ratio = clamp(options.maxFitToContentHeightRatio ?? 0.75, 0.2, 1);\n return {\n snapPoints: ['fit'],\n initialSnap: 0,\n fixed: true,\n fit: true,\n showHandle: false,\n dragDisabled: true,\n enableDragToClose: false,\n closeOnOverlayTap: cancelable,\n fitMaxHeight: Math.max(g9SheetFitMinHeight, Math.floor(hostHeight * ratio)),\n fullScreen: false,\n };\n }\n const order: G9SheetDetent[] = ['peek', 'medium', 'large'];\n const requested = options.states && options.states.length > 0 ? options.states : ['medium', 'large'];\n const states = order.filter((d) => requested.includes(d));\n const androidHalf = platform === 'android' ? options.androidHalfExpandedRatio : null;\n const half = clamp(androidHalf ?? options.halfExpandedRatio ?? 0.5, 0.1, 0.9);\n const full = clamp(options.fullExpandedRatio ?? 1, 0.1, 1);\n const peek = Math.max(1, options.collapsedHeight ?? options.peekHeight ?? g9SheetDefaultPeekHeight);\n const snap = (d: G9SheetDetent): number | string =>\n d === 'peek' ? Math.min(peek, Math.max(1, hostHeight)) : d === 'medium' ? pct(half) : pct(full);\n const snapPoints = states.map(snap);\n if (options.expandedFitsContent && snapPoints.length > 0) snapPoints[snapPoints.length - 1] = 'fit';\n const current = options.currentState ?? 'medium';\n const index = states.indexOf(current);\n const fixed = states.length <= 1;\n return {\n snapPoints,\n initialSnap: index >= 0 ? index : 0,\n fixed,\n fit: false,\n showHandle: options.hasHandle !== false && draggable && !fixed,\n dragDisabled: !draggable || intercepted,\n enableDragToClose: cancelable && draggable && !intercepted,\n closeOnOverlayTap: cancelable,\n fitMaxHeight: options.expandedFitsContent\n ? Math.max(\n g9SheetFitMinHeight,\n Math.floor(hostHeight * clamp(options.maxFitToContentHeightRatio ?? 0.75, 0.2, 1)),\n )\n : null,\n fullScreen: states.length === 1 && states[0] === 'large' && full >= 1,\n };\n}\n\n/** Clamps a measured fit body height: `[80, cap]`, or `[180, cap]` while loading (MAUI fit engine). */\nexport function clampFitHeight(natural: number, cap: number, loading: boolean): number {\n const min = loading ? g9SheetFitLoadingMinHeight : g9SheetFitMinHeight;\n if (!(natural > 0)) return Math.min(min, cap);\n return clamp(natural, Math.min(min, cap), cap);\n}\n\n/**\n * Scrim opacity for a visible ratio (MAUI helper overlay rule): between the smallest and the largest detent it runs\n * from `min` to `max`; a single detent uses `max`; below the smallest detent it fades with the ratio.\n */\nexport function sheetOverlayOpacity(\n visibleRatio: number,\n detentRatios: ReadonlyArray<number>,\n min: number,\n max: number,\n): number {\n if (detentRatios.length === 0) return max;\n const lo = Math.min(...detentRatios);\n const hi = Math.max(...detentRatios);\n if (visibleRatio < lo) return (detentRatios.length === 1 ? max : min) * clamp(visibleRatio / lo, 0, 1);\n if (hi === lo) return max;\n return min + (max - min) * clamp((visibleRatio - lo) / (hi - lo), 0, 1);\n}\n\n/** The page recede behind a tall primary sheet (MAUI backdrop card): scale 1 → 0.93, translateY 0 → 12. */\nexport function backdropCardTransform(visibleRatio: number, threshold = 0.75): { scale: number; translateY: number } {\n const raw = clamp((visibleRatio - threshold) / Math.max(1e-6, 1 - threshold), 0, 1);\n const progress = raw <= 0 ? 0 : 1 - (1 - raw) ** (1 / 3);\n return { scale: 1 - 0.07 * progress, translateY: 12 * progress };\n}\n\n/**\n * The visible share of the host a detent sheet covers: its resting height when known, else its opening detent\n * (peek = peek height, medium = half ratio, large = full ratio; `expandedFitsContent` large counts as the fit cap).\n */\nexport function sheetVisibleRatio(\n options: G9SheetOptions,\n hostHeight: number,\n restingHeightPx: number | null,\n platform = currentPlatform(),\n): number {\n const host = Math.max(1, hostHeight);\n if (restingHeightPx != null) return clamp(restingHeightPx / host, 0, 1);\n const layout = resolveSheetLayout(options, host, platform);\n const point = layout.snapPoints[layout.initialSnap];\n if (typeof point === 'number') return clamp(point / host, 0, 1);\n if (point === 'fit' || point === undefined) return (layout.fitMaxHeight ?? 0) / host;\n return clamp(Number.parseFloat(point) / 100, 0, 1);\n}\n\n/** How far a receded parent sheet sinks: `max(24, visible × 0.25)` (MAUI stack recede). */\nexport function parentRecedeOffset(visibleHeight: number): number {\n return Math.max(24, visibleHeight * 0.25);\n}\n\n/** Top padding of a full-screen sheet (MAUI safe-area rule). */\nexport function sheetTopPadding(options: G9SheetOptions, topInset: number): number {\n if (options.topSafeAreaPaddingOverride != null) return Math.max(0, options.topSafeAreaPaddingOverride);\n const inset = options.useTopSafeAreaPadding === false ? 0 : Math.max(0, topInset);\n return inset + g9SheetTopSafeAreaBaseGap + Math.max(0, options.additionalTopSafeAreaPadding ?? 0);\n}\n\n/**\n * Size-scaled animation duration (MAUI `SizeScaledAnimationDuration`): a partial traversal takes the matching slice\n * of the full duration (at least 1 ms unless the duration is 0).\n */\nexport function scaledSheetDuration(durationMs: number, traversedRatio: number, sizeScaled: boolean): number {\n if (durationMs <= 0) return 0;\n if (!sizeScaled) return durationMs;\n return Math.max(1, Math.round(durationMs * clamp(traversedRatio, 0, 1)));\n}\n\n/** Platform size constraints of the sheet surface (MAUI Android/Windows options, applied where they belong). */\nexport function platformSheetConstraints(\n options: G9SheetOptions,\n platform = currentPlatform(),\n): Record<string, string> {\n const px = (n: number) => `${n}px`;\n const style: Record<string, string> = {};\n if (platform === 'android') {\n if (options.androidMaxWidth != null) style.maxWidth = px(options.androidMaxWidth);\n if (options.androidMaxHeight != null) style.maxHeight = px(options.androidMaxHeight);\n if (options.androidMargin) {\n const [l, t, r, b] = options.androidMargin;\n style.margin = `${t}px ${r}px ${b}px ${l}px`;\n }\n }\n if (platform === 'windows') {\n if (options.windowsMaxWidth != null) style.maxWidth = px(options.windowsMaxWidth);\n if (options.windowsMaxHeight != null) style.maxHeight = px(options.windowsMaxHeight);\n if (options.windowsMinWidth != null) style.minWidth = px(options.windowsMinWidth);\n if (options.windowsMinHeight != null) style.minHeight = px(options.windowsMinHeight);\n }\n if (options.contentWidthMode === 'custom') {\n style.width = px(options.contentWidth ?? 300);\n style.alignSelf = 'center';\n }\n return style;\n}\n"],"names":["g9SheetDefaultPeekHeight","g9SheetFitMinHeight","g9SheetFitLoadingMinHeight","g9SheetDragCloseThreshold","g9SheetTopSafeAreaBaseGap","clamp","v","lo","hi","Math","currentPlatform","info","globalThis","p","pct","ratio","resolveSheetLayout","options","hostHeight","platform","_ref","_options_fullExpandedRatio","_ref1","_options_currentState","_options_maxFitToContentHeightRatio","fit","draggable","cancelable","intercepted","_options_maxFitToContentHeightRatio1","order","requested","states","d","androidHalf","half","full","peek","snap","snapPoints","current","index","fixed","clampFitHeight","natural","cap","loading","min","sheetOverlayOpacity","visibleRatio","detentRatios","max","backdropCardTransform","threshold","raw","progress","sheetVisibleRatio","restingHeightPx","_layout_fitMaxHeight","host","layout","point","undefined","Number","parentRecedeOffset","visibleHeight","sheetTopPadding","topInset","_options_additionalTopSafeAreaPadding","inset","scaledSheetDuration","durationMs","traversedRatio","sizeScaled","platformSheetConstraints","px","n","style","l","t","r","b","_options_contentWidth"],"mappings":"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"}
@@ -0,0 +1,161 @@
1
+ import type { ReactNode } from '@lynx-js/react';
2
+ import type { G9SheetBackSource, G9SheetOptions } from './options.js';
3
+ /** Why a sheet's result settled. Every sheet settles exactly once. */
4
+ export type G9SheetCloseReason =
5
+ /** `handle.close()` / `closeAsync()`. */
6
+ 'closed'
7
+ /** `closeAll()` (MAUI `CloseG9BottomSheet`). */
8
+ | 'closeAll'
9
+ /** The header back/close button or `closeTop()`. */
10
+ | 'toolbarButton'
11
+ /** Hardware back / desktop Escape. */
12
+ | 'hardwareButton'
13
+ /** A tap on the scrim. */
14
+ | 'overlayTap'
15
+ /** Dragged closed. */
16
+ | 'drag'
17
+ /** Replaced in place or handed off to a successor. */
18
+ | 'replaced'
19
+ /** A queued request displaced by a newer one before it opened. */
20
+ | 'displaced'
21
+ /** The host unmounted. */
22
+ | 'unmount';
23
+ /** The result of one sheet. */
24
+ export interface G9SheetResult {
25
+ readonly reason: G9SheetCloseReason;
26
+ }
27
+ /** What a sheet shows: a node, or a factory built after the open motion (deferred content). */
28
+ export type G9SheetContent = ReactNode | (() => ReactNode);
29
+ /** Lifecycle status of an entry. */
30
+ export type G9SheetStatus = 'queued' | 'opening' | 'open' | 'closing' | 'closed';
31
+ /** One sheet of the stack (read-only snapshot for rendering). */
32
+ export interface G9SheetEntry {
33
+ readonly id: number;
34
+ /** Identity of the rendered frame; kept by an in-place replace. */
35
+ readonly frameKey: number;
36
+ readonly content: G9SheetContent;
37
+ readonly options: G9SheetOptions;
38
+ readonly status: G9SheetStatus;
39
+ /** Bumped by an in-place replace (the frame cross-fades its body). */
40
+ readonly version: number;
41
+ /** The sheet above this one recedes it. */
42
+ readonly receded: boolean;
43
+ /** Close motion runs at half duration (replace fallback). */
44
+ readonly quickClose: boolean;
45
+ /** The entry is handing its dim to a successor (its scrim is transparent). */
46
+ readonly handingOff: boolean;
47
+ /** Closing without a visible motion (whole-stack teardown keeps recede links static). */
48
+ readonly reason: G9SheetCloseReason | null;
49
+ }
50
+ /** A handle to one sheet (MAUI `IG9BottomSheetHandle`, sheet-scoped). */
51
+ export interface G9SheetHandle {
52
+ readonly id: number;
53
+ /** Settles once with the close reason, after the sheet left the screen. */
54
+ readonly result: Promise<G9SheetResult>;
55
+ /** `true` until the sheet started closing. */
56
+ readonly isOpen: boolean;
57
+ /** Closes this sheet (MAUI owned-handle `Close`). */
58
+ close(): void;
59
+ /** Closes this sheet and resolves when it is gone (MAUI `CloseAsync`). */
60
+ closeAsync(): Promise<void>;
61
+ /** Opens another sheet on top (MAUI `Show`, auto-stacking). */
62
+ show(content: G9SheetContent, options?: G9SheetOptions): G9SheetHandle | null;
63
+ /** Back-routes the top sheet (MAUI `CloseTop`). */
64
+ closeTop(): void;
65
+ }
66
+ /** Timing and policy the stack needs from its host. */
67
+ export interface G9SheetStackConfig {
68
+ /** Monotonic ms. */
69
+ now(): number;
70
+ setTimer(callback: () => void, ms: number): unknown;
71
+ clearTimer(handle: unknown): void;
72
+ /** Open/close durations (ms) for an entry's fallback timers. */
73
+ durations(options: G9SheetOptions): {
74
+ open: number;
75
+ close: number;
76
+ };
77
+ /** Hand-off needs the staged pipeline (`settings.stageBeforeShow`). */
78
+ stageBeforeShow(): boolean;
79
+ /**
80
+ * Longest a hand-off waits for its successor to report open before the predecessor closes anyway (ms; MAUI
81
+ * `PreOpenMaxHoldMs`). Default: only the successor's open fallback timer bounds it.
82
+ */
83
+ preOpenMaxHoldMs?(): number;
84
+ /** A lifecycle callback threw. */
85
+ onError?(error: unknown): void;
86
+ }
87
+ /** MAUI `G9SafeCommand` throttle window shared by show and replace. */
88
+ export declare const g9SheetShowThrottleMs = 369;
89
+ /** Grace after the close motion before cleanup (MAUI page-side reset). */
90
+ export declare const g9SheetCloseGraceMs = 48;
91
+ /** The stack of one host. */
92
+ export declare class G9SheetStack {
93
+ private readonly config;
94
+ private entries;
95
+ private pending;
96
+ private lastShow;
97
+ private nextId;
98
+ private readonly listeners;
99
+ private snapshot;
100
+ private disposed;
101
+ constructor(config: G9SheetStackConfig);
102
+ /** Entries bottom first (closing ones included until removed). The same array until something changes. */
103
+ getSnapshot(): ReadonlyArray<G9SheetEntry>;
104
+ subscribe(listener: () => void): () => void;
105
+ /** Open sheets (MAUI `GetOpenSheetCount`): not closing, not queued. */
106
+ openCount(): number;
107
+ /** The top open sheet, or `null`. */
108
+ top(): G9SheetEntry | null;
109
+ /**
110
+ * Shows a sheet (MAUI `ShowG9BottomSheet`): stacks on an open sheet, hands off with `replaceCurrentSheet`, queues
111
+ * behind a closing primary (one pending request; a newer one displaces it), else opens as primary. Returns `null`
112
+ * when throttled (a second show/replace within 369 ms).
113
+ */
114
+ show(content: G9SheetContent, options?: G9SheetOptions, throttle?: boolean): G9SheetHandle | null;
115
+ /**
116
+ * Replaces the open sheet (MAUI `ReplaceG9BottomSheet`): in place (same frame, body cross-fade, old lifecycle not
117
+ * run) when one fit, modal sheet is open and the new one is fit and modal without a full-screen placeholder;
118
+ * otherwise the top sheet quick-closes through its back route and the new one opens. Throttled like `show`.
119
+ */
120
+ replace(content: G9SheetContent, options?: G9SheetOptions): G9SheetHandle | null;
121
+ /** Back-routes the top sheet as the toolbar button would (MAUI `CloseTopG9BottomSheet`). */
122
+ closeTop(): void;
123
+ /** Closes every sheet, stacked ones first (MAUI `CloseG9BottomSheet`). */
124
+ closeAll(): void;
125
+ /** Hardware back (MAUI `HandleHardwareBackPressed`): `false` when no sheet is open, else routes it and `true`. */
126
+ handleHardwareBack(): boolean;
127
+ /**
128
+ * A back request for one sheet (MAUI `HandleBackRequest`): an overlay tap on a non-cancelable sheet is ignored;
129
+ * `onBackRequested` decides when set; otherwise hardware back closes only with `hardwareBackCloses`, every other
130
+ * source closes. Resolves `true` when the sheet closes.
131
+ */
132
+ requestBack(id: number, source: G9SheetBackSource): Promise<boolean>;
133
+ /** Updates the content (and options) of an open sheet in place, without any transition (declarative sheets). */
134
+ update(id: number, content: G9SheetContent, options?: G9SheetOptions): void;
135
+ /** Closes one sheet (owned handle `Close`). */
136
+ close(id: number, reason?: G9SheetCloseReason): boolean;
137
+ /** The frame finished its open motion. */
138
+ markOpened(id: number): void;
139
+ /** The frame finished its close motion. */
140
+ markClosed(id: number): void;
141
+ /** Host unmount: every sheet settles with `'unmount'`; nothing opens afterwards. */
142
+ dispose(): void;
143
+ private live;
144
+ private passThrottle;
145
+ private create;
146
+ private push;
147
+ private isFullScreen;
148
+ private beginClose;
149
+ /** Quick close of an entry already closing: its removal comes at half the close duration from now. */
150
+ private hurry;
151
+ private restoreParent;
152
+ private remove;
153
+ private finish;
154
+ private clearTimer;
155
+ private safe;
156
+ private view;
157
+ private emit;
158
+ /** The handle of an entry (frames inject it into their content). */
159
+ handleOf(id: number): G9SheetHandle | null;
160
+ }
161
+ //# sourceMappingURL=stack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack.d.ts","sourceRoot":"","sources":["../../src/sheet/stack.ts"],"names":[],"mappings":"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"}