@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,155 @@
1
+ import type { G9ImageSource } from '@g9tm/lynxcontrols-foundation';
2
+ import type { ReactNode } from '@lynx-js/react';
3
+ import type { G9IconInput } from '../icon/icon.js';
4
+ /** The screen edge a panel attaches to (MAUI `G9EdgeSide`): an absolute edge, never flipped by RTL. */
5
+ export type G9EdgeSide = 'left' | 'right';
6
+ /** Where the open panel's close button sits (MAUI `G9EdgeCloseButtonPlacement`). */
7
+ export type G9EdgeCloseButtonPlacement = 'inset' | 'onCorner';
8
+ /** Title alignment (MAUI `G9EdgeMenuHeaderAlignment`): `auto` = the content direction's leading edge. */
9
+ export type G9EdgeMenuHeaderAlignment = 'auto' | 'leftToRight' | 'rightToLeft' | 'center';
10
+ /** Direction of the panel's content (MAUI `G9EdgePanelContentDirection`). */
11
+ export type G9EdgePanelContentDirection = 'matchApplication' | 'leftToRight' | 'rightToLeft';
12
+ /** The title above the menu rows (MAUI `G9EdgeMenuHeader`): exactly one of text, a string key, or a view. */
13
+ export interface G9EdgeMenuHeader {
14
+ readonly text?: string | null;
15
+ /** Resolved through the app's string provider (`strings.resolve`); the key itself when there is no entry. */
16
+ readonly localizationKey?: string | null;
17
+ /** A custom header view (takes precedence). */
18
+ readonly view?: ReactNode;
19
+ }
20
+ /** Header factories (MAUI `G9EdgeMenuHeader.FromText` / `FromDictionaryKey` / `FromView`). */
21
+ export declare const g9EdgeMenuHeader: Readonly<{
22
+ fromText: (text: string) => G9EdgeMenuHeader;
23
+ fromDictionaryKey: (localizationKey: string) => G9EdgeMenuHeader;
24
+ fromView: (view: ReactNode) => G9EdgeMenuHeader;
25
+ }>;
26
+ /** `true` when the header shows nothing (MAUI `IsEmpty`). */
27
+ export declare function isEdgeMenuHeaderEmpty(header: G9EdgeMenuHeader | null | undefined): boolean;
28
+ /** One row of the panel's list menu (MAUI `G9EdgeMenuItem`). */
29
+ export interface G9EdgeMenuItem {
30
+ readonly icon?: G9IconInput;
31
+ /** Image path (`http(s)://…` is a URI, else a bundled asset). */
32
+ readonly imageSource?: string | null;
33
+ readonly image?: G9ImageSource | null;
34
+ /** Emoji, used when no icon or image is set. */
35
+ readonly emoji?: string | null;
36
+ /** Display text; wins over `localizedTextKey`. */
37
+ readonly text?: string | null;
38
+ /** String key resolved through the app's provider when `text` is unset. */
39
+ readonly localizedTextKey?: string | null;
40
+ /** A nested list: tapping the row shows it, with a Back row on top. */
41
+ readonly nextList?: readonly G9EdgeMenuItem[] | null;
42
+ /** Header shown while `nextList` is displayed. */
43
+ readonly subMenuHeader?: G9EdgeMenuHeader | null;
44
+ readonly backgroundColor?: string | null;
45
+ readonly textColor?: string | null;
46
+ readonly iconColor?: string | null;
47
+ /** Runs first on a tap (MAUI `Clicked`). */
48
+ readonly onClick?: (item: G9EdgeMenuItem) => void;
49
+ /** Runs after `onClick` (MAUI `Command` / `CommandParameter`). */
50
+ readonly command?: (parameter: unknown) => void;
51
+ readonly commandParameter?: unknown;
52
+ /** Test identifier, set as the row's `id` (MAUI `AutomationId`). */
53
+ readonly automationId?: string;
54
+ readonly showDividerBelow?: boolean;
55
+ /** Disabled rows are dimmed (0.5) and ignore taps. Default true. */
56
+ readonly isEnabled?: boolean;
57
+ /** Close the panel after the row's callbacks (leaf rows only; a `nextList` row navigates instead). */
58
+ readonly closeAfterClick?: boolean;
59
+ }
60
+ /** Builds a row (MAUI `new G9EdgeMenuItem()`, `(text)`, `(text, icon)`). */
61
+ export declare function g9EdgeMenuItem(text?: string, icon?: G9IconInput, extra?: Partial<G9EdgeMenuItem>): G9EdgeMenuItem;
62
+ /** Panel options (MAUI `G9EdgePanelOptions`): every field optional; unset fields keep the panel defaults. */
63
+ export interface G9EdgePanelOptions {
64
+ readonly side?: G9EdgeSide;
65
+ readonly widthRatio?: number;
66
+ readonly topGap?: number;
67
+ readonly maxPanelHeight?: number;
68
+ readonly maxPanelHeightRatio?: number;
69
+ /** Sets both durations; the specific ones below win. */
70
+ readonly animationDuration?: number;
71
+ readonly openAnimationDuration?: number;
72
+ readonly closeAnimationDuration?: number;
73
+ readonly enableOutsideTapToClose?: boolean;
74
+ readonly useBackdrop?: boolean;
75
+ /** Default true for helper panels (false for a declared panel). */
76
+ readonly showCollapsedTab?: boolean;
77
+ /** Open right away instead of showing only the collapsed tab. Default false. */
78
+ readonly autoOpen?: boolean;
79
+ readonly panelBackgroundColor?: string | null;
80
+ readonly tabBackgroundColor?: string | null;
81
+ readonly contentFlowDirection?: G9EdgePanelContentDirection;
82
+ readonly menuHeader?: G9EdgeMenuHeader | null;
83
+ readonly menuHeaderAlignment?: G9EdgeMenuHeaderAlignment;
84
+ readonly collapsedTabIcon?: G9IconInput;
85
+ readonly closeButtonPlacement?: G9EdgeCloseButtonPlacement;
86
+ }
87
+ /** Sizing constants (MAUI `G9EdgePanelMetrics`). */
88
+ export declare const g9EdgePanelMetrics: Readonly<{
89
+ tabCollapsedWidth: 48;
90
+ tabCollapsedHeight: 64;
91
+ tabExpandedSize: 40;
92
+ tabCornerRadius: 18;
93
+ defaultWidthRatio: 0.35;
94
+ defaultTopGap: 112;
95
+ defaultMaxPanelHeightRatio: 0.69;
96
+ defaultMaxPanelHeightAbsolute: 560;
97
+ panelCornerRadius: 24;
98
+ panelStrokeThickness: 1;
99
+ defaultOpenAnimationDurationMs: 450;
100
+ defaultCloseAnimationDurationMs: 450;
101
+ tabEntranceDurationMs: 320;
102
+ collapsedExtraOffset: 10;
103
+ wallOverlap: 2;
104
+ interactionDebounceMs: 220;
105
+ expandedTabInset: 56;
106
+ tabTopInset: 12;
107
+ tabIconSize: 20;
108
+ menuItemHeight: 52;
109
+ menuItemIconSize: 22;
110
+ menuItemEmojiSize: 20;
111
+ menuItemImageSize: 28;
112
+ menuItemSpacing: 8;
113
+ menuItemCornerRadius: 12;
114
+ backItemHeight: 44;
115
+ menuTransitionDurationMs: 220;
116
+ panelHeightAnimationDurationMs: 240;
117
+ backdropAlpha: 0.18;
118
+ edgeSpacing: 16;
119
+ }>;
120
+ /** The panel's height cap (MAUI `ResolveMaxPanelHeight`): min(ratio × host, absolute cap, room below `topGap`). */
121
+ export declare function resolveEdgePanelMaxHeight(hostHeight: number, topGap: number, maxPanelHeight: number, maxPanelHeightRatio: number): number;
122
+ /** One level of the list menu. */
123
+ export interface G9EdgeMenuFrame {
124
+ readonly items: readonly G9EdgeMenuItem[];
125
+ readonly header: G9EdgeMenuHeader | null;
126
+ }
127
+ /** Direction the menu content slides when the level changes (MAUI `G9MenuTransitionDirection`). */
128
+ export type G9EdgeMenuTransition = 'forward' | 'back' | 'none';
129
+ /**
130
+ * The nested list navigation of a panel (MAUI `_menuStack` + `ShowMenuList`): the visible level, the parents to go
131
+ * back to, and a version that bumps on every change so a view re-renders (`refresh` after in-place item edits).
132
+ */
133
+ export declare class G9EdgeMenuNavigator {
134
+ private stack;
135
+ private current;
136
+ private transitionValue;
137
+ private versionValue;
138
+ /** Shows `root` as the root level (a new `menuItems` list or header resets the stack). */
139
+ setRoot(items: readonly G9EdgeMenuItem[] | null | undefined, header: G9EdgeMenuHeader | null): void;
140
+ /** Pushes the visible level and shows `items` (MAUI `NavigateToSubList`). */
141
+ navigateToSubList(items: readonly G9EdgeMenuItem[], header?: G9EdgeMenuHeader | null): void;
142
+ /** Back one level; `false` at the root. */
143
+ back(): boolean;
144
+ /** Straight back to the root level (MAUI `NavigateToRoot`). */
145
+ navigateToRoot(): void;
146
+ /** Re-renders the visible level (MAUI `RefreshMenuItems`). */
147
+ refresh(): void;
148
+ get frame(): G9EdgeMenuFrame | null;
149
+ get isRoot(): boolean;
150
+ get depth(): number;
151
+ get transition(): G9EdgeMenuTransition;
152
+ get version(): number;
153
+ private bump;
154
+ }
155
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/edge-panel/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,139 @@
1
+ function _define_property(obj, key, value) {
2
+ if (key in obj) Object.defineProperty(obj, key, {
3
+ value: value,
4
+ enumerable: true,
5
+ configurable: true,
6
+ writable: true
7
+ });
8
+ else obj[key] = value;
9
+ return obj;
10
+ }
11
+ const g9EdgeMenuHeader = Object.freeze({
12
+ fromText: (text)=>({
13
+ text
14
+ }),
15
+ fromDictionaryKey: (localizationKey)=>({
16
+ localizationKey
17
+ }),
18
+ fromView: (view)=>({
19
+ view
20
+ })
21
+ });
22
+ function isEdgeMenuHeaderEmpty(header) {
23
+ if (!header) return true;
24
+ return null == header.view && !header.text && !header.localizationKey;
25
+ }
26
+ function g9EdgeMenuItem(text, icon, extra = {}) {
27
+ return {
28
+ ...void 0 !== text ? {
29
+ text
30
+ } : {},
31
+ ...void 0 !== icon ? {
32
+ icon
33
+ } : {},
34
+ ...extra
35
+ };
36
+ }
37
+ const g9EdgePanelMetrics = Object.freeze({
38
+ tabCollapsedWidth: 48,
39
+ tabCollapsedHeight: 64,
40
+ tabExpandedSize: 40,
41
+ tabCornerRadius: 18,
42
+ defaultWidthRatio: 0.35,
43
+ defaultTopGap: 112,
44
+ defaultMaxPanelHeightRatio: 0.69,
45
+ defaultMaxPanelHeightAbsolute: 560,
46
+ panelCornerRadius: 24,
47
+ panelStrokeThickness: 1,
48
+ defaultOpenAnimationDurationMs: 450,
49
+ defaultCloseAnimationDurationMs: 450,
50
+ tabEntranceDurationMs: 320,
51
+ collapsedExtraOffset: 10,
52
+ wallOverlap: 2,
53
+ interactionDebounceMs: 220,
54
+ expandedTabInset: 56,
55
+ tabTopInset: 12,
56
+ tabIconSize: 20,
57
+ menuItemHeight: 52,
58
+ menuItemIconSize: 22,
59
+ menuItemEmojiSize: 20,
60
+ menuItemImageSize: 28,
61
+ menuItemSpacing: 8,
62
+ menuItemCornerRadius: 12,
63
+ backItemHeight: 44,
64
+ menuTransitionDurationMs: 220,
65
+ panelHeightAnimationDurationMs: 240,
66
+ backdropAlpha: 0.18,
67
+ edgeSpacing: 16
68
+ });
69
+ function resolveEdgePanelMaxHeight(hostHeight, topGap, maxPanelHeight, maxPanelHeightRatio) {
70
+ const m = g9EdgePanelMetrics;
71
+ let available = hostHeight - topGap - m.edgeSpacing;
72
+ if (!Number.isFinite(available) || available <= 0) available = hostHeight > 0 ? hostHeight * m.defaultMaxPanelHeightRatio : m.defaultMaxPanelHeightAbsolute;
73
+ const ratio = Number.isFinite(maxPanelHeightRatio) && maxPanelHeightRatio > 0 && maxPanelHeightRatio <= 1 ? maxPanelHeightRatio : m.defaultMaxPanelHeightRatio;
74
+ const fromAbsolute = maxPanelHeight > 0 ? maxPanelHeight : 1 / 0;
75
+ const cap = Math.min(hostHeight * ratio, fromAbsolute, available);
76
+ return Math.max(m.tabCollapsedHeight, cap);
77
+ }
78
+ class G9EdgeMenuNavigator {
79
+ setRoot(items, header) {
80
+ this.stack = [];
81
+ this.current = items && items.length > 0 ? {
82
+ items,
83
+ header
84
+ } : null;
85
+ this.bump('none');
86
+ }
87
+ navigateToSubList(items, header = null) {
88
+ if (this.current) this.stack.push(this.current);
89
+ this.current = {
90
+ items,
91
+ header
92
+ };
93
+ this.bump('forward');
94
+ }
95
+ back() {
96
+ const frame = this.stack.pop();
97
+ if (!frame) return false;
98
+ this.current = frame;
99
+ this.bump('back');
100
+ return true;
101
+ }
102
+ navigateToRoot() {
103
+ if (0 === this.stack.length) return;
104
+ this.current = this.stack[0];
105
+ this.stack = [];
106
+ this.bump('back');
107
+ }
108
+ refresh() {
109
+ if (this.current) this.bump('none');
110
+ }
111
+ get frame() {
112
+ return this.current;
113
+ }
114
+ get isRoot() {
115
+ return 0 === this.stack.length;
116
+ }
117
+ get depth() {
118
+ return this.stack.length;
119
+ }
120
+ get transition() {
121
+ return this.transitionValue;
122
+ }
123
+ get version() {
124
+ return this.versionValue;
125
+ }
126
+ bump(transition) {
127
+ this.transitionValue = transition;
128
+ this.versionValue += 1;
129
+ }
130
+ constructor(){
131
+ _define_property(this, "stack", []);
132
+ _define_property(this, "current", null);
133
+ _define_property(this, "transitionValue", 'none');
134
+ _define_property(this, "versionValue", 0);
135
+ }
136
+ }
137
+ export { G9EdgeMenuNavigator, g9EdgeMenuHeader, g9EdgeMenuItem, g9EdgePanelMetrics, isEdgeMenuHeaderEmpty, resolveEdgePanelMaxHeight };
138
+
139
+ //# sourceMappingURL=types.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edge-panel/types.jsx","sources":["../../src/edge-panel/types.ts"],"sourcesContent":["import type { G9ImageSource } from '@g9tm/lynxcontrols-foundation';\nimport type { ReactNode } from '@lynx-js/react';\nimport type { G9IconInput } from '../icon/icon';\n\n/** The screen edge a panel attaches to (MAUI `G9EdgeSide`): an absolute edge, never flipped by RTL. */\nexport type G9EdgeSide = 'left' | 'right';\n/** Where the open panel's close button sits (MAUI `G9EdgeCloseButtonPlacement`). */\nexport type G9EdgeCloseButtonPlacement = 'inset' | 'onCorner';\n/** Title alignment (MAUI `G9EdgeMenuHeaderAlignment`): `auto` = the content direction's leading edge. */\nexport type G9EdgeMenuHeaderAlignment = 'auto' | 'leftToRight' | 'rightToLeft' | 'center';\n/** Direction of the panel's content (MAUI `G9EdgePanelContentDirection`). */\nexport type G9EdgePanelContentDirection = 'matchApplication' | 'leftToRight' | 'rightToLeft';\n\n/** The title above the menu rows (MAUI `G9EdgeMenuHeader`): exactly one of text, a string key, or a view. */\nexport interface G9EdgeMenuHeader {\n readonly text?: string | null;\n /** Resolved through the app's string provider (`strings.resolve`); the key itself when there is no entry. */\n readonly localizationKey?: string | null;\n /** A custom header view (takes precedence). */\n readonly view?: ReactNode;\n}\n\n/** Header factories (MAUI `G9EdgeMenuHeader.FromText` / `FromDictionaryKey` / `FromView`). */\nexport const g9EdgeMenuHeader = Object.freeze({\n fromText: (text: string): G9EdgeMenuHeader => ({ text }),\n fromDictionaryKey: (localizationKey: string): G9EdgeMenuHeader => ({ localizationKey }),\n fromView: (view: ReactNode): G9EdgeMenuHeader => ({ view }),\n});\n\n/** `true` when the header shows nothing (MAUI `IsEmpty`). */\nexport function isEdgeMenuHeaderEmpty(header: G9EdgeMenuHeader | null | undefined): boolean {\n if (!header) return true;\n return header.view == null && !header.text && !header.localizationKey;\n}\n\n/** One row of the panel's list menu (MAUI `G9EdgeMenuItem`). */\nexport interface G9EdgeMenuItem {\n readonly icon?: G9IconInput;\n /** Image path (`http(s)://…` is a URI, else a bundled asset). */\n readonly imageSource?: string | null;\n readonly image?: G9ImageSource | null;\n /** Emoji, used when no icon or image is set. */\n readonly emoji?: string | null;\n /** Display text; wins over `localizedTextKey`. */\n readonly text?: string | null;\n /** String key resolved through the app's provider when `text` is unset. */\n readonly localizedTextKey?: string | null;\n /** A nested list: tapping the row shows it, with a Back row on top. */\n readonly nextList?: readonly G9EdgeMenuItem[] | null;\n /** Header shown while `nextList` is displayed. */\n readonly subMenuHeader?: G9EdgeMenuHeader | null;\n readonly backgroundColor?: string | null;\n readonly textColor?: string | null;\n readonly iconColor?: string | null;\n /** Runs first on a tap (MAUI `Clicked`). */\n readonly onClick?: (item: G9EdgeMenuItem) => void;\n /** Runs after `onClick` (MAUI `Command` / `CommandParameter`). */\n readonly command?: (parameter: unknown) => void;\n readonly commandParameter?: unknown;\n /** Test identifier, set as the row's `id` (MAUI `AutomationId`). */\n readonly automationId?: string;\n readonly showDividerBelow?: boolean;\n /** Disabled rows are dimmed (0.5) and ignore taps. Default true. */\n readonly isEnabled?: boolean;\n /** Close the panel after the row's callbacks (leaf rows only; a `nextList` row navigates instead). */\n readonly closeAfterClick?: boolean;\n}\n\n/** Builds a row (MAUI `new G9EdgeMenuItem()`, `(text)`, `(text, icon)`). */\nexport function g9EdgeMenuItem(text?: string, icon?: G9IconInput, extra: Partial<G9EdgeMenuItem> = {}): G9EdgeMenuItem {\n return { ...(text !== undefined ? { text } : {}), ...(icon !== undefined ? { icon } : {}), ...extra };\n}\n\n/** Panel options (MAUI `G9EdgePanelOptions`): every field optional; unset fields keep the panel defaults. */\nexport interface G9EdgePanelOptions {\n readonly side?: G9EdgeSide;\n readonly widthRatio?: number;\n readonly topGap?: number;\n readonly maxPanelHeight?: number;\n readonly maxPanelHeightRatio?: number;\n /** Sets both durations; the specific ones below win. */\n readonly animationDuration?: number;\n readonly openAnimationDuration?: number;\n readonly closeAnimationDuration?: number;\n readonly enableOutsideTapToClose?: boolean;\n readonly useBackdrop?: boolean;\n /** Default true for helper panels (false for a declared panel). */\n readonly showCollapsedTab?: boolean;\n /** Open right away instead of showing only the collapsed tab. Default false. */\n readonly autoOpen?: boolean;\n readonly panelBackgroundColor?: string | null;\n readonly tabBackgroundColor?: string | null;\n readonly contentFlowDirection?: G9EdgePanelContentDirection;\n readonly menuHeader?: G9EdgeMenuHeader | null;\n readonly menuHeaderAlignment?: G9EdgeMenuHeaderAlignment;\n readonly collapsedTabIcon?: G9IconInput;\n readonly closeButtonPlacement?: G9EdgeCloseButtonPlacement;\n}\n\n/** Sizing constants (MAUI `G9EdgePanelMetrics`). */\nexport const g9EdgePanelMetrics = Object.freeze({\n tabCollapsedWidth: 48,\n tabCollapsedHeight: 64,\n tabExpandedSize: 40,\n tabCornerRadius: 18,\n defaultWidthRatio: 0.35,\n defaultTopGap: 112,\n defaultMaxPanelHeightRatio: 0.69,\n defaultMaxPanelHeightAbsolute: 560,\n panelCornerRadius: 24,\n panelStrokeThickness: 1,\n defaultOpenAnimationDurationMs: 450,\n defaultCloseAnimationDurationMs: 450,\n tabEntranceDurationMs: 320,\n collapsedExtraOffset: 10,\n wallOverlap: 2,\n interactionDebounceMs: 220,\n expandedTabInset: 56,\n tabTopInset: 12,\n tabIconSize: 20,\n menuItemHeight: 52,\n menuItemIconSize: 22,\n menuItemEmojiSize: 20,\n menuItemImageSize: 28,\n menuItemSpacing: 8,\n menuItemCornerRadius: 12,\n backItemHeight: 44,\n menuTransitionDurationMs: 220,\n panelHeightAnimationDurationMs: 240,\n backdropAlpha: 0.18,\n edgeSpacing: 16,\n});\n\n/** The panel's height cap (MAUI `ResolveMaxPanelHeight`): min(ratio × host, absolute cap, room below `topGap`). */\nexport function resolveEdgePanelMaxHeight(\n hostHeight: number,\n topGap: number,\n maxPanelHeight: number,\n maxPanelHeightRatio: number,\n): number {\n const m = g9EdgePanelMetrics;\n let available = hostHeight - topGap - m.edgeSpacing;\n if (!Number.isFinite(available) || available <= 0) {\n available = hostHeight > 0 ? hostHeight * m.defaultMaxPanelHeightRatio : m.defaultMaxPanelHeightAbsolute;\n }\n const ratio =\n Number.isFinite(maxPanelHeightRatio) && maxPanelHeightRatio > 0 && maxPanelHeightRatio <= 1\n ? maxPanelHeightRatio\n : m.defaultMaxPanelHeightRatio;\n const fromAbsolute = maxPanelHeight > 0 ? maxPanelHeight : Number.POSITIVE_INFINITY;\n const cap = Math.min(hostHeight * ratio, fromAbsolute, available);\n return Math.max(m.tabCollapsedHeight, cap);\n}\n\n/** One level of the list menu. */\nexport interface G9EdgeMenuFrame {\n readonly items: readonly G9EdgeMenuItem[];\n readonly header: G9EdgeMenuHeader | null;\n}\n\n/** Direction the menu content slides when the level changes (MAUI `G9MenuTransitionDirection`). */\nexport type G9EdgeMenuTransition = 'forward' | 'back' | 'none';\n\n/**\n * The nested list navigation of a panel (MAUI `_menuStack` + `ShowMenuList`): the visible level, the parents to go\n * back to, and a version that bumps on every change so a view re-renders (`refresh` after in-place item edits).\n */\nexport class G9EdgeMenuNavigator {\n private stack: G9EdgeMenuFrame[] = [];\n private current: G9EdgeMenuFrame | null = null;\n private transitionValue: G9EdgeMenuTransition = 'none';\n private versionValue = 0;\n\n /** Shows `root` as the root level (a new `menuItems` list or header resets the stack). */\n setRoot(items: readonly G9EdgeMenuItem[] | null | undefined, header: G9EdgeMenuHeader | null): void {\n this.stack = [];\n this.current = items && items.length > 0 ? { items, header } : null;\n this.bump('none');\n }\n\n /** Pushes the visible level and shows `items` (MAUI `NavigateToSubList`). */\n navigateToSubList(items: readonly G9EdgeMenuItem[], header: G9EdgeMenuHeader | null = null): void {\n if (this.current) this.stack.push(this.current);\n this.current = { items, header };\n this.bump('forward');\n }\n\n /** Back one level; `false` at the root. */\n back(): boolean {\n const frame = this.stack.pop();\n if (!frame) return false;\n this.current = frame;\n this.bump('back');\n return true;\n }\n\n /** Straight back to the root level (MAUI `NavigateToRoot`). */\n navigateToRoot(): void {\n if (this.stack.length === 0) return;\n this.current = this.stack[0] as G9EdgeMenuFrame;\n this.stack = [];\n this.bump('back');\n }\n\n /** Re-renders the visible level (MAUI `RefreshMenuItems`). */\n refresh(): void {\n if (this.current) this.bump('none');\n }\n\n get frame(): G9EdgeMenuFrame | null {\n return this.current;\n }\n\n get isRoot(): boolean {\n return this.stack.length === 0;\n }\n\n get depth(): number {\n return this.stack.length;\n }\n\n get transition(): G9EdgeMenuTransition {\n return this.transitionValue;\n }\n\n get version(): number {\n return this.versionValue;\n }\n\n private bump(transition: G9EdgeMenuTransition): void {\n this.transitionValue = transition;\n this.versionValue += 1;\n }\n}\n"],"names":["g9EdgeMenuHeader","Object","text","localizationKey","view","isEdgeMenuHeaderEmpty","header","g9EdgeMenuItem","icon","extra","undefined","g9EdgePanelMetrics","resolveEdgePanelMaxHeight","hostHeight","topGap","maxPanelHeight","maxPanelHeightRatio","m","available","Number","ratio","fromAbsolute","cap","Math","G9EdgeMenuNavigator","items","frame","transition"],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ .g9-expander {
2
+ flex-direction: column;
3
+ display: flex;
4
+ }
5
+
6
+ .g9-expander--frame {
7
+ border-style: solid;
8
+ border-width: 1px;
9
+ border-color: var(--g9-outline-variant);
10
+ background-color: var(--g9-surface);
11
+ border-radius: 16px;
12
+ padding: 12px 14px;
13
+ }
14
+
15
+ .g9-expander__header {
16
+ flex-direction: row;
17
+ align-items: center;
18
+ column-gap: 10px;
19
+ display: flex;
20
+ }
21
+
22
+ .g9-expander__lead {
23
+ flex-direction: row;
24
+ flex: 1;
25
+ align-items: center;
26
+ column-gap: 10px;
27
+ display: flex;
28
+ }
29
+
30
+ .g9-expander__title {
31
+ text-overflow: ellipsis;
32
+ font-size: 15px;
33
+ font-weight: bold;
34
+ }
35
+
36
+ .g9-expander__chevron {
37
+ transition: transform .22s ease-in-out;
38
+ }
39
+
40
+ .g9-expander__chevron--open {
41
+ transform: rotate(180deg);
42
+ }
43
+
44
+ .g9-expander__clip {
45
+ transition: height .22s ease-in-out;
46
+ overflow: hidden;
47
+ }
48
+
49
+ .g9-expander__clip--closed {
50
+ display: none;
51
+ }
52
+
53
+
54
+ /*# sourceMappingURL=expander.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["webpack://./src/expander/expander.css"],"names":[],"mappings":"AACA;EAAE,sBAAsB;EACtB,aAAa;AACf;;AAGA;EAAE,mBAAmB;EACnB,iBAAiB;EACjB,uCAAuC;EACvC,mCAAmC;EACnC,mBAAmB;EACnB,kBAAkB;AACpB;;AAGA;EAAE,mBAAmB;EACnB,mBAAmB;EACnB,gBAAgB;EAChB,aAAa;AACf;;AAGA;EAAE,mBAAmB;EACnB,OAAO;EACP,mBAAmB;EACnB,gBAAgB;EAChB,aAAa;AACf;;AAGA;EAAE,uBAAuB;EACvB,eAAe;EACf,iBAAiB;AACnB;;AAGA;EAAE,sCAAsC;AACxC;;AAGA;EAAE,yBAAyB;AAC3B;;AAGA;EAAE,mCAAmC;EACnC,gBAAgB;AAClB;;AAGA;EAAE,aAAa;AACf","sourcesContent":["/* G9Expander. */\n.g9-expander {\n display: flex;\n flex-direction: column;\n}\n\n.g9-expander--frame {\n padding: 12px 14px;\n border-style: solid;\n border-width: 1px;\n border-radius: 16px;\n border-color: var(--g9-outline-variant);\n background-color: var(--g9-surface);\n}\n\n.g9-expander__header {\n display: flex;\n flex-direction: row;\n align-items: center;\n column-gap: 10px;\n}\n\n.g9-expander__lead {\n display: flex;\n flex-direction: row;\n align-items: center;\n flex: 1;\n column-gap: 10px;\n}\n\n.g9-expander__title {\n font-size: 15px;\n font-weight: bold;\n text-overflow: ellipsis;\n}\n\n.g9-expander__chevron {\n transition: transform 220ms ease-in-out;\n}\n\n.g9-expander__chevron--open {\n transform: rotate(180deg);\n}\n\n.g9-expander__clip {\n overflow: hidden;\n transition: height 220ms ease-in-out;\n}\n\n.g9-expander__clip--closed {\n display: none;\n}\n"],"sourceRoot":""}
@@ -0,0 +1,46 @@
1
+ import './expander.css';
2
+ import type { G9ImageSource } from '@g9tm/lynxcontrols-foundation';
3
+ import { type ReactNode } from '@lynx-js/react';
4
+ import { type G9ControlBaseProps } from '../base/control.js';
5
+ import type { G9IconInput } from '../icon/icon.js';
6
+ /** Expand/collapse duration (MAUI `G9Metrics` expander 220 ms). */
7
+ export declare const g9ExpanderDurationMs = 220;
8
+ /** Props of {@link G9Expander} (MAUI `G9Expander`). */
9
+ export interface G9ExpanderProps extends G9ControlBaseProps {
10
+ readonly title?: string | null;
11
+ /** Default `var(--g9-text-primary)`. */
12
+ readonly titleColor?: string | null;
13
+ readonly iconEmoji?: string | null;
14
+ readonly icon?: G9IconInput;
15
+ readonly iconPath?: string | null;
16
+ readonly iconImage?: G9ImageSource | null;
17
+ /** Default `var(--g9-text-primary)`. */
18
+ readonly iconColor?: string | null;
19
+ /** Default `var(--g9-text-secondary)`. */
20
+ readonly chevronColor?: string | null;
21
+ /** Controlled open state (MAUI `IsExpanded`). */
22
+ readonly expanded?: boolean;
23
+ readonly defaultExpanded?: boolean;
24
+ /** Once per change made by the expander (header tap, `toggle()`); never for pushed values. */
25
+ readonly onExpandedChange?: (expanded: boolean) => void;
26
+ /** Card look: surface, 1 px outline, 16 px corners, 14 × 12 padding. Default false. */
27
+ readonly showFrame?: boolean;
28
+ /** Minimum header height. Default 48. */
29
+ readonly headerHeight?: number;
30
+ /** Content padding `[left, top, right, bottom]` (an 8 px top gap is always added). Default 0. */
31
+ readonly contentPadding?: readonly [number, number, number, number];
32
+ /** The content (MAUI `ExpanderContent`): mounted at once and kept, hidden while collapsed. */
33
+ readonly children?: ReactNode;
34
+ }
35
+ /** Imperative handle of {@link G9Expander}. */
36
+ export interface G9ExpanderHandle {
37
+ /** Same as a header tap (MAUI `Toggle`). */
38
+ toggle(): void;
39
+ }
40
+ /**
41
+ * Collapsible section (MAUI `G9Expander`): only the header toggles; the chevron turns 180° and the content height
42
+ * animates over 220 ms (CSS transition on the measured height; instant when it cannot be measured). The first render
43
+ * does not animate. The content stays mounted.
44
+ */
45
+ export declare const G9Expander: import("react").ForwardRefExoticComponent<G9ExpanderProps & import("react").RefAttributes<G9ExpanderHandle>>;
46
+ //# sourceMappingURL=expander.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expander.d.ts","sourceRoot":"","sources":["../../src/expander/expander.tsx"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAc,KAAK,SAAS,EAAoD,MAAM,gBAAgB,CAAC;AAC9G,OAAO,EAAE,KAAK,kBAAkB,EAAkD,MAAM,iBAAiB,CAAC;AAK1G,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAIhD,mEAAmE;AACnE,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC,uDAAuD;AACvD,MAAM,WAAW,eAAgB,SAAQ,kBAAkB;IACzD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,wCAAwC;IACxC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAC1C,wCAAwC;IACxC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,0CAA0C;IAC1C,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,iDAAiD;IACjD,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,8FAA8F;IAC9F,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IACxD,uFAAuF;IACvF,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,yCAAyC;IACzC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,iGAAiG;IACjG,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACpE,8FAA8F;IAC9F,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;CAC/B;AAED,+CAA+C;AAC/C,MAAM,WAAW,gBAAgB;IAC/B,4CAA4C;IAC5C,MAAM,IAAI,IAAI,CAAC;CAChB;AAID;;;;GAIG;AACH,eAAO,MAAM,UAAU,8GA+FrB,CAAC"}
@@ -0,0 +1,112 @@
1
+ import "./expander.css";
2
+ import { forwardRef, useEffect, useImperativeHandle, useRef, useState } from "@lynx-js/react";
3
+ import { g9ChildId, g9IdProps, g9RowStyle, useG9Control } from "../base/control.jsx";
4
+ import { useG9Press, usePressVisual } from "../base/press.jsx";
5
+ import { startTimer, stopTimer } from "../base/timers.jsx";
6
+ import { useControllableState } from "../base/use-controllable-state.jsx";
7
+ import { g9FieldNotchStyle } from "../fields/notch.jsx";
8
+ import { G9IconSlot, hasIconSlot } from "../icon/slot.jsx";
9
+ import { useG9Settings, useG9Theme } from "../provider/hooks.jsx";
10
+ const g9ExpanderDurationMs = 220;
11
+ const expander_G9Expander = forwardRef(function(props, ref) {
12
+ var _props_defaultExpanded, _props_contentPadding, _props_headerHeight, _props_iconColor, _props_titleColor, _props_chevronColor;
13
+ const control = useG9Control(props, 'g9-expander');
14
+ const glyphs = useG9Settings().glyphs;
15
+ const palette = useG9Theme().palette;
16
+ const [expanded, setExpanded] = useControllableState({
17
+ value: props.expanded,
18
+ defaultValue: null != (_props_defaultExpanded = props.defaultExpanded) ? _props_defaultExpanded : false,
19
+ onChange: props.onExpandedChange,
20
+ name: 'G9Expander.expanded'
21
+ });
22
+ const [phase, setPhase] = useState(expanded ? 'open' : 'closed');
23
+ const [measured, setMeasured] = useState(0);
24
+ const timer = useRef(null);
25
+ const first = useRef(true);
26
+ useEffect(()=>{
27
+ if (first.current) {
28
+ first.current = false;
29
+ return;
30
+ }
31
+ if (null !== timer.current) stopTimer(timer.current);
32
+ if (measured <= 0) return void setPhase(expanded ? 'open' : 'closed');
33
+ setPhase(expanded ? 'opening' : 'closing');
34
+ timer.current = startTimer(()=>{
35
+ timer.current = null;
36
+ setPhase(expanded ? 'open' : 'closed');
37
+ }, g9ExpanderDurationMs);
38
+ }, [
39
+ expanded
40
+ ]);
41
+ useEffect(()=>()=>{
42
+ if (null !== timer.current) stopTimer(timer.current);
43
+ }, []);
44
+ const toggle = ()=>{
45
+ if (!control.disabled) setExpanded((v)=>!v);
46
+ };
47
+ useImperativeHandle(ref, ()=>({
48
+ toggle
49
+ }));
50
+ const press = useG9Press(toggle, {
51
+ blocked: control.disabled,
52
+ source: 'G9Expander',
53
+ guardMs: 0
54
+ });
55
+ const visual = usePressVisual({
56
+ property: 'scale',
57
+ rest: 1,
58
+ pressed: 0.99,
59
+ inMs: 60,
60
+ outMs: 90
61
+ }, control.disabled);
62
+ const icon = {
63
+ emoji: props.iconEmoji,
64
+ icon: props.icon,
65
+ imagePath: props.iconPath,
66
+ image: props.iconImage
67
+ };
68
+ const [pl, pt, pr, pb] = null != (_props_contentPadding = props.contentPadding) ? _props_contentPadding : [
69
+ 0,
70
+ 0,
71
+ 0,
72
+ 0
73
+ ];
74
+ const height = 'open' === phase ? void 0 : 'opening' === phase ? `${measured}px` : '0px';
75
+ return <view className={`${control.className}${props.showFrame ? ' g9-expander--frame' : ''}`} {...control.idProps} style={props.showFrame ? g9FieldNotchStyle(palette.Surface) : {}}>
76
+ <view className="g9-expander__header" {...g9IdProps(g9ChildId(props.id, 'Header'))} style={{
77
+ minHeight: `${null != (_props_headerHeight = props.headerHeight) ? _props_headerHeight : 48}px`,
78
+ ...g9RowStyle(control.direction)
79
+ }} accessibility-element={true} accessibility-traits="button" {...props.title ? {
80
+ 'accessibility-label': props.title
81
+ } : {}} bindtap={press} {...visual}>
82
+ <view className="g9-expander__lead" style={g9RowStyle(control.direction)}>
83
+ {hasIconSlot(icon) ? <G9IconSlot {...icon} size={20} color={null != (_props_iconColor = props.iconColor) ? _props_iconColor : 'var(--g9-text-primary)'}/> : null}
84
+ {props.title ? <text className="g9-expander__title" text-maxline="1" style={{
85
+ color: null != (_props_titleColor = props.titleColor) ? _props_titleColor : 'var(--g9-text-primary)'
86
+ }}>
87
+ {props.title}
88
+ </text> : null}
89
+ </view>
90
+ <view className={`g9-expander__chevron${expanded ? ' g9-expander__chevron--open' : ''}`}>
91
+ <G9IconSlot icon={glyphs.chevron} size={22} color={null != (_props_chevronColor = props.chevronColor) ? _props_chevronColor : 'var(--g9-text-secondary)'}/>
92
+ </view>
93
+ </view>
94
+ <view className={`g9-expander__clip g9-expander__clip--${phase}`} style={void 0 === height ? {} : {
95
+ height
96
+ }}>
97
+ <view className="g9-expander__content" style={{
98
+ padding: `${pt + 8}px ${pr}px ${pb}px ${pl}px`
99
+ }} bindlayoutchange={(e)=>{
100
+ var _ref;
101
+ var _e_detail;
102
+ const h = null != (_ref = null == (_e_detail = e.detail) ? void 0 : _e_detail.height) ? _ref : 0;
103
+ if (h > 0 && h !== measured) setMeasured(h);
104
+ }}>
105
+ {props.children}
106
+ </view>
107
+ </view>
108
+ </view>;
109
+ });
110
+ export { expander_G9Expander as G9Expander, g9ExpanderDurationMs };
111
+
112
+ //# sourceMappingURL=expander.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expander/expander.jsx","sources":["../../src/expander/expander.tsx"],"sourcesContent":["import './expander.css';\nimport type { G9ImageSource } from '@g9tm/lynxcontrols-foundation';\nimport { forwardRef, type ReactNode, useEffect, useImperativeHandle, useRef, useState } from '@lynx-js/react';\nimport { type G9ControlBaseProps, g9ChildId, g9IdProps, g9RowStyle, useG9Control } from '../base/control';\nimport { useG9Press, usePressVisual } from '../base/press';\nimport { type G9TimerHandle, startTimer, stopTimer } from '../base/timers';\nimport { useControllableState } from '../base/use-controllable-state';\nimport { g9FieldNotchStyle } from '../fields/notch';\nimport type { G9IconInput } from '../icon/icon';\nimport { G9IconSlot, hasIconSlot } from '../icon/slot';\nimport { useG9Settings, useG9Theme } from '../provider/hooks';\n\n/** Expand/collapse duration (MAUI `G9Metrics` expander 220 ms). */\nexport const g9ExpanderDurationMs = 220;\n\n/** Props of {@link G9Expander} (MAUI `G9Expander`). */\nexport interface G9ExpanderProps extends G9ControlBaseProps {\n readonly title?: string | null;\n /** Default `var(--g9-text-primary)`. */\n readonly titleColor?: string | null;\n readonly iconEmoji?: string | null;\n readonly icon?: G9IconInput;\n readonly iconPath?: string | null;\n readonly iconImage?: G9ImageSource | null;\n /** Default `var(--g9-text-primary)`. */\n readonly iconColor?: string | null;\n /** Default `var(--g9-text-secondary)`. */\n readonly chevronColor?: string | null;\n /** Controlled open state (MAUI `IsExpanded`). */\n readonly expanded?: boolean;\n readonly defaultExpanded?: boolean;\n /** Once per change made by the expander (header tap, `toggle()`); never for pushed values. */\n readonly onExpandedChange?: (expanded: boolean) => void;\n /** Card look: surface, 1 px outline, 16 px corners, 14 × 12 padding. Default false. */\n readonly showFrame?: boolean;\n /** Minimum header height. Default 48. */\n readonly headerHeight?: number;\n /** Content padding `[left, top, right, bottom]` (an 8 px top gap is always added). Default 0. */\n readonly contentPadding?: readonly [number, number, number, number];\n /** The content (MAUI `ExpanderContent`): mounted at once and kept, hidden while collapsed. */\n readonly children?: ReactNode;\n}\n\n/** Imperative handle of {@link G9Expander}. */\nexport interface G9ExpanderHandle {\n /** Same as a header tap (MAUI `Toggle`). */\n toggle(): void;\n}\n\ntype Phase = 'open' | 'opening' | 'closing' | 'closed';\n\n/**\n * Collapsible section (MAUI `G9Expander`): only the header toggles; the chevron turns 180° and the content height\n * animates over 220 ms (CSS transition on the measured height; instant when it cannot be measured). The first render\n * does not animate. The content stays mounted.\n */\nexport const G9Expander = forwardRef<G9ExpanderHandle, G9ExpanderProps>(function G9Expander(props, ref): ReactNode {\n const control = useG9Control(props, 'g9-expander');\n const glyphs = useG9Settings().glyphs;\n // A framed expander is a Surface card: fields inside notch their floated label with it.\n const palette = useG9Theme().palette;\n const [expanded, setExpanded] = useControllableState<boolean>({\n value: props.expanded,\n defaultValue: props.defaultExpanded ?? false,\n onChange: props.onExpandedChange,\n name: 'G9Expander.expanded',\n });\n const [phase, setPhase] = useState<Phase>(expanded ? 'open' : 'closed');\n const [measured, setMeasured] = useState(0);\n const timer = useRef<G9TimerHandle | null>(null);\n const first = useRef(true);\n useEffect(() => {\n if (first.current) {\n first.current = false;\n return;\n }\n if (timer.current !== null) stopTimer(timer.current);\n if (measured <= 0) {\n setPhase(expanded ? 'open' : 'closed');\n return;\n }\n setPhase(expanded ? 'opening' : 'closing');\n timer.current = startTimer(() => {\n timer.current = null;\n setPhase(expanded ? 'open' : 'closed');\n }, g9ExpanderDurationMs);\n }, [expanded]);\n useEffect(\n () => () => {\n if (timer.current !== null) stopTimer(timer.current);\n },\n [],\n );\n\n const toggle = () => {\n if (!control.disabled) setExpanded((v) => !v);\n };\n useImperativeHandle(ref, () => ({ toggle }));\n const press = useG9Press(toggle, { blocked: control.disabled, source: 'G9Expander', guardMs: 0 });\n const visual = usePressVisual({ property: 'scale', rest: 1, pressed: 0.99, inMs: 60, outMs: 90 }, control.disabled);\n const icon = { emoji: props.iconEmoji, icon: props.icon, imagePath: props.iconPath, image: props.iconImage };\n const [pl, pt, pr, pb] = props.contentPadding ?? [0, 0, 0, 0];\n const height = phase === 'open' ? undefined : phase === 'opening' ? `${measured}px` : '0px';\n return (\n <view\n className={`${control.className}${props.showFrame ? ' g9-expander--frame' : ''}`}\n {...control.idProps}\n style={props.showFrame ? g9FieldNotchStyle(palette.Surface) : {}}\n >\n <view\n className=\"g9-expander__header\"\n {...g9IdProps(g9ChildId(props.id, 'Header'))}\n style={{ minHeight: `${props.headerHeight ?? 48}px`, ...g9RowStyle(control.direction) }}\n accessibility-element={true}\n accessibility-traits=\"button\"\n {...(props.title ? { 'accessibility-label': props.title } : {})}\n bindtap={press}\n {...visual}\n >\n <view className=\"g9-expander__lead\" style={g9RowStyle(control.direction)}>\n {hasIconSlot(icon) ? (\n <G9IconSlot {...icon} size={20} color={props.iconColor ?? 'var(--g9-text-primary)'} />\n ) : null}\n {props.title ? (\n <text\n className=\"g9-expander__title\"\n text-maxline=\"1\"\n style={{ color: props.titleColor ?? 'var(--g9-text-primary)' }}\n >\n {props.title}\n </text>\n ) : null}\n </view>\n <view className={`g9-expander__chevron${expanded ? ' g9-expander__chevron--open' : ''}`}>\n <G9IconSlot icon={glyphs.chevron} size={22} color={props.chevronColor ?? 'var(--g9-text-secondary)'} />\n </view>\n </view>\n <view className={`g9-expander__clip g9-expander__clip--${phase}`} style={height === undefined ? {} : { height }}>\n <view\n className=\"g9-expander__content\"\n style={{ padding: `${pt + 8}px ${pr}px ${pb}px ${pl}px` }}\n bindlayoutchange={(e: { detail?: { height?: number } }) => {\n const h = e.detail?.height ?? 0;\n if (h > 0 && h !== measured) setMeasured(h);\n }}\n >\n {props.children}\n </view>\n </view>\n </view>\n );\n});\n"],"names":["g9ExpanderDurationMs","G9Expander","forwardRef","props","ref","_props_defaultExpanded","_props_contentPadding","_props_headerHeight","_props_iconColor","_props_titleColor","_props_chevronColor","control","useG9Control","glyphs","useG9Settings","palette","useG9Theme","expanded","setExpanded","useControllableState","phase","setPhase","useState","measured","setMeasured","timer","useRef","first","useEffect","stopTimer","startTimer","toggle","v","useImperativeHandle","press","useG9Press","visual","usePressVisual","icon","pl","pt","pr","pb","height","undefined","view","g9FieldNotchStyle","g9IdProps","g9ChildId","g9RowStyle","hasIconSlot","G9IconSlot","text","e","_e_detail","h"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { G9Expander, type G9ExpanderHandle, type G9ExpanderProps, g9ExpanderDurationMs } from './expander.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/expander/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,KAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1 @@
1
+ export { G9Expander, g9ExpanderDurationMs } from "./expander.jsx";
@@ -0,0 +1,43 @@
1
+ import { type G9SpeechToText, type G9Strings } from '@g9tm/lynxcontrols-foundation';
2
+ /** What a {@link G9VoiceDictation} reads and writes. */
3
+ export interface G9VoiceDictationOptions {
4
+ /** The recogniser (`services.speech`); `undefined` makes every start fail with `speechRecognitionUnavailable`. */
5
+ readonly speech: G9SpeechToText | undefined;
6
+ /** Reads the field's current text (the session's base text). */
7
+ readonly readText: () => string | null | undefined;
8
+ /** Writes recognised text into the field (`base + ' ' + transcript`). */
9
+ readonly writeText: (text: string) => void;
10
+ /** Called whenever `isListening` or the session changes (re-render). */
11
+ readonly onStateChanged?: () => void;
12
+ /** Strings for the failure messages. */
13
+ readonly strings: () => Pick<G9Strings, 'get' | 'format'>;
14
+ /** The locale to listen for (MAUI `Culture ?? G9Culture.CurrentCulture`). */
15
+ readonly locale: () => string;
16
+ readonly onListeningStarted?: () => void;
17
+ readonly onListeningEnded?: () => void;
18
+ /** A failure message the user should see (unavailable, permission denied, recogniser error). */
19
+ readonly onFailed?: (message: string) => void;
20
+ }
21
+ /** A field's dictation session owner (MAUI `G9VoiceDictation`). Create one per field; see `useDictation`. */
22
+ export declare class G9VoiceDictation {
23
+ private session;
24
+ private listening;
25
+ private options;
26
+ constructor(options: G9VoiceDictationOptions);
27
+ /** Replaces the callbacks (the hook passes the latest props on every render). */
28
+ update(options: G9VoiceDictationOptions): void;
29
+ /** `true` while a session is listening (not while it waits for permission). */
30
+ get isListening(): boolean;
31
+ /** `true` from a start until its session ends, the permission prompt included. */
32
+ get hasSession(): boolean;
33
+ /** Stops a running session, starts one otherwise. */
34
+ toggle(): Promise<void>;
35
+ /** Starts a session. A second start while one exists (listening or awaiting permission) is ignored. */
36
+ start(): Promise<void>;
37
+ /** Stops the current session (cancels the prompt or the recogniser). Best effort; always ends the session. */
38
+ stop(): Promise<void>;
39
+ private text;
40
+ private apply;
41
+ private end;
42
+ }
43
+ //# sourceMappingURL=dictation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dictation.d.ts","sourceRoot":"","sources":["../../src/fields/dictation.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,cAAc,EAEnB,KAAK,SAAS,EACf,MAAM,+BAA+B,CAAC;AAOvC,wDAAwD;AACxD,MAAM,WAAW,uBAAuB;IACtC,kHAAkH;IAClH,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,SAAS,CAAC;IAC5C,gEAAgE;IAChE,QAAQ,CAAC,QAAQ,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACnD,yEAAyE;IACzE,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,wEAAwE;IACxE,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IACrC,wCAAwC;IACxC,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,SAAS,EAAE,KAAK,GAAG,QAAQ,CAAC,CAAC;IAC1D,6EAA6E;IAC7E,QAAQ,CAAC,MAAM,EAAE,MAAM,MAAM,CAAC;IAC9B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;IACzC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IACvC,gGAAgG;IAChG,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/C;AAOD,6GAA6G;AAC7G,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAA0B;gBAE7B,OAAO,EAAE,uBAAuB;IAI5C,iFAAiF;IACjF,MAAM,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI;IAI9C,+EAA+E;IAC/E,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,kFAAkF;IAClF,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,qDAAqD;IACrD,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvB,uGAAuG;IACjG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAwD5B,8GAA8G;IACxG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAW3B,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,KAAK;IAMb,OAAO,CAAC,GAAG;CAQZ"}