@g9tm/lynxcontrols 0.0.0-stage → 1.4.2

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 (561) hide show
  1. package/README.md +29 -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 +68 -0
  6. package/dist/base/control.d.ts.map +1 -0
  7. package/dist/base/control.jsx +36 -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 +88 -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 +96 -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 +73 -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 +112 -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 +164 -0
  171. package/dist/fields/fields.css.map +1 -0
  172. package/dist/fields/index.d.ts +13 -0
  173. package/dist/fields/index.d.ts.map +1 -0
  174. package/dist/fields/index.jsx +12 -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/notch.d.ts +10 -0
  180. package/dist/fields/notch.d.ts.map +1 -0
  181. package/dist/fields/notch.jsx +9 -0
  182. package/dist/fields/notch.jsx.map +1 -0
  183. package/dist/fields/outlined-field.d.ts +152 -0
  184. package/dist/fields/outlined-field.d.ts.map +1 -0
  185. package/dist/fields/outlined-field.jsx +199 -0
  186. package/dist/fields/outlined-field.jsx.map +1 -0
  187. package/dist/fields/pin-entry.d.ts +65 -0
  188. package/dist/fields/pin-entry.d.ts.map +1 -0
  189. package/dist/fields/pin-entry.jsx +294 -0
  190. package/dist/fields/pin-entry.jsx.map +1 -0
  191. package/dist/fields/search-entry.d.ts +35 -0
  192. package/dist/fields/search-entry.d.ts.map +1 -0
  193. package/dist/fields/search-entry.jsx +118 -0
  194. package/dist/fields/search-entry.jsx.map +1 -0
  195. package/dist/fields/slot-layout.d.ts +33 -0
  196. package/dist/fields/slot-layout.d.ts.map +1 -0
  197. package/dist/fields/slot-layout.jsx +33 -0
  198. package/dist/fields/slot-layout.jsx.map +1 -0
  199. package/dist/fields/text-entry.d.ts +62 -0
  200. package/dist/fields/text-entry.d.ts.map +1 -0
  201. package/dist/fields/text-entry.jsx +82 -0
  202. package/dist/fields/text-entry.jsx.map +1 -0
  203. package/dist/fields/use-dictation.d.ts +34 -0
  204. package/dist/fields/use-dictation.d.ts.map +1 -0
  205. package/dist/fields/use-dictation.jsx +80 -0
  206. package/dist/fields/use-dictation.jsx.map +1 -0
  207. package/dist/fields/use-text-input.d.ts +150 -0
  208. package/dist/fields/use-text-input.d.ts.map +1 -0
  209. package/dist/fields/use-text-input.jsx +247 -0
  210. package/dist/fields/use-text-input.jsx.map +1 -0
  211. package/dist/fields/validator.d.ts +14 -0
  212. package/dist/fields/validator.d.ts.map +1 -0
  213. package/dist/fields/validator.jsx +20 -0
  214. package/dist/fields/validator.jsx.map +1 -0
  215. package/dist/host/back.d.ts +42 -0
  216. package/dist/host/back.d.ts.map +1 -0
  217. package/dist/host/back.jsx +47 -0
  218. package/dist/host/back.jsx.map +1 -0
  219. package/dist/host/hooks.d.ts +90 -0
  220. package/dist/host/hooks.d.ts.map +1 -0
  221. package/dist/host/hooks.jsx +166 -0
  222. package/dist/host/hooks.jsx.map +1 -0
  223. package/dist/host/host.css +81 -0
  224. package/dist/host/host.css.map +1 -0
  225. package/dist/host/host.d.ts +70 -0
  226. package/dist/host/host.d.ts.map +1 -0
  227. package/dist/host/host.jsx +229 -0
  228. package/dist/host/host.jsx.map +1 -0
  229. package/dist/host/index.d.ts +9 -0
  230. package/dist/host/index.d.ts.map +1 -0
  231. package/dist/host/index.jsx +8 -0
  232. package/dist/host/keyboard.d.ts +24 -0
  233. package/dist/host/keyboard.d.ts.map +1 -0
  234. package/dist/host/keyboard.jsx +28 -0
  235. package/dist/host/keyboard.jsx.map +1 -0
  236. package/dist/host/layers.d.ts +69 -0
  237. package/dist/host/layers.d.ts.map +1 -0
  238. package/dist/host/layers.jsx +111 -0
  239. package/dist/host/layers.jsx.map +1 -0
  240. package/dist/host/page-loading-overlay.d.ts +17 -0
  241. package/dist/host/page-loading-overlay.d.ts.map +1 -0
  242. package/dist/host/page-loading-overlay.jsx +16 -0
  243. package/dist/host/page-loading-overlay.jsx.map +1 -0
  244. package/dist/host/readiness.d.ts +57 -0
  245. package/dist/host/readiness.d.ts.map +1 -0
  246. package/dist/host/readiness.jsx +138 -0
  247. package/dist/host/readiness.jsx.map +1 -0
  248. package/dist/host/registry.d.ts +106 -0
  249. package/dist/host/registry.d.ts.map +1 -0
  250. package/dist/host/registry.jsx +93 -0
  251. package/dist/host/registry.jsx.map +1 -0
  252. package/dist/icon/icon.css +39 -0
  253. package/dist/icon/icon.css.map +1 -0
  254. package/dist/icon/icon.d.ts +57 -0
  255. package/dist/icon/icon.d.ts.map +1 -0
  256. package/dist/icon/icon.jsx +115 -0
  257. package/dist/icon/icon.jsx.map +1 -0
  258. package/dist/icon/index.d.ts +4 -0
  259. package/dist/icon/index.d.ts.map +1 -0
  260. package/dist/icon/index.jsx +3 -0
  261. package/dist/icon/slot.d.ts +45 -0
  262. package/dist/icon/slot.d.ts.map +1 -0
  263. package/dist/icon/slot.jsx +61 -0
  264. package/dist/icon/slot.jsx.map +1 -0
  265. package/dist/icon/swatch.d.ts +29 -0
  266. package/dist/icon/swatch.d.ts.map +1 -0
  267. package/dist/icon/swatch.jsx +25 -0
  268. package/dist/icon/swatch.jsx.map +1 -0
  269. package/dist/index.d.ts +23 -0
  270. package/dist/index.d.ts.map +1 -0
  271. package/dist/index.jsx +1 -0
  272. package/dist/pickers/combo-box.d.ts +42 -0
  273. package/dist/pickers/combo-box.d.ts.map +1 -0
  274. package/dist/pickers/combo-box.jsx +129 -0
  275. package/dist/pickers/combo-box.jsx.map +1 -0
  276. package/dist/pickers/date-time-picker.d.ts +63 -0
  277. package/dist/pickers/date-time-picker.d.ts.map +1 -0
  278. package/dist/pickers/date-time-picker.jsx +141 -0
  279. package/dist/pickers/date-time-picker.jsx.map +1 -0
  280. package/dist/pickers/date-time.d.ts +82 -0
  281. package/dist/pickers/date-time.d.ts.map +1 -0
  282. package/dist/pickers/date-time.jsx +130 -0
  283. package/dist/pickers/date-time.jsx.map +1 -0
  284. package/dist/pickers/index.d.ts +10 -0
  285. package/dist/pickers/index.d.ts.map +1 -0
  286. package/dist/pickers/index.jsx +9 -0
  287. package/dist/pickers/picker-sheet.d.ts +21 -0
  288. package/dist/pickers/picker-sheet.d.ts.map +1 -0
  289. package/dist/pickers/picker-sheet.jsx +61 -0
  290. package/dist/pickers/picker-sheet.jsx.map +1 -0
  291. package/dist/pickers/picker.d.ts +32 -0
  292. package/dist/pickers/picker.d.ts.map +1 -0
  293. package/dist/pickers/picker.jsx +72 -0
  294. package/dist/pickers/picker.jsx.map +1 -0
  295. package/dist/pickers/pickers.css +219 -0
  296. package/dist/pickers/pickers.css.map +1 -0
  297. package/dist/pickers/timespan-picker.d.ts +36 -0
  298. package/dist/pickers/timespan-picker.d.ts.map +1 -0
  299. package/dist/pickers/timespan-picker.jsx +99 -0
  300. package/dist/pickers/timespan-picker.jsx.map +1 -0
  301. package/dist/pickers/timespan.d.ts +38 -0
  302. package/dist/pickers/timespan.d.ts.map +1 -0
  303. package/dist/pickers/timespan.jsx +49 -0
  304. package/dist/pickers/timespan.jsx.map +1 -0
  305. package/dist/pickers/trigger.d.ts +34 -0
  306. package/dist/pickers/trigger.d.ts.map +1 -0
  307. package/dist/pickers/trigger.jsx +77 -0
  308. package/dist/pickers/trigger.jsx.map +1 -0
  309. package/dist/pickers/wheel-column.d.ts +32 -0
  310. package/dist/pickers/wheel-column.d.ts.map +1 -0
  311. package/dist/pickers/wheel-column.jsx +99 -0
  312. package/dist/pickers/wheel-column.jsx.map +1 -0
  313. package/dist/plus-button/index.d.ts +3 -0
  314. package/dist/plus-button/index.d.ts.map +1 -0
  315. package/dist/plus-button/index.jsx +2 -0
  316. package/dist/plus-button/model.d.ts +65 -0
  317. package/dist/plus-button/model.d.ts.map +1 -0
  318. package/dist/plus-button/model.jsx +86 -0
  319. package/dist/plus-button/model.jsx.map +1 -0
  320. package/dist/plus-button/plus-button.css +67 -0
  321. package/dist/plus-button/plus-button.css.map +1 -0
  322. package/dist/plus-button/plus-button.d.ts +38 -0
  323. package/dist/plus-button/plus-button.d.ts.map +1 -0
  324. package/dist/plus-button/plus-button.jsx +155 -0
  325. package/dist/plus-button/plus-button.jsx.map +1 -0
  326. package/dist/popup/frame.d.ts +101 -0
  327. package/dist/popup/frame.d.ts.map +1 -0
  328. package/dist/popup/frame.jsx +252 -0
  329. package/dist/popup/frame.jsx.map +1 -0
  330. package/dist/popup/index.d.ts +8 -0
  331. package/dist/popup/index.d.ts.map +1 -0
  332. package/dist/popup/index.jsx +7 -0
  333. package/dist/popup/input-form.d.ts +35 -0
  334. package/dist/popup/input-form.d.ts.map +1 -0
  335. package/dist/popup/input-form.jsx +160 -0
  336. package/dist/popup/input-form.jsx.map +1 -0
  337. package/dist/popup/input.d.ts +175 -0
  338. package/dist/popup/input.d.ts.map +1 -0
  339. package/dist/popup/input.jsx +176 -0
  340. package/dist/popup/input.jsx.map +1 -0
  341. package/dist/popup/popup-view.d.ts +25 -0
  342. package/dist/popup/popup-view.d.ts.map +1 -0
  343. package/dist/popup/popup-view.jsx +67 -0
  344. package/dist/popup/popup-view.jsx.map +1 -0
  345. package/dist/popup/popup.css +203 -0
  346. package/dist/popup/popup.css.map +1 -0
  347. package/dist/popup/queue.d.ts +90 -0
  348. package/dist/popup/queue.d.ts.map +1 -0
  349. package/dist/popup/queue.jsx +309 -0
  350. package/dist/popup/queue.jsx.map +1 -0
  351. package/dist/popup/service.d.ts +60 -0
  352. package/dist/popup/service.d.ts.map +1 -0
  353. package/dist/popup/service.jsx +350 -0
  354. package/dist/popup/service.jsx.map +1 -0
  355. package/dist/popup/types.d.ts +222 -0
  356. package/dist/popup/types.d.ts.map +1 -0
  357. package/dist/popup/types.jsx +218 -0
  358. package/dist/popup/types.jsx.map +1 -0
  359. package/dist/provider/contexts.d.ts +41 -0
  360. package/dist/provider/contexts.d.ts.map +1 -0
  361. package/dist/provider/contexts.jsx +11 -0
  362. package/dist/provider/contexts.jsx.map +1 -0
  363. package/dist/provider/global-events.d.ts +8 -0
  364. package/dist/provider/global-events.d.ts.map +1 -0
  365. package/dist/provider/global-events.jsx +17 -0
  366. package/dist/provider/global-events.jsx.map +1 -0
  367. package/dist/provider/hooks.d.ts +49 -0
  368. package/dist/provider/hooks.d.ts.map +1 -0
  369. package/dist/provider/hooks.jsx +72 -0
  370. package/dist/provider/hooks.jsx.map +1 -0
  371. package/dist/provider/index.d.ts +5 -0
  372. package/dist/provider/index.d.ts.map +1 -0
  373. package/dist/provider/index.jsx +3 -0
  374. package/dist/provider/provider.css +18 -0
  375. package/dist/provider/provider.css.map +1 -0
  376. package/dist/provider/provider.d.ts +51 -0
  377. package/dist/provider/provider.d.ts.map +1 -0
  378. package/dist/provider/provider.jsx +290 -0
  379. package/dist/provider/provider.jsx.map +1 -0
  380. package/dist/provider/settings.d.ts +99 -0
  381. package/dist/provider/settings.d.ts.map +1 -0
  382. package/dist/provider/settings.jsx +45 -0
  383. package/dist/provider/settings.jsx.map +1 -0
  384. package/dist/provider/theme-css.d.ts +12 -0
  385. package/dist/provider/theme-css.d.ts.map +1 -0
  386. package/dist/provider/theme-css.jsx +19 -0
  387. package/dist/provider/theme-css.jsx.map +1 -0
  388. package/dist/provider/theme-root.d.ts +10 -0
  389. package/dist/provider/theme-root.d.ts.map +1 -0
  390. package/dist/provider/theme-root.jsx +24 -0
  391. package/dist/provider/theme-root.jsx.map +1 -0
  392. package/dist/provider/theme.css +473 -0
  393. package/dist/provider/theme.css.map +1 -0
  394. package/dist/range-slider/index.d.ts +3 -0
  395. package/dist/range-slider/index.d.ts.map +1 -0
  396. package/dist/range-slider/index.jsx +2 -0
  397. package/dist/range-slider/math.d.ts +23 -0
  398. package/dist/range-slider/math.d.ts.map +1 -0
  399. package/dist/range-slider/math.jsx +71 -0
  400. package/dist/range-slider/math.jsx.map +1 -0
  401. package/dist/range-slider/range-slider.css +90 -0
  402. package/dist/range-slider/range-slider.css.map +1 -0
  403. package/dist/range-slider/range-slider.d.ts +52 -0
  404. package/dist/range-slider/range-slider.d.ts.map +1 -0
  405. package/dist/range-slider/range-slider.jsx +159 -0
  406. package/dist/range-slider/range-slider.jsx.map +1 -0
  407. package/dist/selection/index.d.ts +5 -0
  408. package/dist/selection/index.d.ts.map +1 -0
  409. package/dist/selection/index.jsx +3 -0
  410. package/dist/selection/model.d.ts +53 -0
  411. package/dist/selection/model.d.ts.map +1 -0
  412. package/dist/selection/model.jsx +69 -0
  413. package/dist/selection/model.jsx.map +1 -0
  414. package/dist/selection/selection-sheet.d.ts +80 -0
  415. package/dist/selection/selection-sheet.d.ts.map +1 -0
  416. package/dist/selection/selection-sheet.jsx +366 -0
  417. package/dist/selection/selection-sheet.jsx.map +1 -0
  418. package/dist/selection/selection.css +76 -0
  419. package/dist/selection/selection.css.map +1 -0
  420. package/dist/selection/use-selection-model.d.ts +9 -0
  421. package/dist/selection/use-selection-model.d.ts.map +1 -0
  422. package/dist/selection/use-selection-model.jsx +22 -0
  423. package/dist/selection/use-selection-model.jsx.map +1 -0
  424. package/dist/sheet/frame.d.ts +47 -0
  425. package/dist/sheet/frame.d.ts.map +1 -0
  426. package/dist/sheet/frame.jsx +270 -0
  427. package/dist/sheet/frame.jsx.map +1 -0
  428. package/dist/sheet/gesture.d.ts +51 -0
  429. package/dist/sheet/gesture.d.ts.map +1 -0
  430. package/dist/sheet/gesture.jsx +107 -0
  431. package/dist/sheet/gesture.jsx.map +1 -0
  432. package/dist/sheet/handoff.d.ts +32 -0
  433. package/dist/sheet/handoff.d.ts.map +1 -0
  434. package/dist/sheet/handoff.jsx +33 -0
  435. package/dist/sheet/handoff.jsx.map +1 -0
  436. package/dist/sheet/header.d.ts +46 -0
  437. package/dist/sheet/header.d.ts.map +1 -0
  438. package/dist/sheet/header.jsx +158 -0
  439. package/dist/sheet/header.jsx.map +1 -0
  440. package/dist/sheet/height-memo.d.ts +47 -0
  441. package/dist/sheet/height-memo.d.ts.map +1 -0
  442. package/dist/sheet/height-memo.jsx +100 -0
  443. package/dist/sheet/height-memo.jsx.map +1 -0
  444. package/dist/sheet/index.d.ts +12 -0
  445. package/dist/sheet/index.d.ts.map +1 -0
  446. package/dist/sheet/index.jsx +11 -0
  447. package/dist/sheet/loadable.d.ts +35 -0
  448. package/dist/sheet/loadable.d.ts.map +1 -0
  449. package/dist/sheet/loadable.jsx +65 -0
  450. package/dist/sheet/loadable.jsx.map +1 -0
  451. package/dist/sheet/motion.d.ts +59 -0
  452. package/dist/sheet/motion.d.ts.map +1 -0
  453. package/dist/sheet/motion.jsx +59 -0
  454. package/dist/sheet/motion.jsx.map +1 -0
  455. package/dist/sheet/options.d.ts +252 -0
  456. package/dist/sheet/options.d.ts.map +1 -0
  457. package/dist/sheet/options.jsx +92 -0
  458. package/dist/sheet/options.jsx.map +1 -0
  459. package/dist/sheet/processing.d.ts +22 -0
  460. package/dist/sheet/processing.d.ts.map +1 -0
  461. package/dist/sheet/processing.jsx +66 -0
  462. package/dist/sheet/processing.jsx.map +1 -0
  463. package/dist/sheet/service.d.ts +55 -0
  464. package/dist/sheet/service.d.ts.map +1 -0
  465. package/dist/sheet/service.jsx +143 -0
  466. package/dist/sheet/service.jsx.map +1 -0
  467. package/dist/sheet/sheet.css +246 -0
  468. package/dist/sheet/sheet.css.map +1 -0
  469. package/dist/sheet/sheet.d.ts +19 -0
  470. package/dist/sheet/sheet.d.ts.map +1 -0
  471. package/dist/sheet/sheet.jsx +40 -0
  472. package/dist/sheet/sheet.jsx.map +1 -0
  473. package/dist/sheet/sizing.d.ts +87 -0
  474. package/dist/sheet/sizing.d.ts.map +1 -0
  475. package/dist/sheet/sizing.jsx +159 -0
  476. package/dist/sheet/sizing.jsx.map +1 -0
  477. package/dist/sheet/stack.d.ts +161 -0
  478. package/dist/sheet/stack.d.ts.map +1 -0
  479. package/dist/sheet/stack.jsx +378 -0
  480. package/dist/sheet/stack.jsx.map +1 -0
  481. package/dist/swipe/index.d.ts +3 -0
  482. package/dist/swipe/index.d.ts.map +1 -0
  483. package/dist/swipe/index.jsx +2 -0
  484. package/dist/swipe/model.d.ts +72 -0
  485. package/dist/swipe/model.d.ts.map +1 -0
  486. package/dist/swipe/model.jsx +66 -0
  487. package/dist/swipe/model.jsx.map +1 -0
  488. package/dist/swipe/swipe-view.d.ts +40 -0
  489. package/dist/swipe/swipe-view.d.ts.map +1 -0
  490. package/dist/swipe/swipe-view.jsx +163 -0
  491. package/dist/swipe/swipe-view.jsx.map +1 -0
  492. package/dist/swipe/swipe.css +34 -0
  493. package/dist/swipe/swipe.css.map +1 -0
  494. package/dist/tab-bar/index.d.ts +4 -0
  495. package/dist/tab-bar/index.d.ts.map +1 -0
  496. package/dist/tab-bar/index.jsx +3 -0
  497. package/dist/tab-bar/metrics.d.ts +230 -0
  498. package/dist/tab-bar/metrics.d.ts.map +1 -0
  499. package/dist/tab-bar/metrics.jsx +221 -0
  500. package/dist/tab-bar/metrics.jsx.map +1 -0
  501. package/dist/tab-bar/model.d.ts +170 -0
  502. package/dist/tab-bar/model.d.ts.map +1 -0
  503. package/dist/tab-bar/model.jsx +349 -0
  504. package/dist/tab-bar/model.jsx.map +1 -0
  505. package/dist/tab-bar/tab-bar.css +173 -0
  506. package/dist/tab-bar/tab-bar.css.map +1 -0
  507. package/dist/tab-bar/tab-bar.d.ts +61 -0
  508. package/dist/tab-bar/tab-bar.d.ts.map +1 -0
  509. package/dist/tab-bar/tab-bar.jsx +346 -0
  510. package/dist/tab-bar/tab-bar.jsx.map +1 -0
  511. package/dist/tabs/index.d.ts +3 -0
  512. package/dist/tabs/index.d.ts.map +1 -0
  513. package/dist/tabs/index.jsx +2 -0
  514. package/dist/tabs/model.d.ts +83 -0
  515. package/dist/tabs/model.d.ts.map +1 -0
  516. package/dist/tabs/model.jsx +113 -0
  517. package/dist/tabs/model.jsx.map +1 -0
  518. package/dist/tabs/tab-view.d.ts +47 -0
  519. package/dist/tabs/tab-view.d.ts.map +1 -0
  520. package/dist/tabs/tab-view.jsx +227 -0
  521. package/dist/tabs/tab-view.jsx.map +1 -0
  522. package/dist/tabs/tabs.css +182 -0
  523. package/dist/tabs/tabs.css.map +1 -0
  524. package/dist/toast/index.d.ts +3 -0
  525. package/dist/toast/index.d.ts.map +1 -0
  526. package/dist/toast/index.jsx +2 -0
  527. package/dist/toast/service.d.ts +48 -0
  528. package/dist/toast/service.d.ts.map +1 -0
  529. package/dist/toast/service.jsx +238 -0
  530. package/dist/toast/service.jsx.map +1 -0
  531. package/dist/toast/store.d.ts +176 -0
  532. package/dist/toast/store.d.ts.map +1 -0
  533. package/dist/toast/store.jsx +355 -0
  534. package/dist/toast/store.jsx.map +1 -0
  535. package/dist/toast/toast.css +159 -0
  536. package/dist/toast/toast.css.map +1 -0
  537. package/dist/toggle/checkbox-math.d.ts +52 -0
  538. package/dist/toggle/checkbox-math.d.ts.map +1 -0
  539. package/dist/toggle/checkbox-math.jsx +111 -0
  540. package/dist/toggle/checkbox-math.jsx.map +1 -0
  541. package/dist/toggle/checkbox.d.ts +56 -0
  542. package/dist/toggle/checkbox.d.ts.map +1 -0
  543. package/dist/toggle/checkbox.jsx +152 -0
  544. package/dist/toggle/checkbox.jsx.map +1 -0
  545. package/dist/toggle/chip-group.d.ts +50 -0
  546. package/dist/toggle/chip-group.d.ts.map +1 -0
  547. package/dist/toggle/chip-group.jsx +107 -0
  548. package/dist/toggle/chip-group.jsx.map +1 -0
  549. package/dist/toggle/index.d.ts +5 -0
  550. package/dist/toggle/index.d.ts.map +1 -0
  551. package/dist/toggle/index.jsx +4 -0
  552. package/dist/toggle/switch.d.ts +52 -0
  553. package/dist/toggle/switch.d.ts.map +1 -0
  554. package/dist/toggle/switch.jsx +192 -0
  555. package/dist/toggle/switch.jsx.map +1 -0
  556. package/dist/toggle/toggle.css +188 -0
  557. package/dist/toggle/toggle.css.map +1 -0
  558. package/package.json +155 -4
  559. package/rspeedy/index.d.ts +21 -0
  560. package/rspeedy/index.mjs +75 -0
  561. package/rspeedy/index.test.mjs +52 -0
@@ -0,0 +1,46 @@
1
+ import { type ReactNode } from '@lynx-js/react';
2
+ import type { G9SheetOptions } from './options.js';
3
+ /** Header metrics (MAUI `G9LayoutMetrics` sheet header values). */
4
+ export declare const g9SheetHeaderMetrics: Readonly<{
5
+ minHeight: 64;
6
+ verticalGap: 10;
7
+ bodyTopGap: 10;
8
+ backButton: 30;
9
+ backGlyph: 24;
10
+ backHitSlop: 7;
11
+ titleSize: 16.2;
12
+ footerMaxButtonsPerRow: 3;
13
+ }>;
14
+ /** Props of {@link G9SheetHeader}. */
15
+ export interface G9SheetHeaderProps {
16
+ readonly options: G9SheetOptions;
17
+ /** The leading button (MAUI back request with source `toolbarButton`). */
18
+ readonly onBack: () => void;
19
+ }
20
+ /**
21
+ * The three-slot sheet header (MAUI header template): leading back/close button (RTL-aware arrow, or × with
22
+ * `useCloseIcon`), the title (centre or near the back button), the trailing toolbar items; slot overrides
23
+ * `headerView` > `headerLeadingAndTitleView` > `headerTitleAndTrailingView` > per-slot views > defaults. A hairline
24
+ * closes the band. Rendered only with `showToolbar`.
25
+ */
26
+ export declare function G9SheetHeader(props: G9SheetHeaderProps): ReactNode;
27
+ /** Props of {@link G9SheetFooter}. */
28
+ export interface G9SheetFooterProps {
29
+ readonly options: G9SheetOptions;
30
+ }
31
+ /** Rows of footer buttons: equal-width columns, wrapping every `perRow` (MAUI footer template). */
32
+ export declare function footerRows<T>(buttons: ReadonlyArray<T>, perRow: number): T[][];
33
+ /** The sheet footer: `footerBand`, else `footerView` in the band, else `footerButtons` in equal columns (3 per row by default), with a divider. */
34
+ export declare function G9SheetFooter(props: G9SheetFooterProps): ReactNode;
35
+ /** Props of {@link G9SheetFooterBar}. */
36
+ export interface G9SheetFooterBarProps {
37
+ readonly buttons: ReadonlyArray<ReactNode>;
38
+ /** Default 3. */
39
+ readonly maxButtonsPerRow?: number;
40
+ }
41
+ /**
42
+ * The footer band (divider, padding, equal-width button columns); nothing at all without buttons (MAUI
43
+ * `SheetFooterBar` hides with no visible button). Render it from a `footerBand` whose buttons come and go.
44
+ */
45
+ export declare function G9SheetFooterBar(props: G9SheetFooterBarProps): ReactNode;
46
+ //# sourceMappingURL=header.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../src/sheet/header.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,SAAS,EAAY,MAAM,gBAAgB,CAAC;AAM1D,OAAO,KAAK,EAAE,cAAc,EAAsB,MAAM,WAAW,CAAC;AAEpE,mEAAmE;AACnE,eAAO,MAAM,oBAAoB;;;;;;;;;EAS/B,CAAC;AAkCH,sCAAsC;AACtC,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,0EAA0E;IAC1E,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,SAAS,CAgIlE;AAED,sCAAsC;AACtC,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;CAClC;AAED,mGAAmG;AACnG,wBAAgB,UAAU,CAAC,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE,EAAE,CAK9E;AAED,mJAAmJ;AACnJ,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,SAAS,CAUlE;AAED,yCAAyC;AACzC,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IAC3C,iBAAiB;IACjB,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,SAAS,CAkBxE"}
@@ -0,0 +1,158 @@
1
+ import { G9StringKey, formatColor, withAlpha } from "@g9tm/lynxcontrols-foundation";
2
+ import { useState } from "@lynx-js/react";
3
+ import { g9ChildId, g9IdProps, g9RowStyle, g9SafeId } from "../base/control.jsx";
4
+ import { useG9Press } from "../base/press.jsx";
5
+ import { G9HeaderActionButton } from "../button/header-action-button.jsx";
6
+ import { G9IconSlot } from "../icon/slot.jsx";
7
+ import { useG9Direction, useG9Settings, useG9Strings, useG9Theme } from "../provider/hooks.jsx";
8
+ const g9SheetHeaderMetrics = Object.freeze({
9
+ minHeight: 64,
10
+ verticalGap: 10,
11
+ bodyTopGap: 10,
12
+ backButton: 30,
13
+ backGlyph: 24,
14
+ backHitSlop: 7,
15
+ titleSize: 16.2,
16
+ footerMaxButtonsPerRow: 3
17
+ });
18
+ function ToolbarItemButton(props) {
19
+ var _item_accessibilityLabel;
20
+ const { item } = props;
21
+ const [running, setRunning] = useState(false);
22
+ const busy = true === item.isBusy || running;
23
+ const onPress = ()=>{
24
+ var _item_onPress;
25
+ if (busy && false !== item.disableWhileBusy) return;
26
+ const result = null == (_item_onPress = item.onPress) ? void 0 : _item_onPress.call(item);
27
+ if (result && 'function' == typeof result.then) {
28
+ setRunning(true);
29
+ result.then(()=>setRunning(false), ()=>setRunning(false));
30
+ }
31
+ };
32
+ return <G9HeaderActionButton {...void 0 !== item.icon ? {
33
+ icon: item.icon
34
+ } : item.text ? {
35
+ buttonText: item.text
36
+ } : {}} isBusy={busy && true === item.showBusyIndicator} isActive={true === item.isActive} showActiveBadge={true === item.showActiveBadge} animatePress={false !== item.animatePress} {...item.iconSize ? {
37
+ iconSize: item.iconSize
38
+ } : {}} {...item.accessibilityLabel || item.text ? {
39
+ accessibilityLabel: null != (_item_accessibilityLabel = item.accessibilityLabel) ? _item_accessibilityLabel : item.text
40
+ } : {}} {...g9IdProps(props.id)} disabled={busy && false !== item.disableWhileBusy && true !== item.showBusyIndicator} onPress={onPress}/>;
41
+ }
42
+ function G9SheetHeader(props) {
43
+ var _o_headerLeadingView, _o_headerTitleView, _ref, _o_toolbarItems, _o_headerTrailingView, _o_headerTitlePlacement;
44
+ var _o_toolbarItemsFactory;
45
+ const o = props.options;
46
+ const direction = useG9Direction();
47
+ const settings = useG9Settings();
48
+ const glyphs = settings.glyphs;
49
+ const palette = useG9Theme().palette;
50
+ const strings = useG9Strings();
51
+ const back = useG9Press(props.onBack, {
52
+ source: 'G9SheetHeader'
53
+ });
54
+ if (true !== o.showToolbar) return null;
55
+ if (void 0 !== o.headerView && null !== o.headerView) return <view className="g9-sheet-header g9-sheet-header--custom">{o.headerView}</view>;
56
+ const m = g9SheetHeaderMetrics;
57
+ const leading = null != (_o_headerLeadingView = o.headerLeadingView) ? _o_headerLeadingView : o.showCloseButton ? <view className="g9-sheet-header__back" {...g9IdProps(g9ChildId(o.automationId, 'Back'))} style={{
58
+ width: `${m.backButton}px`,
59
+ height: `${m.backButton}px`,
60
+ ...g9RowStyle(direction)
61
+ }} accessibility-element={true} accessibility-traits="button" accessibility-label={o.useCloseIcon ? strings.get(G9StringKey.Close) : strings.get(G9StringKey.Back)} hit-slop={{
62
+ top: `${m.backHitSlop}px`,
63
+ left: `${m.backHitSlop}px`,
64
+ right: `${m.backHitSlop}px`,
65
+ bottom: `${m.backHitSlop}px`
66
+ }} bindtap={back}>
67
+ <G9IconSlot icon={o.useCloseIcon ? glyphs.clear : 'rtl' === direction ? glyphs.arrowForward : glyphs.arrowBack} size={m.backGlyph} color="var(--g9-secondary)"/>
68
+ </view> : null;
69
+ const title = null != (_o_headerTitleView = o.headerTitleView) ? _o_headerTitleView : o.title ? <text className="g9-sheet-header__title" text-maxline="1" style={{
70
+ fontSize: `${m.titleSize}px`
71
+ }}>
72
+ {o.title}
73
+ </text> : null;
74
+ const items = null != (_ref = null != (_o_toolbarItems = o.toolbarItems) ? _o_toolbarItems : null == (_o_toolbarItemsFactory = o.toolbarItemsFactory) ? void 0 : _o_toolbarItemsFactory.call(o)) ? _ref : [];
75
+ const trailing = null != (_o_headerTrailingView = o.headerTrailingView) ? _o_headerTrailingView : items.length > 0 ? <view className="g9-sheet-header__items" style={g9RowStyle(direction)}>
76
+ {items.map((item, i)=>{
77
+ var _item_key, _item_key1;
78
+ return <ToolbarItemButton key={null != (_item_key = item.key) ? _item_key : String(i)} item={item} id={item.automationId ? g9SafeId(item.automationId) : g9ChildId(o.automationId, `ToolbarItem_${null != (_item_key1 = item.key) ? _item_key1 : i}`)}/>;
79
+ })}
80
+ </view> : null;
81
+ const spanned = null != o.headerLeadingAndTitleView || null != o.headerTitleAndTrailingView;
82
+ const center = (null != (_o_headerTitlePlacement = o.headerTitlePlacement) ? _o_headerTitlePlacement : 'center') === 'center' && false !== o.reserveEmptyHeaderSlots && !spanned;
83
+ let slots;
84
+ slots = null != o.headerLeadingAndTitleView ? [
85
+ <view key="lt" className="g9-sheet-header__grow" style={g9RowStyle(direction)}>
86
+ {o.headerLeadingAndTitleView}
87
+ </view>,
88
+ <view key="t" className="g9-sheet-header__end">
89
+ {trailing}
90
+ </view>
91
+ ] : null != o.headerTitleAndTrailingView ? [
92
+ <view key="l" className="g9-sheet-header__start">
93
+ {leading}
94
+ </view>,
95
+ <view key="tt" className="g9-sheet-header__grow" style={g9RowStyle(direction)}>
96
+ {o.headerTitleAndTrailingView}
97
+ </view>
98
+ ] : center ? [
99
+ <view key="l" className="g9-sheet-header__side g9-sheet-header__start" style={g9RowStyle(direction)}>
100
+ {leading}
101
+ </view>,
102
+ <view key="t" className="g9-sheet-header__title-slot">
103
+ {title}
104
+ </view>,
105
+ <view key="r" className="g9-sheet-header__side g9-sheet-header__end" style={g9RowStyle(direction)}>
106
+ {trailing}
107
+ </view>
108
+ ] : [
109
+ <view key="l" className="g9-sheet-header__start">
110
+ {leading}
111
+ </view>,
112
+ <view key="t" className="g9-sheet-header__grow g9-sheet-header__title-near" style={g9RowStyle(direction)}>
113
+ {title}
114
+ </view>,
115
+ <view key="r" className="g9-sheet-header__end">
116
+ {trailing}
117
+ </view>
118
+ ];
119
+ return <view className={`g9-sheet-header g9-dir-${direction}`} style={{
120
+ minHeight: `${m.minHeight + 1}px`,
121
+ paddingLeft: `${settings.sheets.headerEdgeSpacing}px`,
122
+ paddingRight: `${settings.sheets.headerEdgeSpacing}px`,
123
+ borderBottomColor: formatColor(withAlpha(palette.OutlineVariant, 0.35)),
124
+ ...g9RowStyle(direction)
125
+ }}>
126
+ {slots}
127
+ </view>;
128
+ }
129
+ function footerRows(buttons, perRow) {
130
+ const n = Math.max(1, Math.floor(perRow));
131
+ const rows = [];
132
+ for(let i = 0; i < buttons.length; i += n)rows.push(buttons.slice(i, i + n));
133
+ return rows;
134
+ }
135
+ function G9SheetFooter(props) {
136
+ var _o_footerButtons;
137
+ const o = props.options;
138
+ if (null != o.footerBand) return o.footerBand;
139
+ if (null != o.footerView) return <view className="g9-sheet-footer">{o.footerView}</view>;
140
+ return <G9SheetFooterBar buttons={null != (_o_footerButtons = o.footerButtons) ? _o_footerButtons : []} {...void 0 !== o.footerMaxButtonsPerRow ? {
141
+ maxButtonsPerRow: o.footerMaxButtonsPerRow
142
+ } : {}}/>;
143
+ }
144
+ function G9SheetFooterBar(props) {
145
+ var _props_maxButtonsPerRow;
146
+ const direction = useG9Direction();
147
+ if (0 === props.buttons.length) return null;
148
+ return <view className="g9-sheet-footer">
149
+ {footerRows(props.buttons, null != (_props_maxButtonsPerRow = props.maxButtonsPerRow) ? _props_maxButtonsPerRow : g9SheetHeaderMetrics.footerMaxButtonsPerRow).map((row, r)=><view key={r} className="g9-sheet-footer__row" style={g9RowStyle(direction)}>
150
+ {row.map((button, i)=><view key={i} className="g9-sheet-footer__cell">
151
+ {button}
152
+ </view>)}
153
+ </view>)}
154
+ </view>;
155
+ }
156
+ export { G9SheetFooter, G9SheetFooterBar, G9SheetHeader, footerRows, g9SheetHeaderMetrics };
157
+
158
+ //# sourceMappingURL=header.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sheet/header.jsx","sources":["../../src/sheet/header.tsx"],"sourcesContent":["import { formatColor, G9StringKey, withAlpha } from '@g9tm/lynxcontrols-foundation';\nimport { type ReactNode, useState } from '@lynx-js/react';\nimport { g9ChildId, g9IdProps, g9RowStyle, g9SafeId } from '../base/control';\nimport { useG9Press } from '../base/press';\nimport { G9HeaderActionButton } from '../button/header-action-button';\nimport { G9IconSlot } from '../icon/slot';\nimport { useG9Direction, useG9Settings, useG9Strings, useG9Theme } from '../provider/hooks';\nimport type { G9SheetOptions, G9SheetToolbarItem } from './options';\n\n/** Header metrics (MAUI `G9LayoutMetrics` sheet header values). */\nexport const g9SheetHeaderMetrics = Object.freeze({\n minHeight: 64,\n verticalGap: 10,\n bodyTopGap: 10,\n backButton: 30,\n backGlyph: 24,\n backHitSlop: 7,\n titleSize: 16.2,\n footerMaxButtonsPerRow: 3,\n});\n\nfunction ToolbarItemButton(props: { readonly item: G9SheetToolbarItem; readonly id: string | undefined }): ReactNode {\n const { item } = props;\n const [running, setRunning] = useState(false);\n const busy = item.isBusy === true || running;\n const onPress = () => {\n if (busy && item.disableWhileBusy !== false) return;\n const result = item.onPress?.();\n if (result && typeof (result as PromiseLike<unknown>).then === 'function') {\n setRunning(true);\n (result as PromiseLike<unknown>).then(\n () => setRunning(false),\n () => setRunning(false),\n );\n }\n };\n return (\n <G9HeaderActionButton\n // MAUI ApplyVisualState: an icon wins and the text is not shown (it stays the accessibility label).\n {...(item.icon !== undefined ? { icon: item.icon } : item.text ? { buttonText: item.text } : {})}\n isBusy={busy && item.showBusyIndicator === true}\n isActive={item.isActive === true}\n showActiveBadge={item.showActiveBadge === true}\n animatePress={item.animatePress !== false}\n {...(item.iconSize ? { iconSize: item.iconSize } : {})}\n {...(item.accessibilityLabel || item.text ? { accessibilityLabel: item.accessibilityLabel ?? item.text } : {})}\n {...g9IdProps(props.id)}\n disabled={busy && item.disableWhileBusy !== false && item.showBusyIndicator !== true}\n onPress={onPress}\n />\n );\n}\n\n/** Props of {@link G9SheetHeader}. */\nexport interface G9SheetHeaderProps {\n readonly options: G9SheetOptions;\n /** The leading button (MAUI back request with source `toolbarButton`). */\n readonly onBack: () => void;\n}\n\n/**\n * The three-slot sheet header (MAUI header template): leading back/close button (RTL-aware arrow, or × with\n * `useCloseIcon`), the title (centre or near the back button), the trailing toolbar items; slot overrides\n * `headerView` > `headerLeadingAndTitleView` > `headerTitleAndTrailingView` > per-slot views > defaults. A hairline\n * closes the band. Rendered only with `showToolbar`.\n */\nexport function G9SheetHeader(props: G9SheetHeaderProps): ReactNode {\n const o = props.options;\n const direction = useG9Direction();\n const settings = useG9Settings();\n const glyphs = settings.glyphs;\n const palette = useG9Theme().palette;\n const strings = useG9Strings();\n const back = useG9Press(props.onBack, { source: 'G9SheetHeader' });\n if (o.showToolbar !== true) return null;\n if (o.headerView !== undefined && o.headerView !== null) {\n return <view className=\"g9-sheet-header g9-sheet-header--custom\">{o.headerView}</view>;\n }\n const m = g9SheetHeaderMetrics;\n const leading =\n o.headerLeadingView ??\n (o.showCloseButton ? (\n <view\n className=\"g9-sheet-header__back\"\n {...g9IdProps(g9ChildId(o.automationId, 'Back'))}\n // MAUI: the glyph sits at the reading START of its 30 dp box (HorizontalOptions.Start), not centred.\n style={{ width: `${m.backButton}px`, height: `${m.backButton}px`, ...g9RowStyle(direction) }}\n accessibility-element={true}\n accessibility-traits=\"button\"\n accessibility-label={o.useCloseIcon ? strings.get(G9StringKey.Close) : strings.get(G9StringKey.Back)}\n hit-slop={{\n top: `${m.backHitSlop}px`,\n left: `${m.backHitSlop}px`,\n right: `${m.backHitSlop}px`,\n bottom: `${m.backHitSlop}px`,\n }}\n bindtap={back}\n >\n <G9IconSlot\n icon={o.useCloseIcon ? glyphs.clear : direction === 'rtl' ? glyphs.arrowForward : glyphs.arrowBack}\n size={m.backGlyph}\n color=\"var(--g9-secondary)\"\n />\n </view>\n ) : null);\n const title =\n o.headerTitleView ??\n (o.title ? (\n <text className=\"g9-sheet-header__title\" text-maxline=\"1\" style={{ fontSize: `${m.titleSize}px` }}>\n {o.title}\n </text>\n ) : null);\n const items = o.toolbarItems ?? o.toolbarItemsFactory?.() ?? [];\n const trailing =\n o.headerTrailingView ??\n (items.length > 0 ? (\n <view className=\"g9-sheet-header__items\" style={g9RowStyle(direction)}>\n {items.map((item, i) => (\n <ToolbarItemButton\n key={item.key ?? String(i)}\n item={item}\n id={\n item.automationId\n ? g9SafeId(item.automationId)\n : g9ChildId(o.automationId, `ToolbarItem_${item.key ?? i}`)\n }\n />\n ))}\n </view>\n ) : null);\n const spanned = o.headerLeadingAndTitleView != null || o.headerTitleAndTrailingView != null;\n const center = (o.headerTitlePlacement ?? 'center') === 'center' && o.reserveEmptyHeaderSlots !== false && !spanned;\n let slots: ReactNode;\n if (o.headerLeadingAndTitleView != null) {\n slots = [\n <view key=\"lt\" className=\"g9-sheet-header__grow\" style={g9RowStyle(direction)}>\n {o.headerLeadingAndTitleView}\n </view>,\n <view key=\"t\" className=\"g9-sheet-header__end\">\n {trailing}\n </view>,\n ];\n } else if (o.headerTitleAndTrailingView != null) {\n slots = [\n <view key=\"l\" className=\"g9-sheet-header__start\">\n {leading}\n </view>,\n <view key=\"tt\" className=\"g9-sheet-header__grow\" style={g9RowStyle(direction)}>\n {o.headerTitleAndTrailingView}\n </view>,\n ];\n } else if (center) {\n slots = [\n // The side slots follow the reading direction too: in RTL the back button sits at the right EDGE, the trailing\n // items at the left edge (MAUI) — not against the centred title.\n <view key=\"l\" className=\"g9-sheet-header__side g9-sheet-header__start\" style={g9RowStyle(direction)}>\n {leading}\n </view>,\n <view key=\"t\" className=\"g9-sheet-header__title-slot\">\n {title}\n </view>,\n <view key=\"r\" className=\"g9-sheet-header__side g9-sheet-header__end\" style={g9RowStyle(direction)}>\n {trailing}\n </view>,\n ];\n } else {\n slots = [\n <view key=\"l\" className=\"g9-sheet-header__start\">\n {leading}\n </view>,\n // The grow slot follows the reading direction: in RTL a near-back title hugs the back button (right edge).\n <view key=\"t\" className=\"g9-sheet-header__grow g9-sheet-header__title-near\" style={g9RowStyle(direction)}>\n {title}\n </view>,\n <view key=\"r\" className=\"g9-sheet-header__end\">\n {trailing}\n </view>,\n ];\n }\n return (\n <view\n className={`g9-sheet-header g9-dir-${direction}`}\n style={{\n // The 64 dp band, then MAUI's 1 dp divider UNDER it (OutlineVariant @ 35 %), not inside it.\n minHeight: `${m.minHeight + 1}px`,\n paddingLeft: `${settings.sheets.headerEdgeSpacing}px`,\n paddingRight: `${settings.sheets.headerEdgeSpacing}px`,\n borderBottomColor: formatColor(withAlpha(palette.OutlineVariant, 0.35)),\n ...g9RowStyle(direction),\n }}\n >\n {slots}\n </view>\n );\n}\n\n/** Props of {@link G9SheetFooter}. */\nexport interface G9SheetFooterProps {\n readonly options: G9SheetOptions;\n}\n\n/** Rows of footer buttons: equal-width columns, wrapping every `perRow` (MAUI footer template). */\nexport function footerRows<T>(buttons: ReadonlyArray<T>, perRow: number): T[][] {\n const n = Math.max(1, Math.floor(perRow));\n const rows: T[][] = [];\n for (let i = 0; i < buttons.length; i += n) rows.push(buttons.slice(i, i + n));\n return rows;\n}\n\n/** The sheet footer: `footerBand`, else `footerView` in the band, else `footerButtons` in equal columns (3 per row by default), with a divider. */\nexport function G9SheetFooter(props: G9SheetFooterProps): ReactNode {\n const o = props.options;\n if (o.footerBand != null) return o.footerBand;\n if (o.footerView != null) return <view className=\"g9-sheet-footer\">{o.footerView}</view>;\n return (\n <G9SheetFooterBar\n buttons={o.footerButtons ?? []}\n {...(o.footerMaxButtonsPerRow !== undefined ? { maxButtonsPerRow: o.footerMaxButtonsPerRow } : {})}\n />\n );\n}\n\n/** Props of {@link G9SheetFooterBar}. */\nexport interface G9SheetFooterBarProps {\n readonly buttons: ReadonlyArray<ReactNode>;\n /** Default 3. */\n readonly maxButtonsPerRow?: number;\n}\n\n/**\n * The footer band (divider, padding, equal-width button columns); nothing at all without buttons (MAUI\n * `SheetFooterBar` hides with no visible button). Render it from a `footerBand` whose buttons come and go.\n */\nexport function G9SheetFooterBar(props: G9SheetFooterBarProps): ReactNode {\n const direction = useG9Direction();\n if (props.buttons.length === 0) return null;\n return (\n <view className=\"g9-sheet-footer\">\n {footerRows(props.buttons, props.maxButtonsPerRow ?? g9SheetHeaderMetrics.footerMaxButtonsPerRow).map(\n (row, r) => (\n <view key={r} className=\"g9-sheet-footer__row\" style={g9RowStyle(direction)}>\n {row.map((button, i) => (\n <view key={i} className=\"g9-sheet-footer__cell\">\n {button}\n </view>\n ))}\n </view>\n ),\n )}\n </view>\n );\n}\n"],"names":["g9SheetHeaderMetrics","Object","ToolbarItemButton","props","_item_accessibilityLabel","item","running","setRunning","useState","busy","onPress","result","G9HeaderActionButton","undefined","g9IdProps","G9SheetHeader","_o_headerLeadingView","_o_headerTitleView","_ref","_o_headerTrailingView","_o_headerTitlePlacement","o","direction","useG9Direction","settings","useG9Settings","glyphs","palette","useG9Theme","strings","useG9Strings","back","useG9Press","view","m","leading","g9ChildId","g9RowStyle","G9StringKey","G9IconSlot","title","text","items","trailing","i","_item_key","_item_key1","String","g9SafeId","spanned","center","slots","formatColor","withAlpha","footerRows","buttons","perRow","n","Math","rows","G9SheetFooter","_o_footerButtons","G9SheetFooterBar","_props_maxButtonsPerRow","row","r","button"],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /** Most learned heights kept (MAUI 64). */
2
+ export declare const g9SheetHeightMemoLimit = 64;
3
+ /** Preference key of the persisted memo. */
4
+ export declare const g9SheetHeightMemoPreferenceKey = "sheet-heights";
5
+ /** The memo key of a sheet body. */
6
+ export declare function sheetHeightMemoKey(identity: string, width: number, culture: string, fontScale: number): string;
7
+ /** Compiled-in first-open heights (MAUI `G9BottomSheetHeightSeeds`); never persisted. */
8
+ export interface G9SheetHeightSeeds {
9
+ /** Sets (or replaces) the seed of a memo key or bare identity; blank keys and heights ≤ 0 are ignored. */
10
+ seed(key: string, bodyHeight: number): void;
11
+ /** Exact key first, then the identity alone (the last three `|` segments stripped). */
12
+ tryGet(key: string): number | undefined;
13
+ reset(): void;
14
+ }
15
+ /** Creates a seed table. */
16
+ export declare function createSheetHeightSeeds(): G9SheetHeightSeeds;
17
+ /** The learned heights (MAUI `G9BottomSheetHeightMemoStore`). */
18
+ export interface G9SheetHeightMemo {
19
+ /** Learned height, else the seed. */
20
+ lookup(key: string): number | undefined;
21
+ /** Records a real body measurement; ≤ 0 is ignored, a change < 0.5 is skipped; the oldest key is evicted at 64. */
22
+ record(key: string, bodyHeight: number): void;
23
+ /** Forgets every learned height (theme/font change). */
24
+ invalidate(): void;
25
+ readonly size: number;
26
+ /** Writes the memo to preferences now. */
27
+ flush(): void;
28
+ }
29
+ /** The synchronous preference reads/writes the memo needs (`useG9Preferences()` provides them). */
30
+ export interface G9SheetMemoPreferences {
31
+ getString(key: string, defaultValue?: string | null): string | null;
32
+ setString(key: string, value: string): unknown;
33
+ }
34
+ /** Options of {@link createSheetHeightMemo}. */
35
+ export interface G9SheetHeightMemoOptions {
36
+ readonly seeds?: G9SheetHeightSeeds;
37
+ /** Persists under {@link g9SheetHeightMemoPreferenceKey}; a different `appVersion` discards the stored memo. */
38
+ readonly preferences?: G9SheetMemoPreferences;
39
+ readonly appVersion?: string;
40
+ /** Debounced flush (ms). Default 3000. */
41
+ readonly flushDelayMs?: number;
42
+ readonly setTimer?: (callback: () => void, ms: number) => unknown;
43
+ readonly clearTimer?: (handle: unknown) => void;
44
+ }
45
+ /** Creates a height memo (lazy load from preferences on first use, debounced flush). */
46
+ export declare function createSheetHeightMemo(options?: G9SheetHeightMemoOptions): G9SheetHeightMemo;
47
+ //# sourceMappingURL=height-memo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"height-memo.d.ts","sourceRoot":"","sources":["../../src/sheet/height-memo.ts"],"names":[],"mappings":"AAIA,2CAA2C;AAC3C,eAAO,MAAM,sBAAsB,KAAK,CAAC;AACzC,4CAA4C;AAC5C,eAAO,MAAM,8BAA8B,kBAAkB,CAAC;AAE9D,oCAAoC;AACpC,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE9G;AAED,yFAAyF;AACzF,MAAM,WAAW,kBAAkB;IACjC,0GAA0G;IAC1G,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,uFAAuF;IACvF,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACxC,KAAK,IAAI,IAAI,CAAC;CACf;AAED,4BAA4B;AAC5B,wBAAgB,sBAAsB,IAAI,kBAAkB,CAkB3D;AAED,iEAAiE;AACjE,MAAM,WAAW,iBAAiB;IAChC,qCAAqC;IACrC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACxC,mHAAmH;IACnH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9C,wDAAwD;IACxD,UAAU,IAAI,IAAI,CAAC;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,0CAA0C;IAC1C,KAAK,IAAI,IAAI,CAAC;CACf;AAED,mGAAmG;AACnG,MAAM,WAAW,sBAAsB;IACrC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;IACpE,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAChD;AAED,gDAAgD;AAChD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,KAAK,CAAC,EAAE,kBAAkB,CAAC;IACpC,gHAAgH;IAChH,QAAQ,CAAC,WAAW,CAAC,EAAE,sBAAsB,CAAC;IAC9C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,0CAA0C;IAC1C,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;IAClE,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CACjD;AAED,wFAAwF;AACxF,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,wBAA6B,GAAG,iBAAiB,CA4D/F"}
@@ -0,0 +1,100 @@
1
+ const g9SheetHeightMemoLimit = 64;
2
+ const g9SheetHeightMemoPreferenceKey = 'sheet-heights';
3
+ function sheetHeightMemoKey(identity, width, culture, fontScale) {
4
+ return `${identity}|w${Math.round(width)}|${culture}|fs${fontScale}`;
5
+ }
6
+ function createSheetHeightSeeds() {
7
+ const seeds = new Map();
8
+ return {
9
+ seed (key, bodyHeight) {
10
+ if (!key || '' === key.trim() || !(bodyHeight > 0)) return;
11
+ seeds.set(key, bodyHeight);
12
+ },
13
+ tryGet (key) {
14
+ const exact = seeds.get(key);
15
+ if (void 0 !== exact) return exact;
16
+ const parts = key.split('|');
17
+ if (parts.length < 4) return;
18
+ return seeds.get(parts.slice(0, parts.length - 3).join('|'));
19
+ },
20
+ reset () {
21
+ seeds.clear();
22
+ }
23
+ };
24
+ }
25
+ function createSheetHeightMemo(options = {}) {
26
+ var _options_appVersion;
27
+ const entries = new Map();
28
+ const header = `v1\t${null != (_options_appVersion = options.appVersion) ? _options_appVersion : '0'}`;
29
+ let loaded = false;
30
+ let timer = null;
31
+ const prefs = options.preferences;
32
+ const load = ()=>{
33
+ var _prefs_getString;
34
+ if (loaded) return;
35
+ loaded = true;
36
+ if (!prefs) return;
37
+ const blob = null != (_prefs_getString = prefs.getString(g9SheetHeightMemoPreferenceKey, '')) ? _prefs_getString : '';
38
+ const lines = blob.split('\n');
39
+ if (lines[0] !== header) return;
40
+ for (const line of lines.slice(1)){
41
+ const tab = line.lastIndexOf('\t');
42
+ if (tab <= 0) continue;
43
+ const height = Number(line.slice(tab + 1));
44
+ if (height > 0) entries.set(line.slice(0, tab), height);
45
+ }
46
+ };
47
+ const flush = ()=>{
48
+ var _options_clearTimer;
49
+ if (null !== timer) null == (_options_clearTimer = options.clearTimer) || _options_clearTimer.call(options, timer);
50
+ timer = null;
51
+ if (!prefs) return;
52
+ const body = [
53
+ ...entries
54
+ ].map(([k, h])=>`${k}\t${Math.round(10 * h) / 10}`);
55
+ prefs.setString(g9SheetHeightMemoPreferenceKey, [
56
+ header,
57
+ ...body
58
+ ].join('\n'));
59
+ };
60
+ const schedule = ()=>{
61
+ var _options_flushDelayMs;
62
+ var _options_clearTimer;
63
+ if (!prefs || !options.setTimer) return;
64
+ if (null !== timer) null == (_options_clearTimer = options.clearTimer) || _options_clearTimer.call(options, timer);
65
+ timer = options.setTimer(flush, null != (_options_flushDelayMs = options.flushDelayMs) ? _options_flushDelayMs : 3000);
66
+ };
67
+ return {
68
+ lookup (key) {
69
+ var _entries_get;
70
+ var _options_seeds;
71
+ load();
72
+ return null != (_entries_get = entries.get(key)) ? _entries_get : null == (_options_seeds = options.seeds) ? void 0 : _options_seeds.tryGet(key);
73
+ },
74
+ record (key, bodyHeight) {
75
+ load();
76
+ if (!(bodyHeight > 0)) return;
77
+ const old = entries.get(key);
78
+ if (void 0 !== old && Math.abs(old - bodyHeight) < 0.5) return;
79
+ if (void 0 === old && entries.size >= g9SheetHeightMemoLimit) {
80
+ const first = entries.keys().next().value;
81
+ entries.delete(first);
82
+ }
83
+ entries.set(key, bodyHeight);
84
+ schedule();
85
+ },
86
+ invalidate () {
87
+ load();
88
+ entries.clear();
89
+ schedule();
90
+ },
91
+ get size () {
92
+ load();
93
+ return entries.size;
94
+ },
95
+ flush
96
+ };
97
+ }
98
+ export { createSheetHeightMemo, createSheetHeightSeeds, g9SheetHeightMemoLimit, g9SheetHeightMemoPreferenceKey, sheetHeightMemoKey };
99
+
100
+ //# sourceMappingURL=height-memo.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sheet/height-memo.jsx","sources":["../../src/sheet/height-memo.ts"],"sourcesContent":["// MAUI `G9BottomSheetHeightSeeds` + `G9BottomSheetHeightMemoStore`: first-open body heights for deferred sheets.\n// Keys are `{identity}|w{width}|{culture}|fs{fontScale}`, so a viewport, language or font-size change misses and\n// re-measures; `invalidate()` clears the learned heights (theme or font change).\n\n/** Most learned heights kept (MAUI 64). */\nexport const g9SheetHeightMemoLimit = 64;\n/** Preference key of the persisted memo. */\nexport const g9SheetHeightMemoPreferenceKey = 'sheet-heights';\n\n/** The memo key of a sheet body. */\nexport function sheetHeightMemoKey(identity: string, width: number, culture: string, fontScale: number): string {\n return `${identity}|w${Math.round(width)}|${culture}|fs${fontScale}`;\n}\n\n/** Compiled-in first-open heights (MAUI `G9BottomSheetHeightSeeds`); never persisted. */\nexport interface G9SheetHeightSeeds {\n /** Sets (or replaces) the seed of a memo key or bare identity; blank keys and heights ≤ 0 are ignored. */\n seed(key: string, bodyHeight: number): void;\n /** Exact key first, then the identity alone (the last three `|` segments stripped). */\n tryGet(key: string): number | undefined;\n reset(): void;\n}\n\n/** Creates a seed table. */\nexport function createSheetHeightSeeds(): G9SheetHeightSeeds {\n const seeds = new Map<string, number>();\n return {\n seed(key, bodyHeight) {\n if (!key || key.trim() === '' || !(bodyHeight > 0)) return;\n seeds.set(key, bodyHeight);\n },\n tryGet(key) {\n const exact = seeds.get(key);\n if (exact !== undefined) return exact;\n const parts = key.split('|');\n if (parts.length < 4) return undefined;\n return seeds.get(parts.slice(0, parts.length - 3).join('|'));\n },\n reset() {\n seeds.clear();\n },\n };\n}\n\n/** The learned heights (MAUI `G9BottomSheetHeightMemoStore`). */\nexport interface G9SheetHeightMemo {\n /** Learned height, else the seed. */\n lookup(key: string): number | undefined;\n /** Records a real body measurement; ≤ 0 is ignored, a change < 0.5 is skipped; the oldest key is evicted at 64. */\n record(key: string, bodyHeight: number): void;\n /** Forgets every learned height (theme/font change). */\n invalidate(): void;\n readonly size: number;\n /** Writes the memo to preferences now. */\n flush(): void;\n}\n\n/** The synchronous preference reads/writes the memo needs (`useG9Preferences()` provides them). */\nexport interface G9SheetMemoPreferences {\n getString(key: string, defaultValue?: string | null): string | null;\n setString(key: string, value: string): unknown;\n}\n\n/** Options of {@link createSheetHeightMemo}. */\nexport interface G9SheetHeightMemoOptions {\n readonly seeds?: G9SheetHeightSeeds;\n /** Persists under {@link g9SheetHeightMemoPreferenceKey}; a different `appVersion` discards the stored memo. */\n readonly preferences?: G9SheetMemoPreferences;\n readonly appVersion?: string;\n /** Debounced flush (ms). Default 3000. */\n readonly flushDelayMs?: number;\n readonly setTimer?: (callback: () => void, ms: number) => unknown;\n readonly clearTimer?: (handle: unknown) => void;\n}\n\n/** Creates a height memo (lazy load from preferences on first use, debounced flush). */\nexport function createSheetHeightMemo(options: G9SheetHeightMemoOptions = {}): G9SheetHeightMemo {\n const entries = new Map<string, number>();\n const header = `v1\\t${options.appVersion ?? '0'}`;\n let loaded = false;\n let timer: unknown = null;\n const prefs = options.preferences;\n const load = () => {\n if (loaded) return;\n loaded = true;\n if (!prefs) return;\n const blob = prefs.getString(g9SheetHeightMemoPreferenceKey, '') ?? '';\n const lines = blob.split('\\n');\n if (lines[0] !== header) return;\n for (const line of lines.slice(1)) {\n const tab = line.lastIndexOf('\\t');\n if (tab <= 0) continue;\n const height = Number(line.slice(tab + 1));\n if (height > 0) entries.set(line.slice(0, tab), height);\n }\n };\n const flush = () => {\n if (timer !== null) options.clearTimer?.(timer);\n timer = null;\n if (!prefs) return;\n const body = [...entries].map(([k, h]) => `${k}\\t${Math.round(h * 10) / 10}`);\n prefs.setString(g9SheetHeightMemoPreferenceKey, [header, ...body].join('\\n'));\n };\n const schedule = () => {\n if (!prefs || !options.setTimer) return;\n if (timer !== null) options.clearTimer?.(timer);\n timer = options.setTimer(flush, options.flushDelayMs ?? 3000);\n };\n return {\n lookup(key) {\n load();\n return entries.get(key) ?? options.seeds?.tryGet(key);\n },\n record(key, bodyHeight) {\n load();\n if (!(bodyHeight > 0)) return;\n const old = entries.get(key);\n if (old !== undefined && Math.abs(old - bodyHeight) < 0.5) return;\n if (old === undefined && entries.size >= g9SheetHeightMemoLimit) {\n const first = entries.keys().next().value as string;\n entries.delete(first);\n }\n entries.set(key, bodyHeight);\n schedule();\n },\n invalidate() {\n load();\n entries.clear();\n schedule();\n },\n get size() {\n load();\n return entries.size;\n },\n flush,\n };\n}\n"],"names":["g9SheetHeightMemoLimit","g9SheetHeightMemoPreferenceKey","sheetHeightMemoKey","identity","width","culture","fontScale","Math","createSheetHeightSeeds","seeds","Map","key","bodyHeight","exact","undefined","parts","createSheetHeightMemo","options","_options_appVersion","entries","header","loaded","timer","prefs","load","_prefs_getString","blob","lines","line","tab","height","Number","flush","body","k","h","schedule","_options_flushDelayMs","_entries_get","_options_seeds","old","first"],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export { type G9SheetContextValue, G9SheetFrame, type G9SheetFrameProps, useG9SheetContext } from './frame.js';
2
+ export { footerRows, G9SheetFooter, G9SheetFooterBar, type G9SheetFooterBarProps, type G9SheetFooterProps, G9SheetHeader, type G9SheetHeaderProps, g9SheetHeaderMetrics, } from './header.js';
3
+ export { createSheetHeightMemo, createSheetHeightSeeds, type G9SheetHeightMemo, type G9SheetHeightMemoOptions, type G9SheetHeightSeeds, type G9SheetMemoPreferences, g9SheetHeightMemoLimit, g9SheetHeightMemoPreferenceKey, sheetHeightMemoKey, } from './height-memo.js';
4
+ export { G9LoadableSheetContent, type G9LoadableSheetContentProps } from './loadable.js';
5
+ export { easeOutCubic, easeOutCubicMT, type G9SheetMotion, type G9SheetMotionInput, type G9SheetTransition, g9CupertinoOmega, g9MaterialBaseSettleMs, g9MaterialMaxSettleMs, materialSettle, materialSettleDurationMs, materialSettleMT, resolveSheetMotion, } from './motion.js';
6
+ export { defaultSheetOptions, fitToContentSheetOptions, fullScreenEdgeToEdgeModalSheetOptions, fullScreenModalSheetOptions, fullScreenWithoutHandleSheetOptions, type G9SheetBackAction, type G9SheetBackSource, type G9SheetContentWidthMode, type G9SheetDetent, type G9SheetHeaderTitlePlacement, type G9SheetLifecycle, type G9SheetOptions, type G9SheetSettings, type G9SheetSizeMode, type G9SheetToolbarItem, resolveSheetSettings, } from './options.js';
7
+ export { type G9ProcessingBuild, type G9ProcessingErrorHandler, G9ProcessingSheetContent, type G9ProcessingSheetContentProps, } from './processing.js';
8
+ export { type G9SheetService, g9Sheets, sheetServiceOf, useG9Sheets } from './service.js';
9
+ export { G9Sheet, type G9SheetProps } from './sheet.js';
10
+ export { backdropCardTransform, clampFitHeight, currentPlatform, type G9SheetLayout, g9SheetDefaultPeekHeight, g9SheetDragCloseThreshold, g9SheetFitLoadingMinHeight, g9SheetFitMinHeight, g9SheetTopSafeAreaBaseGap, parentRecedeOffset, platformSheetConstraints, resolveSheetLayout, scaledSheetDuration, sheetOverlayOpacity, sheetSurfaceBottomPadding, sheetSurfaceTopPadding, sheetTopPadding, } from './sizing.js';
11
+ export { type G9SheetCloseReason, type G9SheetContent, type G9SheetEntry, type G9SheetHandle, type G9SheetResult, G9SheetStack, type G9SheetStackConfig, type G9SheetStatus, g9SheetCloseGraceMs, g9SheetShowThrottleMs, } from './stack.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sheet/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,mBAAmB,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5G,OAAO,EACL,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACvB,aAAa,EACb,KAAK,kBAAkB,EACvB,oBAAoB,GACrB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,sBAAsB,EACtB,8BAA8B,EAC9B,kBAAkB,GACnB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,sBAAsB,EAAE,KAAK,2BAA2B,EAAE,MAAM,YAAY,CAAC;AACtF,OAAO,EACL,YAAY,EACZ,cAAc,EACd,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,cAAc,EACd,wBAAwB,EACxB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,qCAAqC,EACrC,2BAA2B,EAC3B,mCAAmC,EACnC,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAC5B,KAAK,aAAa,EAClB,KAAK,2BAA2B,EAChC,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,oBAAoB,GACrB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,wBAAwB,EACxB,KAAK,6BAA6B,GACnC,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,KAAK,cAAc,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACvF,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,eAAe,EACf,KAAK,aAAa,EAClB,wBAAwB,EACxB,yBAAyB,EACzB,0BAA0B,EAC1B,mBAAmB,EACnB,yBAAyB,EACzB,kBAAkB,EAClB,wBAAwB,EACxB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,yBAAyB,EACzB,sBAAsB,EACtB,eAAe,GAChB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,YAAY,EACZ,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,SAAS,CAAC"}
@@ -0,0 +1,11 @@
1
+ export { G9SheetFrame, useG9SheetContext } from "./frame.jsx";
2
+ export { G9SheetFooter, G9SheetFooterBar, G9SheetHeader, footerRows, g9SheetHeaderMetrics } from "./header.jsx";
3
+ export { createSheetHeightMemo, createSheetHeightSeeds, g9SheetHeightMemoLimit, g9SheetHeightMemoPreferenceKey, sheetHeightMemoKey } from "./height-memo.jsx";
4
+ export { G9LoadableSheetContent } from "./loadable.jsx";
5
+ export { easeOutCubic, easeOutCubicMT, g9CupertinoOmega, g9MaterialBaseSettleMs, g9MaterialMaxSettleMs, materialSettle, materialSettleDurationMs, materialSettleMT, resolveSheetMotion } from "./motion.jsx";
6
+ export { defaultSheetOptions, fitToContentSheetOptions, fullScreenEdgeToEdgeModalSheetOptions, fullScreenModalSheetOptions, fullScreenWithoutHandleSheetOptions, resolveSheetSettings } from "./options.jsx";
7
+ export { G9ProcessingSheetContent } from "./processing.jsx";
8
+ export { g9Sheets, sheetServiceOf, useG9Sheets } from "./service.jsx";
9
+ export { G9Sheet } from "./sheet.jsx";
10
+ export { backdropCardTransform, clampFitHeight, currentPlatform, g9SheetDefaultPeekHeight, g9SheetDragCloseThreshold, g9SheetFitLoadingMinHeight, g9SheetFitMinHeight, g9SheetTopSafeAreaBaseGap, parentRecedeOffset, platformSheetConstraints, resolveSheetLayout, scaledSheetDuration, sheetOverlayOpacity, sheetSurfaceBottomPadding, sheetSurfaceTopPadding, sheetTopPadding } from "./sizing.jsx";
11
+ export { G9SheetStack, g9SheetCloseGraceMs, g9SheetShowThrottleMs } from "./stack.jsx";
@@ -0,0 +1,35 @@
1
+ import { type ReactNode } from '@lynx-js/react';
2
+ import { type G9BottomSheetLoadingSkeleton } from '../display/shimmer.js';
3
+ /** Props of {@link G9LoadableSheetContent} (MAUI `LoadableSheetContentView<TData>`). */
4
+ export interface G9LoadableSheetContentProps<TData> {
5
+ /** Loads the data once per open, after the open motion (open-then-fill); `signal` aborts on close. */
6
+ readonly load: (signal: import('@g9tm/lynxcontrols-foundation').G9AbortSignal) => Promise<TData | null | undefined>;
7
+ /** Renders the loaded data (MAUI `ApplyLoadedData`). Never called after the sheet closed. */
8
+ readonly children: (data: TData) => ReactNode;
9
+ /** The loader returned nothing (MAUI `OnLoadReturnedNull`). Default: nothing rendered. */
10
+ readonly renderEmpty?: () => ReactNode;
11
+ /** The loader threw (MAUI `OnLoadFailed`); the error is also logged. */
12
+ readonly onLoadFailed?: (error: unknown) => void;
13
+ /** What a failure shows. Default nothing. */
14
+ readonly renderError?: (error: unknown) => ReactNode;
15
+ /** Height of the loading state (fills the seeded height). Default 180. */
16
+ readonly loadingHeight?: number;
17
+ /** Skeleton instead of the spinner. Default `'none'`. */
18
+ readonly skeleton?: G9BottomSheetLoadingSkeleton;
19
+ /**
20
+ * Load while the sheet is still staged (MAUI `LoadWhileStaged`): start at once instead of after the open motion.
21
+ * For on-device data only. Default false.
22
+ */
23
+ readonly loadWhileStaged?: boolean;
24
+ /** Fade the body in over 140 ms once loaded (MAUI `RevealLoadedContentAsync`). Default true. */
25
+ readonly reveal?: boolean;
26
+ /** Told when loading starts/ends (MAUI `IsLoading`). */
27
+ readonly onLoadingChange?: (loading: boolean) => void;
28
+ }
29
+ /**
30
+ * Open-then-fill sheet body (MAUI `LoadableSheetContentView`): shows a loading state that fills the sheet's seeded
31
+ * height, loads once after the open motion (or at once with `loadWhileStaged`), cancels on close, and never applies
32
+ * results after the sheet closed. Outside a sheet it loads on mount.
33
+ */
34
+ export declare function G9LoadableSheetContent<TData>(props: G9LoadableSheetContentProps<TData>): ReactNode;
35
+ //# sourceMappingURL=loadable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loadable.d.ts","sourceRoot":"","sources":["../../src/sheet/loadable.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,SAAS,EAA+B,MAAM,gBAAgB,CAAC;AAE7E,OAAO,EAAE,KAAK,4BAA4B,EAAmB,MAAM,oBAAoB,CAAC;AAIxF,wFAAwF;AACxF,MAAM,WAAW,2BAA2B,CAAC,KAAK;IAChD,sGAAsG;IACtG,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,+BAA+B,EAAE,aAAa,KAAK,OAAO,CAAC,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IACpH,6FAA6F;IAC7F,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,SAAS,CAAC;IAC9C,0FAA0F;IAC1F,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,SAAS,CAAC;IACvC,wEAAwE;IACxE,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,6CAA6C;IAC7C,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,SAAS,CAAC;IACrD,0EAA0E;IAC1E,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,yDAAyD;IACzD,QAAQ,CAAC,QAAQ,CAAC,EAAE,4BAA4B,CAAC;IACjD;;;OAGG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,gGAAgG;IAChG,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,wDAAwD;IACxD,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CACvD;AAID;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,KAAK,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,SAAS,CA+ClG"}
@@ -0,0 +1,65 @@
1
+ import { createAbortController } from "@g9tm/lynxcontrols-foundation";
2
+ import { useEffect, useRef, useState } from "@lynx-js/react";
3
+ import { G9ActivityIndicator } from "../display/activity-indicator.jsx";
4
+ import { G9SheetSkeleton } from "../display/shimmer.jsx";
5
+ import { useG9Diagnostics } from "../provider/hooks.jsx";
6
+ import { useG9SheetContext } from "./frame.jsx";
7
+ function G9LoadableSheetContent(props) {
8
+ var _ref, _ref1, _props_loadingHeight;
9
+ var _props_renderEmpty, _props_renderError;
10
+ const sheet = useG9SheetContext();
11
+ const diagnostics = useG9Diagnostics();
12
+ const [state, setState] = useState({
13
+ s: 'loading'
14
+ });
15
+ const started = useRef(false);
16
+ const latest = useRef(props);
17
+ latest.current = props;
18
+ const ready = !sheet || sheet.opened || true === props.loadWhileStaged;
19
+ useEffect(()=>{
20
+ var _latest_current_onLoadingChange, _latest_current;
21
+ if (started.current || !ready) return;
22
+ started.current = true;
23
+ const signal = null == sheet ? void 0 : sheet.signal;
24
+ null == (_latest_current_onLoadingChange = (_latest_current = latest.current).onLoadingChange) || _latest_current_onLoadingChange.call(_latest_current, true);
25
+ latest.current.load(null != signal ? signal : createAbortController().signal).then((data)=>{
26
+ var _latest_current_onLoadingChange, _latest_current;
27
+ if (null == signal ? void 0 : signal.aborted) return;
28
+ setState(null == data ? {
29
+ s: 'empty'
30
+ } : {
31
+ s: 'loaded',
32
+ data
33
+ });
34
+ null == (_latest_current_onLoadingChange = (_latest_current = latest.current).onLoadingChange) || _latest_current_onLoadingChange.call(_latest_current, false);
35
+ }, (error)=>{
36
+ var _latest_current_onLoadFailed, _latest_current, _latest_current_onLoadingChange, _latest_current1;
37
+ if (null == signal ? void 0 : signal.aborted) return;
38
+ diagnostics.log({
39
+ level: 'error',
40
+ message: 'Sheet content failed to load.',
41
+ source: 'G9LoadableSheetContent',
42
+ error
43
+ });
44
+ null == (_latest_current_onLoadFailed = (_latest_current = latest.current).onLoadFailed) || _latest_current_onLoadFailed.call(_latest_current, error);
45
+ setState({
46
+ s: 'failed',
47
+ error
48
+ });
49
+ null == (_latest_current_onLoadingChange = (_latest_current1 = latest.current).onLoadingChange) || _latest_current_onLoadingChange.call(_latest_current1, false);
50
+ });
51
+ }, [
52
+ ready
53
+ ]);
54
+ if ('loaded' === state.s) return <view className={false === props.reveal ? '' : 'g9-sheet-reveal'}>{props.children(state.data)}</view>;
55
+ if ('empty' === state.s) return null != (_ref = null == (_props_renderEmpty = props.renderEmpty) ? void 0 : _props_renderEmpty.call(props)) ? _ref : null;
56
+ if ('failed' === state.s) return null != (_ref1 = null == (_props_renderError = props.renderError) ? void 0 : _props_renderError.call(props, state.error)) ? _ref1 : null;
57
+ return <view className="g9-sheet-loading" style={{
58
+ height: `${null != (_props_loadingHeight = props.loadingHeight) ? _props_loadingHeight : 180}px`
59
+ }}>
60
+ {props.skeleton && 'none' !== props.skeleton ? <G9SheetSkeleton skeleton={props.skeleton}/> : <G9ActivityIndicator running size={32}/>}
61
+ </view>;
62
+ }
63
+ export { G9LoadableSheetContent };
64
+
65
+ //# sourceMappingURL=loadable.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sheet/loadable.jsx","sources":["../../src/sheet/loadable.tsx"],"sourcesContent":["import { createAbortController } from '@g9tm/lynxcontrols-foundation';\nimport { type ReactNode, useEffect, useRef, useState } from '@lynx-js/react';\nimport { G9ActivityIndicator } from '../display/activity-indicator';\nimport { type G9BottomSheetLoadingSkeleton, G9SheetSkeleton } from '../display/shimmer';\nimport { useG9Diagnostics } from '../provider/hooks';\nimport { useG9SheetContext } from './frame';\n\n/** Props of {@link G9LoadableSheetContent} (MAUI `LoadableSheetContentView<TData>`). */\nexport interface G9LoadableSheetContentProps<TData> {\n /** Loads the data once per open, after the open motion (open-then-fill); `signal` aborts on close. */\n readonly load: (signal: import('@g9tm/lynxcontrols-foundation').G9AbortSignal) => Promise<TData | null | undefined>;\n /** Renders the loaded data (MAUI `ApplyLoadedData`). Never called after the sheet closed. */\n readonly children: (data: TData) => ReactNode;\n /** The loader returned nothing (MAUI `OnLoadReturnedNull`). Default: nothing rendered. */\n readonly renderEmpty?: () => ReactNode;\n /** The loader threw (MAUI `OnLoadFailed`); the error is also logged. */\n readonly onLoadFailed?: (error: unknown) => void;\n /** What a failure shows. Default nothing. */\n readonly renderError?: (error: unknown) => ReactNode;\n /** Height of the loading state (fills the seeded height). Default 180. */\n readonly loadingHeight?: number;\n /** Skeleton instead of the spinner. Default `'none'`. */\n readonly skeleton?: G9BottomSheetLoadingSkeleton;\n /**\n * Load while the sheet is still staged (MAUI `LoadWhileStaged`): start at once instead of after the open motion.\n * For on-device data only. Default false.\n */\n readonly loadWhileStaged?: boolean;\n /** Fade the body in over 140 ms once loaded (MAUI `RevealLoadedContentAsync`). Default true. */\n readonly reveal?: boolean;\n /** Told when loading starts/ends (MAUI `IsLoading`). */\n readonly onLoadingChange?: (loading: boolean) => void;\n}\n\ntype LoadState<T> = { s: 'loading' } | { s: 'loaded'; data: T } | { s: 'empty' } | { s: 'failed'; error: unknown };\n\n/**\n * Open-then-fill sheet body (MAUI `LoadableSheetContentView`): shows a loading state that fills the sheet's seeded\n * height, loads once after the open motion (or at once with `loadWhileStaged`), cancels on close, and never applies\n * results after the sheet closed. Outside a sheet it loads on mount.\n */\nexport function G9LoadableSheetContent<TData>(props: G9LoadableSheetContentProps<TData>): ReactNode {\n const sheet = useG9SheetContext();\n const diagnostics = useG9Diagnostics();\n const [state, setState] = useState<LoadState<TData>>({ s: 'loading' });\n const started = useRef(false);\n const latest = useRef(props);\n latest.current = props;\n const ready = !sheet || sheet.opened || props.loadWhileStaged === true;\n useEffect(() => {\n if (started.current || !ready) return;\n started.current = true;\n const signal = sheet?.signal;\n latest.current.onLoadingChange?.(true);\n latest.current.load(signal ?? createAbortController().signal).then(\n (data) => {\n if (signal?.aborted) return;\n setState(data === null || data === undefined ? { s: 'empty' } : { s: 'loaded', data });\n latest.current.onLoadingChange?.(false);\n },\n (error) => {\n if (signal?.aborted) return;\n diagnostics.log({\n level: 'error',\n message: 'Sheet content failed to load.',\n source: 'G9LoadableSheetContent',\n error,\n });\n latest.current.onLoadFailed?.(error);\n setState({ s: 'failed', error });\n latest.current.onLoadingChange?.(false);\n },\n );\n }, [ready]);\n if (state.s === 'loaded') {\n return <view className={props.reveal === false ? '' : 'g9-sheet-reveal'}>{props.children(state.data)}</view>;\n }\n if (state.s === 'empty') return props.renderEmpty?.() ?? null;\n if (state.s === 'failed') return props.renderError?.(state.error) ?? null;\n return (\n <view className=\"g9-sheet-loading\" style={{ height: `${props.loadingHeight ?? 180}px` }}>\n {props.skeleton && props.skeleton !== 'none' ? (\n <G9SheetSkeleton skeleton={props.skeleton} />\n ) : (\n <G9ActivityIndicator running size={32} />\n )}\n </view>\n );\n}\n"],"names":["G9LoadableSheetContent","props","_props_loadingHeight","sheet","useG9SheetContext","diagnostics","useG9Diagnostics","state","setState","useState","started","useRef","latest","ready","useEffect","_latest_current","signal","createAbortController","data","error","_latest_current1","view","G9SheetSkeleton","G9ActivityIndicator"],"mappings":";;;;;;AAyCO,SAASA,uBAA8BC,KAAyC;qBAuC5BC;QAHzBD,oBACCA;IApCjC,MAAME,QAAQC;IACd,MAAMC,cAAcC;IACpB,MAAM,CAACC,OAAOC,SAAS,GAAGC,SAA2B;QAAE,GAAG;IAAU;IACpE,MAAMC,UAAUC,OAAO;IACvB,MAAMC,SAASD,OAAOV;IACtBW,OAAO,OAAO,GAAGX;IACjB,MAAMY,QAAQ,CAACV,SAASA,MAAM,MAAM,IAAIF,AAA0B,SAA1BA,MAAM,eAAe;IAC7Da,UAAU;YAIRC,iCAAAA;QAHA,IAAIL,QAAQ,OAAO,IAAI,CAACG,OAAO;QAC/BH,QAAQ,OAAO,GAAG;QAClB,MAAMM,SAASb,QAAAA,QAAAA,KAAAA,IAAAA,MAAO,MAAM;gBAC5BY,CAAAA,kCAAAA,AAAAA,CAAAA,kBAAAA,OAAO,OAAO,AAAD,EAAE,eAAe,AAAD,KAA7BA,gCAAAA,IAAAA,CAAAA,iBAAiC;QACjCH,OAAO,OAAO,CAAC,IAAI,CAACI,QAAAA,SAAAA,SAAUC,wBAAwB,MAAM,EAAE,IAAI,CAChE,CAACC;gBAGCH,iCAAAA;YAFA,IAAIC,QAAAA,SAAAA,KAAAA,IAAAA,OAAQ,OAAO,EAAE;YACrBR,SAASU,QAAAA,OAAsC;gBAAE,GAAG;YAAQ,IAAI;gBAAE,GAAG;gBAAUA;YAAK;oBACpFH,CAAAA,kCAAAA,AAAAA,CAAAA,kBAAAA,OAAO,OAAO,AAAD,EAAE,eAAe,AAAD,KAA7BA,gCAAAA,IAAAA,CAAAA,iBAAiC;QACnC,GACA,CAACI;gBAQCJ,8BAAAA,iBAEAK,iCAAAA;YATA,IAAIJ,QAAAA,SAAAA,KAAAA,IAAAA,OAAQ,OAAO,EAAE;YACrBX,YAAY,GAAG,CAAC;gBACd,OAAO;gBACP,SAAS;gBACT,QAAQ;gBACRc;YACF;oBACAJ,CAAAA,+BAAAA,AAAAA,CAAAA,kBAAAA,OAAO,OAAO,AAAD,EAAE,YAAY,AAAD,KAA1BA,6BAAAA,IAAAA,CAAAA,iBAA8BI;YAC9BX,SAAS;gBAAE,GAAG;gBAAUW;YAAM;oBAC9BC,CAAAA,kCAAAA,AAAAA,CAAAA,mBAAAA,OAAO,OAAO,AAAD,EAAE,eAAe,AAAD,KAA7BA,gCAAAA,IAAAA,CAAAA,kBAAiC;QACnC;IAEJ,GAAG;QAACP;KAAM;IACV,IAAIN,AAAY,aAAZA,MAAM,CAAC,EACT,QAAQc,KAAK,WAAWpB,AAAiB,UAAjBA,MAAM,MAAM,GAAa,KAAK,oBAAoBA,MAAM,QAAQ,CAACM,MAAM,IAAI,IAAIc;IAEzG,IAAId,AAAY,YAAZA,MAAM,CAAC,EAAc,OAAO,QAAP,gBAAON,CAAAA,qBAAAA,MAAM,WAAW,AAAD,IAAhBA,KAAAA,IAAAA,mBAAAA,IAAAA,CAAAA,MAAK,IAALA,OAAyB;IACzD,IAAIM,AAAY,aAAZA,MAAM,CAAC,EAAe,OAAO,QAAP,iBAAON,CAAAA,qBAAAA,MAAM,WAAW,AAAD,IAAhBA,KAAAA,IAAAA,mBAAAA,IAAAA,CAAAA,OAAoBM,MAAM,KAAK,aAAK;IACrE,QACGc,KAAK,UAAU,mBAAmB,OAAO;QAAE,QAAQ,GAAG,QAAAnB,CAAAA,uBAAAA,MAAM,aAAa,AAAD,IAAlBA,uBAAuB,IAAI,EAAE,CAAC;IAAC,GAAG;MACvF,CAACD,MAAM,QAAQ,IAAIA,AAAmB,WAAnBA,MAAM,QAAQ,IAC9BqB,gBAAgB,UAAUrB,MAAM,QAAQ,OAExCsB,oBAAoB,QAAQ,MAAM,MACnC;IACJ,EAAEF;AAEN"}