@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,162 @@
1
+ .g9-button {
2
+ border-style: solid;
3
+ flex-direction: row;
4
+ justify-content: center;
5
+ align-items: center;
6
+ column-gap: 8px;
7
+ display: flex;
8
+ overflow: hidden;
9
+ }
10
+
11
+ .g9-button--fill {
12
+ align-self: stretch;
13
+ }
14
+
15
+ .g9-button__label {
16
+ text-align: center;
17
+ }
18
+
19
+ .g9-icon-button {
20
+ justify-content: center;
21
+ align-items: center;
22
+ display: flex;
23
+ }
24
+
25
+ .g9-icon-button__host {
26
+ position: relative;
27
+ }
28
+
29
+ .g9-icon-button__frame {
30
+ border-style: solid;
31
+ justify-content: center;
32
+ align-items: center;
33
+ display: flex;
34
+ }
35
+
36
+ .g9-header-action {
37
+ border-style: solid;
38
+ border-width: 1px;
39
+ border-color: var(--g9-card-border);
40
+ background-color: var(--g9-surface-container-lowest);
41
+ border-radius: 9px;
42
+ justify-content: center;
43
+ align-items: center;
44
+ display: flex;
45
+ position: relative;
46
+ }
47
+
48
+ .g9-header-action__text {
49
+ color: var(--g9-on-surface-variant);
50
+ font-size: 13px;
51
+ font-weight: bold;
52
+ }
53
+
54
+ .g9-header-action__badge {
55
+ background-color: var(--g9-primary);
56
+ border-radius: 4px;
57
+ width: 8px;
58
+ height: 8px;
59
+ position: absolute;
60
+ top: 6px;
61
+ }
62
+
63
+ .g9-vertical-button {
64
+ border-style: solid;
65
+ border-width: 1px;
66
+ border-color: var(--g9-surface-container-highest);
67
+ background-color: var(--g9-surface-container);
68
+ border-radius: 9px;
69
+ flex-direction: column;
70
+ align-items: center;
71
+ padding: 5px;
72
+ display: flex;
73
+ }
74
+
75
+ .g9-vertical-button__text {
76
+ text-align: center;
77
+ color: var(--g9-secondary);
78
+ }
79
+
80
+ .g9-nav-card {
81
+ border-style: solid;
82
+ border-width: 1px;
83
+ border-color: var(--g9-outline-variant);
84
+ border-radius: 16px;
85
+ flex-direction: row;
86
+ align-items: center;
87
+ column-gap: 12px;
88
+ padding: 12px 14px;
89
+ display: flex;
90
+ }
91
+
92
+ .g9-nav-card__tile {
93
+ border-radius: 12px;
94
+ justify-content: center;
95
+ align-items: center;
96
+ width: 38px;
97
+ height: 38px;
98
+ display: flex;
99
+ position: relative;
100
+ }
101
+
102
+ .g9-nav-card__text {
103
+ flex-direction: column;
104
+ flex: 1;
105
+ row-gap: 2px;
106
+ display: flex;
107
+ }
108
+
109
+ .g9-nav-card__title {
110
+ text-overflow: ellipsis;
111
+ font-size: 14px;
112
+ font-weight: bold;
113
+ }
114
+
115
+ .g9-nav-card__title-row {
116
+ align-items: center;
117
+ column-gap: 8px;
118
+ display: flex;
119
+ }
120
+
121
+ .g9-nav-card__title-row .g9-nav-card__title {
122
+ flex-shrink: 1;
123
+ min-width: 0;
124
+ }
125
+
126
+ .g9-nav-card__title-accessory {
127
+ flex-shrink: 0;
128
+ align-items: center;
129
+ display: flex;
130
+ }
131
+
132
+ .g9-nav-card__subtitle {
133
+ color: var(--g9-text-tertiary);
134
+ font-size: 11.5px;
135
+ }
136
+
137
+ .g9-nav-card__trailing {
138
+ flex-direction: row;
139
+ align-items: center;
140
+ column-gap: 8px;
141
+ display: flex;
142
+ }
143
+
144
+ .g9-nav-card__value {
145
+ font-size: 13px;
146
+ font-weight: bold;
147
+ }
148
+
149
+ .g9-nav-card__soon {
150
+ background-color: var(--g9-error-container);
151
+ border-radius: 11px;
152
+ padding: 3.5px 7px;
153
+ }
154
+
155
+ .g9-nav-card__soon-text {
156
+ color: var(--g9-error);
157
+ font-size: 10px;
158
+ font-weight: bold;
159
+ }
160
+
161
+
162
+ /*# sourceMappingURL=button.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["webpack://./src/button/button.css"],"names":[],"mappings":"AACA;EAAE,mBAAmB;EACnB,mBAAmB;EACnB,uBAAuB;EACvB,mBAAmB;EACnB,eAAe;EACf,aAAa;EACb,gBAAgB;AAClB;;AAGA;EAAE,mBAAmB;AACrB;;AAGA;EAAE,kBAAkB;AACpB;;AAGA;EAAE,uBAAuB;EACvB,mBAAmB;EACnB,aAAa;AACf;;AAGA;EAAE,kBAAkB;AACpB;;AAGA;EAAE,mBAAmB;EACnB,uBAAuB;EACvB,mBAAmB;EACnB,aAAa;AACf;;AAGA;EAAE,mBAAmB;EACnB,iBAAiB;EACjB,mCAAmC;EACnC,oDAAoD;EACpD,kBAAkB;EAClB,uBAAuB;EACvB,mBAAmB;EACnB,aAAa;EACb,kBAAkB;AACpB;;AAGA;EAAE,mCAAmC;EACnC,eAAe;EACf,iBAAiB;AACnB;;AAGA;EAAE,mCAAmC;EACnC,kBAAkB;EAClB,UAAU;EACV,WAAW;EACX,kBAAkB;EAClB,QAAQ;AACV;;AAGA;EAAE,mBAAmB;EACnB,iBAAiB;EACjB,iDAAiD;EACjD,6CAA6C;EAC7C,kBAAkB;EAClB,sBAAsB;EACtB,mBAAmB;EACnB,YAAY;EACZ,aAAa;AACf;;AAGA;EAAE,kBAAkB;EAClB,0BAA0B;AAC5B;;AAGA;EAAE,mBAAmB;EACnB,iBAAiB;EACjB,uCAAuC;EACvC,mBAAmB;EACnB,mBAAmB;EACnB,mBAAmB;EACnB,gBAAgB;EAChB,kBAAkB;EAClB,aAAa;AACf;;AAGA;EAAE,mBAAmB;EACnB,uBAAuB;EACvB,mBAAmB;EACnB,WAAW;EACX,YAAY;EACZ,aAAa;EACb,kBAAkB;AACpB;;AAGA;EAAE,sBAAsB;EACtB,OAAO;EACP,YAAY;EACZ,aAAa;AACf;;AAGA;EAAE,uBAAuB;EACvB,eAAe;EACf,iBAAiB;AACnB;;AAIA;EADE,mBAAmB;EACnB,eAAe;EACf,aAAa;AACf;;AAIA;EADE,cAAc;EACd,YAAY;AACd;;AAIA;EADE,cAAc;EACd,mBAAmB;EACnB,aAAa;AACf;;AAIA;EADE,8BAA8B;EAC9B,iBAAiB;AACnB;;AAIA;EADE,mBAAmB;EACnB,mBAAmB;EACnB,eAAe;EACf,aAAa;AACf;;AAIA;EADE,eAAe;EACf,iBAAiB;AACnB;;AAIA;EADE,2CAA2C;EAC3C,mBAAmB;EACnB,kBAAkB;AACpB;;AAIA;EADE,sBAAsB;EACtB,eAAe;EACf,iBAAiB;AACnB","sourcesContent":["/* Buttons (MAUI G9Button, G9IconButton, G9HeaderActionButton, G9VerticalIconTextButton, G9NavCard). No shadows. */\n.g9-button {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n border-style: solid;\n overflow: hidden;\n column-gap: 8px;\n}\n\n.g9-button--fill {\n align-self: stretch;\n}\n\n.g9-button__label {\n text-align: center;\n}\n\n.g9-icon-button {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.g9-icon-button__host {\n position: relative;\n}\n\n.g9-icon-button__frame {\n display: flex;\n align-items: center;\n justify-content: center;\n border-style: solid;\n}\n\n.g9-header-action {\n display: flex;\n position: relative;\n align-items: center;\n justify-content: center;\n border-style: solid;\n border-width: 1px;\n border-radius: 9px;\n border-color: var(--g9-card-border);\n background-color: var(--g9-surface-container-lowest);\n}\n\n.g9-header-action__text {\n font-size: 13px;\n font-weight: bold;\n color: var(--g9-on-surface-variant);\n}\n\n.g9-header-action__badge {\n position: absolute;\n top: 6px;\n width: 8px;\n height: 8px;\n border-radius: 4px;\n background-color: var(--g9-primary);\n}\n\n.g9-vertical-button {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 5px;\n border-style: solid;\n border-width: 1px;\n border-radius: 9px;\n border-color: var(--g9-surface-container-highest);\n background-color: var(--g9-surface-container);\n}\n\n.g9-vertical-button__text {\n text-align: center;\n color: var(--g9-secondary);\n}\n\n.g9-nav-card {\n display: flex;\n flex-direction: row;\n align-items: center;\n column-gap: 12px;\n padding: 12px 14px;\n border-style: solid;\n border-width: 1px;\n border-radius: 16px;\n border-color: var(--g9-outline-variant);\n}\n\n.g9-nav-card__tile {\n display: flex;\n position: relative;\n align-items: center;\n justify-content: center;\n width: 38px;\n height: 38px;\n border-radius: 12px;\n}\n\n.g9-nav-card__text {\n display: flex;\n flex-direction: column;\n flex: 1;\n row-gap: 2px;\n}\n\n.g9-nav-card__title {\n font-size: 14px;\n font-weight: bold;\n text-overflow: ellipsis;\n}\n\n/* Only while a titleAccessory is set: the title shrinks (and truncates), the accessory keeps its size. */\n.g9-nav-card__title-row {\n display: flex;\n align-items: center;\n column-gap: 8px;\n}\n\n.g9-nav-card__title-row .g9-nav-card__title {\n flex-shrink: 1;\n min-width: 0;\n}\n\n.g9-nav-card__title-accessory {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n}\n\n.g9-nav-card__subtitle {\n font-size: 11.5px;\n color: var(--g9-text-tertiary);\n}\n\n.g9-nav-card__trailing {\n display: flex;\n flex-direction: row;\n align-items: center;\n column-gap: 8px;\n}\n\n.g9-nav-card__value {\n font-size: 13px;\n font-weight: bold;\n}\n\n.g9-nav-card__soon {\n padding: 3.5px 7px;\n border-radius: 11px;\n background-color: var(--g9-error-container);\n}\n\n.g9-nav-card__soon-text {\n font-size: 10px;\n font-weight: bold;\n color: var(--g9-error);\n}\n"],"sourceRoot":""}
@@ -0,0 +1,52 @@
1
+ import './button.css';
2
+ import { type G9ButtonVariant, type G9ControlSize, 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
+ import { type G9FontAttributes } from './visuals.js';
7
+ /** Props of {@link G9Button} (MAUI `G9Button`). */
8
+ export interface G9ButtonProps extends G9ControlBaseProps {
9
+ readonly text?: string | null;
10
+ /** Text next to the spinner while loading; empty shows the spinner only. */
11
+ readonly loadingText?: string | null;
12
+ /** Colour recipe. Default `'primary'`. */
13
+ readonly variant?: G9ButtonVariant;
14
+ /** Height, padding and font preset. Default `'medium'` (44). */
15
+ readonly size?: G9ControlSize;
16
+ readonly leadingEmoji?: string | null;
17
+ readonly leadingIcon?: G9IconInput;
18
+ readonly leadingImagePath?: string | null;
19
+ readonly leadingImage?: G9ImageSource | null;
20
+ readonly trailingEmoji?: string | null;
21
+ readonly trailingIcon?: G9IconInput;
22
+ readonly trailingImagePath?: string | null;
23
+ readonly trailingImage?: G9ImageSource | null;
24
+ /** Spinner instead of the icons, presses blocked, opacity 0.7, flat fill. Default false. */
25
+ readonly isLoading?: boolean;
26
+ /** One line with a tail ellipsis; false keeps the text on one line at its natural width. Default true. */
27
+ readonly textTruncation?: boolean;
28
+ /** Icon slot and spinner size. Default 20. */
29
+ readonly iconSize?: number;
30
+ /** Font size; default the size preset's (12/14/15/16). */
31
+ readonly fontSize?: number;
32
+ /** Default `'bold'`. */
33
+ readonly fontAttributes?: G9FontAttributes;
34
+ /** Overrides the variant fill (transparent → no fill and no border). */
35
+ readonly baseBackgroundColor?: string | null;
36
+ /** Overrides the text, icon and spinner colour. */
37
+ readonly textColor?: string | null;
38
+ /** The press (MAUI `Clicked` + `Command`): exactly once per tap, never while disabled or loading. */
39
+ readonly onPress?: () => void;
40
+ /** Spinner colour; default the text colour (MAUI `G9SafeButton.SpinnerColor`, which MAUI ignored). */
41
+ readonly spinnerColor?: string;
42
+ /** Blocks presses like `disabled` (dims to 0.38) without being `disabled` (safe buttons while busy). */
43
+ readonly blocked?: boolean;
44
+ }
45
+ /**
46
+ * Text button (MAUI `G9Button`): variant fill (gradient for the solid variants), 12 px corners, no shadow, optional
47
+ * leading/trailing icons, loading state with a spinner. One press handler on the root: a tap on the icon or the label
48
+ * fires `onPress` once (MAUI "press must fire"); a second tap within 300 ms is dropped; a throwing handler is
49
+ * reported to diagnostics. Press feedback: scale 0.96 (80 ms) → 1 (150 ms) on the main thread.
50
+ */
51
+ export declare function G9Button(props: G9ButtonProps): ReactNode;
52
+ //# sourceMappingURL=button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../src/button/button.tsx"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAC;AACtB,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAAa,MAAM,+BAA+B,CAAC;AACxH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,KAAK,kBAAkB,EAA4B,MAAM,iBAAiB,CAAC;AAGpF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,OAAO,EAAyC,KAAK,gBAAgB,EAAsB,MAAM,WAAW,CAAC;AAE7G,mDAAmD;AACnD,MAAM,WAAW,aAAc,SAAQ,kBAAkB;IACvD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,4EAA4E;IAC5E,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,0CAA0C;IAC1C,QAAQ,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC;IACnC,gEAAgE;IAChE,QAAQ,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;IACnC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,YAAY,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAC7C,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,YAAY,CAAC,EAAE,WAAW,CAAC;IACpC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9C,4FAA4F;IAC5F,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,0GAA0G;IAC1G,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,8CAA8C;IAC9C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,0DAA0D;IAC1D,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,wBAAwB;IACxB,QAAQ,CAAC,cAAc,CAAC,EAAE,gBAAgB,CAAC;IAC3C,wEAAwE;IACxE,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7C,mDAAmD;IACnD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,qGAAqG;IACrG,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,sGAAsG;IACtG,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,wGAAwG;IACxG,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,CAqFxD"}
@@ -0,0 +1,88 @@
1
+ import "./button.css";
2
+ import { G9Metrics } from "@g9tm/lynxcontrols-foundation";
3
+ import { g9RowStyle, useG9Control } from "../base/control.jsx";
4
+ import { useG9Press, usePressVisual } from "../base/press.jsx";
5
+ import { G9ActivityIndicator } from "../display/activity-indicator.jsx";
6
+ import { G9IconSlot, hasIconSlot } from "../icon/slot.jsx";
7
+ import { useG9Theme } from "../provider/hooks.jsx";
8
+ import { buttonSizePreset, fontAttributesStyle, resolveButtonPaint } from "./visuals.jsx";
9
+ function G9Button(props) {
10
+ var _props_size, _props_variant, _props_loadingText, _props_text, _props_accessibilityLabel, _ref, _props_accessibilityLabel1, _props_spinnerColor, _props_fontAttributes;
11
+ const control = useG9Control(props, 'g9-button');
12
+ const theme = useG9Theme();
13
+ const loading = true === props.isLoading;
14
+ const enabled = !control.disabled && true !== props.blocked;
15
+ const preset = buttonSizePreset(null != (_props_size = props.size) ? _props_size : 'medium');
16
+ const paint = resolveButtonPaint({
17
+ variant: null != (_props_variant = props.variant) ? _props_variant : 'primary',
18
+ palette: theme.palette,
19
+ enabled,
20
+ loading,
21
+ baseBackgroundColor: props.baseBackgroundColor,
22
+ textColor: props.textColor,
23
+ kind: 'button'
24
+ });
25
+ const iconSize = props.iconSize && props.iconSize > 0 ? props.iconSize : G9Metrics.InputIconSize;
26
+ const press = useG9Press(props.onPress, {
27
+ blocked: !enabled || loading,
28
+ source: 'G9Button'
29
+ });
30
+ const visual = usePressVisual({
31
+ property: 'scale',
32
+ rest: 1,
33
+ pressed: 0.96,
34
+ inMs: 80,
35
+ outMs: 150
36
+ }, !enabled || loading);
37
+ const leading = {
38
+ emoji: props.leadingEmoji,
39
+ icon: props.leadingIcon,
40
+ imagePath: props.leadingImagePath,
41
+ image: props.leadingImage
42
+ };
43
+ const trailing = {
44
+ emoji: props.trailingEmoji,
45
+ icon: props.trailingIcon,
46
+ imagePath: props.trailingImagePath,
47
+ image: props.trailingImage
48
+ };
49
+ const label = loading ? null != (_props_loadingText = props.loadingText) ? _props_loadingText : '' : null != (_props_text = props.text) ? _props_text : '';
50
+ const truncate = false !== props.textTruncation;
51
+ return <view className={`${control.className}${preset.fill ? ' g9-button--fill' : ''}`} {...control.idProps} accessibility-element={true} accessibility-traits="button" {...(null != (_props_accessibilityLabel = props.accessibilityLabel) ? _props_accessibilityLabel : props.text) ? {
52
+ 'accessibility-label': null != (_ref = null != (_props_accessibilityLabel1 = props.accessibilityLabel) ? _props_accessibilityLabel1 : props.text) ? _ref : ''
53
+ } : {}} style={{
54
+ ...g9RowStyle(control.direction),
55
+ minHeight: `${preset.height}px`,
56
+ height: `${preset.height}px`,
57
+ background: paint.background,
58
+ borderColor: paint.stroke,
59
+ borderWidth: `${paint.strokeWidth}px`,
60
+ borderRadius: `${G9Metrics.RadiusMd}px`,
61
+ opacity: paint.opacity,
62
+ paddingLeft: `${preset.paddingHorizontal}px`,
63
+ paddingRight: `${preset.paddingHorizontal}px`,
64
+ paddingTop: '0px',
65
+ paddingBottom: '0px'
66
+ }} bindtap={press} {...visual}>
67
+ {loading ? <G9ActivityIndicator running size={iconSize} color={null != (_props_spinnerColor = props.spinnerColor) ? _props_spinnerColor : paint.text}/> : hasIconSlot(leading) ? <G9IconSlot {...leading} size={iconSize} color={paint.text}/> : null}
68
+ {'' !== label.trim() ? <text className="g9-button__label" {...truncate ? {
69
+ 'text-maxline': '1'
70
+ } : {}} style={{
71
+ color: paint.text,
72
+ fontSize: `${props.fontSize && props.fontSize > 0 ? props.fontSize : preset.fontSize}px`,
73
+ ...fontAttributesStyle(null != (_props_fontAttributes = props.fontAttributes) ? _props_fontAttributes : 'bold'),
74
+ ...truncate ? {
75
+ textOverflow: 'ellipsis',
76
+ overflow: 'hidden'
77
+ } : {
78
+ whiteSpace: 'nowrap'
79
+ }
80
+ }}>
81
+ {label}
82
+ </text> : null}
83
+ {!loading && hasIconSlot(trailing) ? <G9IconSlot {...trailing} size={iconSize} color={paint.text}/> : null}
84
+ </view>;
85
+ }
86
+ export { G9Button };
87
+
88
+ //# sourceMappingURL=button.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button/button.jsx","sources":["../../src/button/button.tsx"],"sourcesContent":["import './button.css';\nimport { type G9ButtonVariant, type G9ControlSize, type G9ImageSource, G9Metrics } from '@g9tm/lynxcontrols-foundation';\nimport type { ReactNode } from '@lynx-js/react';\nimport { type G9ControlBaseProps, g9RowStyle, useG9Control } from '../base/control';\nimport { useG9Press, usePressVisual } from '../base/press';\nimport { G9ActivityIndicator } from '../display/activity-indicator';\nimport type { G9IconInput } from '../icon/icon';\nimport { G9IconSlot, hasIconSlot } from '../icon/slot';\nimport { useG9Theme } from '../provider/hooks';\nimport { buttonSizePreset, fontAttributesStyle, type G9FontAttributes, resolveButtonPaint } from './visuals';\n\n/** Props of {@link G9Button} (MAUI `G9Button`). */\nexport interface G9ButtonProps extends G9ControlBaseProps {\n readonly text?: string | null;\n /** Text next to the spinner while loading; empty shows the spinner only. */\n readonly loadingText?: string | null;\n /** Colour recipe. Default `'primary'`. */\n readonly variant?: G9ButtonVariant;\n /** Height, padding and font preset. Default `'medium'` (44). */\n readonly size?: G9ControlSize;\n readonly leadingEmoji?: string | null;\n readonly leadingIcon?: G9IconInput;\n readonly leadingImagePath?: string | null;\n readonly leadingImage?: G9ImageSource | null;\n readonly trailingEmoji?: string | null;\n readonly trailingIcon?: G9IconInput;\n readonly trailingImagePath?: string | null;\n readonly trailingImage?: G9ImageSource | null;\n /** Spinner instead of the icons, presses blocked, opacity 0.7, flat fill. Default false. */\n readonly isLoading?: boolean;\n /** One line with a tail ellipsis; false keeps the text on one line at its natural width. Default true. */\n readonly textTruncation?: boolean;\n /** Icon slot and spinner size. Default 20. */\n readonly iconSize?: number;\n /** Font size; default the size preset's (12/14/15/16). */\n readonly fontSize?: number;\n /** Default `'bold'`. */\n readonly fontAttributes?: G9FontAttributes;\n /** Overrides the variant fill (transparent → no fill and no border). */\n readonly baseBackgroundColor?: string | null;\n /** Overrides the text, icon and spinner colour. */\n readonly textColor?: string | null;\n /** The press (MAUI `Clicked` + `Command`): exactly once per tap, never while disabled or loading. */\n readonly onPress?: () => void;\n /** Spinner colour; default the text colour (MAUI `G9SafeButton.SpinnerColor`, which MAUI ignored). */\n readonly spinnerColor?: string;\n /** Blocks presses like `disabled` (dims to 0.38) without being `disabled` (safe buttons while busy). */\n readonly blocked?: boolean;\n}\n\n/**\n * Text button (MAUI `G9Button`): variant fill (gradient for the solid variants), 12 px corners, no shadow, optional\n * leading/trailing icons, loading state with a spinner. One press handler on the root: a tap on the icon or the label\n * fires `onPress` once (MAUI \"press must fire\"); a second tap within 300 ms is dropped; a throwing handler is\n * reported to diagnostics. Press feedback: scale 0.96 (80 ms) → 1 (150 ms) on the main thread.\n */\nexport function G9Button(props: G9ButtonProps): ReactNode {\n const control = useG9Control(props, 'g9-button');\n const theme = useG9Theme();\n const loading = props.isLoading === true;\n const enabled = !control.disabled && props.blocked !== true;\n const preset = buttonSizePreset(props.size ?? 'medium');\n const paint = resolveButtonPaint({\n variant: props.variant ?? 'primary',\n palette: theme.palette,\n enabled,\n loading,\n baseBackgroundColor: props.baseBackgroundColor,\n textColor: props.textColor,\n kind: 'button',\n });\n const iconSize = props.iconSize && props.iconSize > 0 ? props.iconSize : G9Metrics.InputIconSize;\n const press = useG9Press(props.onPress, { blocked: !enabled || loading, source: 'G9Button' });\n const visual = usePressVisual(\n { property: 'scale', rest: 1, pressed: 0.96, inMs: 80, outMs: 150 },\n !enabled || loading,\n );\n const leading = {\n emoji: props.leadingEmoji,\n icon: props.leadingIcon,\n imagePath: props.leadingImagePath,\n image: props.leadingImage,\n };\n const trailing = {\n emoji: props.trailingEmoji,\n icon: props.trailingIcon,\n imagePath: props.trailingImagePath,\n image: props.trailingImage,\n };\n const label = loading ? (props.loadingText ?? '') : (props.text ?? '');\n const truncate = props.textTruncation !== false;\n return (\n <view\n className={`${control.className}${preset.fill ? ' g9-button--fill' : ''}`}\n {...control.idProps}\n accessibility-element={true}\n accessibility-traits=\"button\"\n {...((props.accessibilityLabel ?? props.text)\n ? { 'accessibility-label': props.accessibilityLabel ?? props.text ?? '' }\n : {})}\n style={{\n ...g9RowStyle(control.direction),\n // MAUI ApplySize: HeightRequest = the preset (52 hero, 44 medium…), the padding a margin around the row — the\n // button never grows with its label (a min-height let hero buttons grow to ~57 dp from the 16 px padding).\n minHeight: `${preset.height}px`,\n height: `${preset.height}px`,\n background: paint.background,\n borderColor: paint.stroke,\n borderWidth: `${paint.strokeWidth}px`,\n borderRadius: `${G9Metrics.RadiusMd}px`,\n opacity: paint.opacity,\n paddingLeft: `${preset.paddingHorizontal}px`,\n paddingRight: `${preset.paddingHorizontal}px`,\n paddingTop: '0px',\n paddingBottom: '0px',\n }}\n bindtap={press}\n {...visual}\n >\n {loading ? (\n <G9ActivityIndicator running size={iconSize} color={props.spinnerColor ?? paint.text} />\n ) : hasIconSlot(leading) ? (\n <G9IconSlot {...leading} size={iconSize} color={paint.text} />\n ) : null}\n {label.trim() !== '' ? (\n <text\n className=\"g9-button__label\"\n {...(truncate ? { 'text-maxline': '1' } : {})}\n style={{\n color: paint.text,\n fontSize: `${props.fontSize && props.fontSize > 0 ? props.fontSize : preset.fontSize}px`,\n ...fontAttributesStyle(props.fontAttributes ?? 'bold'),\n ...(truncate ? { textOverflow: 'ellipsis', overflow: 'hidden' } : { whiteSpace: 'nowrap' }),\n }}\n >\n {label}\n </text>\n ) : null}\n {!loading && hasIconSlot(trailing) ? <G9IconSlot {...trailing} size={iconSize} color={paint.text} /> : null}\n </view>\n );\n}\n"],"names":["G9Button","props","_props_size","_props_variant","_props_loadingText","_props_text","_props_accessibilityLabel","_ref","_props_spinnerColor","_props_fontAttributes","control","useG9Control","theme","useG9Theme","loading","enabled","preset","buttonSizePreset","paint","resolveButtonPaint","iconSize","G9Metrics","press","useG9Press","visual","usePressVisual","leading","trailing","label","truncate","view","g9RowStyle","G9ActivityIndicator","hasIconSlot","G9IconSlot","text","fontAttributesStyle"],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import './button.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
+ /** MAUI `G9LayoutMetrics.ToolbarIconSize` / `ToolbarButtonSize`. */
7
+ export declare const g9ToolbarIconSize = 24;
8
+ /** Touch box of a toolbar / header action button (MAUI `G9LayoutMetrics.ToolbarButtonSize`). */
9
+ export declare const g9ToolbarButtonSize = 42;
10
+ /** Props of {@link G9HeaderActionButton} (MAUI `G9HeaderActionButton`). */
11
+ export interface G9HeaderActionButtonProps extends G9ControlBaseProps {
12
+ /** Glyph shown when there is no image and no text. Default `G9Glyph.Menu`. */
13
+ readonly icon?: G9IconInput;
14
+ /** Image; wins over text and glyph. */
15
+ readonly iconImage?: G9ImageSource | null;
16
+ /** Bold 13 label (wins over the glyph). */
17
+ readonly buttonText?: string | null;
18
+ /** Spinner instead of the content; presses blocked. Default false. */
19
+ readonly isBusy?: boolean;
20
+ /** Tinted active state. Default false. */
21
+ readonly isActive?: boolean;
22
+ /** The 8 px dot while active. Default true. */
23
+ readonly showActiveBadge?: boolean;
24
+ /** Scale 0.92 (70 ms) → 1 (90 ms) on press. Default true. */
25
+ readonly animatePress?: boolean;
26
+ /** Default 24. */
27
+ readonly iconSize?: number;
28
+ /** Square size; ≤ 0 → 42 (MAUI `ToolbarButtonSize`). Default 0. */
29
+ readonly buttonSize?: number;
30
+ readonly onPress?: () => void;
31
+ }
32
+ /** Toolbar/header action (MAUI `G9HeaderActionButton`): bordered square with a glyph, image or short text. */
33
+ export declare function G9HeaderActionButton(props: G9HeaderActionButtonProps): ReactNode;
34
+ //# sourceMappingURL=header-action-button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header-action-button.d.ts","sourceRoot":"","sources":["../../src/button/header-action-button.tsx"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAC;AACtB,OAAO,EAAwB,KAAK,aAAa,EAAa,MAAM,+BAA+B,CAAC;AACpG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,KAAK,kBAAkB,EAAgB,MAAM,iBAAiB,CAAC;AAGxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAIhD,oEAAoE;AACpE,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,gGAAgG;AAChG,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC,2EAA2E;AAC3E,MAAM,WAAW,yBAA0B,SAAQ,kBAAkB;IACnE,8EAA8E;IAC9E,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC;IAC5B,uCAAuC;IACvC,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAC1C,2CAA2C;IAC3C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,sEAAsE;IACtE,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,0CAA0C;IAC1C,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,+CAA+C;IAC/C,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,6DAA6D;IAC7D,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,kBAAkB;IAClB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,mEAAmE;IACnE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CAC/B;AAED,8GAA8G;AAC9G,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,GAAG,SAAS,CA+ChF"}
@@ -0,0 +1,51 @@
1
+ import "./button.css";
2
+ import { G9Glyph, formatColor, withAlpha } from "@g9tm/lynxcontrols-foundation";
3
+ import { useG9Control } from "../base/control.jsx";
4
+ import { useG9Press, usePressVisual } from "../base/press.jsx";
5
+ import { G9ActivityIndicator } from "../display/activity-indicator.jsx";
6
+ import { G9IconSlot } from "../icon/slot.jsx";
7
+ import { useG9Theme } from "../provider/hooks.jsx";
8
+ const g9ToolbarIconSize = 24;
9
+ const g9ToolbarButtonSize = 42;
10
+ function G9HeaderActionButton(props) {
11
+ var _props_iconSize, _props_buttonText, _props_icon, _props_accessibilityLabel, _props_accessibilityLabel1;
12
+ const control = useG9Control(props, 'g9-header-action');
13
+ const palette = useG9Theme().palette;
14
+ const busy = true === props.isBusy;
15
+ const active = true === props.isActive;
16
+ const size = props.buttonSize && props.buttonSize > 0 ? props.buttonSize : g9ToolbarButtonSize;
17
+ const iconSize = null != (_props_iconSize = props.iconSize) ? _props_iconSize : g9ToolbarIconSize;
18
+ const press = useG9Press(props.onPress, {
19
+ blocked: control.disabled || busy,
20
+ source: 'G9HeaderActionButton'
21
+ });
22
+ const visual = usePressVisual({
23
+ property: 'scale',
24
+ rest: 1,
25
+ pressed: 0.92,
26
+ inMs: 70,
27
+ outMs: 90
28
+ }, control.disabled || busy || false === props.animatePress);
29
+ const text1 = null != (_props_buttonText = props.buttonText) ? _props_buttonText : '';
30
+ let content;
31
+ content = busy ? <G9ActivityIndicator running size={20} color="var(--g9-on-surface-variant)"/> : props.iconImage ? <G9IconSlot image={props.iconImage} size={iconSize}/> : '' !== text1.trim() ? <text className="g9-header-action__text">{text1}</text> : <G9IconSlot icon={null != (_props_icon = props.icon) ? _props_icon : G9Glyph.Menu} size={iconSize} color="var(--g9-on-surface-variant)"/>;
32
+ return <view className={control.className} {...control.idProps} style={{
33
+ width: `${size}px`,
34
+ height: `${size}px`,
35
+ opacity: control.disabled || busy ? 0.5 : 1,
36
+ ...active ? {
37
+ backgroundColor: formatColor(withAlpha(palette.Primary, 0.12)),
38
+ borderColor: formatColor(withAlpha(palette.Primary, 0.38))
39
+ } : {}
40
+ }} accessibility-element={true} accessibility-traits="button" {...(null != (_props_accessibilityLabel = props.accessibilityLabel) ? _props_accessibilityLabel : text1 || void 0) ? {
41
+ 'accessibility-label': null != (_props_accessibilityLabel1 = props.accessibilityLabel) ? _props_accessibilityLabel1 : text1
42
+ } : {}} bindtap={press} {...visual}>
43
+ {content}
44
+ {active && false !== props.showActiveBadge ? <view className="g9-header-action__badge" style={{
45
+ ['rtl' === control.direction ? 'left' : 'right']: '6px'
46
+ }}/> : null}
47
+ </view>;
48
+ }
49
+ export { G9HeaderActionButton, g9ToolbarButtonSize, g9ToolbarIconSize };
50
+
51
+ //# sourceMappingURL=header-action-button.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button/header-action-button.jsx","sources":["../../src/button/header-action-button.tsx"],"sourcesContent":["import './button.css';\nimport { formatColor, G9Glyph, type G9ImageSource, withAlpha } from '@g9tm/lynxcontrols-foundation';\nimport type { ReactNode } from '@lynx-js/react';\nimport { type G9ControlBaseProps, useG9Control } from '../base/control';\nimport { useG9Press, usePressVisual } from '../base/press';\nimport { G9ActivityIndicator } from '../display/activity-indicator';\nimport type { G9IconInput } from '../icon/icon';\nimport { G9IconSlot } from '../icon/slot';\nimport { useG9Theme } from '../provider/hooks';\n\n/** MAUI `G9LayoutMetrics.ToolbarIconSize` / `ToolbarButtonSize`. */\nexport const g9ToolbarIconSize = 24;\n/** Touch box of a toolbar / header action button (MAUI `G9LayoutMetrics.ToolbarButtonSize`). */\nexport const g9ToolbarButtonSize = 42;\n\n/** Props of {@link G9HeaderActionButton} (MAUI `G9HeaderActionButton`). */\nexport interface G9HeaderActionButtonProps extends G9ControlBaseProps {\n /** Glyph shown when there is no image and no text. Default `G9Glyph.Menu`. */\n readonly icon?: G9IconInput;\n /** Image; wins over text and glyph. */\n readonly iconImage?: G9ImageSource | null;\n /** Bold 13 label (wins over the glyph). */\n readonly buttonText?: string | null;\n /** Spinner instead of the content; presses blocked. Default false. */\n readonly isBusy?: boolean;\n /** Tinted active state. Default false. */\n readonly isActive?: boolean;\n /** The 8 px dot while active. Default true. */\n readonly showActiveBadge?: boolean;\n /** Scale 0.92 (70 ms) → 1 (90 ms) on press. Default true. */\n readonly animatePress?: boolean;\n /** Default 24. */\n readonly iconSize?: number;\n /** Square size; ≤ 0 → 42 (MAUI `ToolbarButtonSize`). Default 0. */\n readonly buttonSize?: number;\n readonly onPress?: () => void;\n}\n\n/** Toolbar/header action (MAUI `G9HeaderActionButton`): bordered square with a glyph, image or short text. */\nexport function G9HeaderActionButton(props: G9HeaderActionButtonProps): ReactNode {\n const control = useG9Control(props, 'g9-header-action');\n const palette = useG9Theme().palette;\n const busy = props.isBusy === true;\n const active = props.isActive === true;\n const size = props.buttonSize && props.buttonSize > 0 ? props.buttonSize : g9ToolbarButtonSize;\n const iconSize = props.iconSize ?? g9ToolbarIconSize;\n const press = useG9Press(props.onPress, { blocked: control.disabled || busy, source: 'G9HeaderActionButton' });\n const visual = usePressVisual(\n { property: 'scale', rest: 1, pressed: 0.92, inMs: 70, outMs: 90 },\n control.disabled || busy || props.animatePress === false,\n );\n const text = props.buttonText ?? '';\n let content: ReactNode;\n if (busy) content = <G9ActivityIndicator running size={20} color=\"var(--g9-on-surface-variant)\" />;\n else if (props.iconImage) content = <G9IconSlot image={props.iconImage} size={iconSize} />;\n else if (text.trim() !== '') content = <text className=\"g9-header-action__text\">{text}</text>;\n else content = <G9IconSlot icon={props.icon ?? G9Glyph.Menu} size={iconSize} color=\"var(--g9-on-surface-variant)\" />;\n return (\n <view\n className={control.className}\n {...control.idProps}\n style={{\n width: `${size}px`,\n height: `${size}px`,\n opacity: control.disabled || busy ? 0.5 : 1,\n ...(active\n ? {\n backgroundColor: formatColor(withAlpha(palette.Primary, 0.12)),\n borderColor: formatColor(withAlpha(palette.Primary, 0.38)),\n }\n : {}),\n }}\n accessibility-element={true}\n accessibility-traits=\"button\"\n {...((props.accessibilityLabel ?? (text || undefined))\n ? { 'accessibility-label': props.accessibilityLabel ?? text }\n : {})}\n bindtap={press}\n {...visual}\n >\n {content}\n {active && props.showActiveBadge !== false ? (\n <view className=\"g9-header-action__badge\" style={{ [control.direction === 'rtl' ? 'left' : 'right']: '6px' }} />\n ) : null}\n </view>\n );\n}\n"],"names":["g9ToolbarIconSize","g9ToolbarButtonSize","G9HeaderActionButton","props","_props_iconSize","_props_buttonText","_props_icon","_props_accessibilityLabel","_props_accessibilityLabel1","control","useG9Control","palette","useG9Theme","busy","active","size","iconSize","press","useG9Press","visual","usePressVisual","text1","content","G9ActivityIndicator","G9IconSlot","text","G9Glyph","view","formatColor","withAlpha","undefined"],"mappings":";;;;;;;AAWO,MAAMA,oBAAoB;AAE1B,MAAMC,sBAAsB;AA0B5B,SAASC,qBAAqBC,KAAgC;QAMlDC,iBAMJC,mBAKoBC,aAkBvBC,2BACuBC;IAnCjC,MAAMC,UAAUC,aAAaP,OAAO;IACpC,MAAMQ,UAAUC,aAAa,OAAO;IACpC,MAAMC,OAAOV,AAAiB,SAAjBA,MAAM,MAAM;IACzB,MAAMW,SAASX,AAAmB,SAAnBA,MAAM,QAAQ;IAC7B,MAAMY,OAAOZ,MAAM,UAAU,IAAIA,MAAM,UAAU,GAAG,IAAIA,MAAM,UAAU,GAAGF;IAC3E,MAAMe,WAAW,QAAAZ,CAAAA,kBAAAA,MAAM,QAAQ,AAAD,IAAbA,kBAAkBJ;IACnC,MAAMiB,QAAQC,WAAWf,MAAM,OAAO,EAAE;QAAE,SAASM,QAAQ,QAAQ,IAAII;QAAM,QAAQ;IAAuB;IAC5G,MAAMM,SAASC,eACb;QAAE,UAAU;QAAS,MAAM;QAAG,SAAS;QAAM,MAAM;QAAI,OAAO;IAAG,GACjEX,QAAQ,QAAQ,IAAII,QAAQV,AAAuB,UAAvBA,MAAM,YAAY;IAEhD,MAAMkB,QAAAA,QAAOhB,CAAAA,oBAAAA,MAAM,UAAU,AAAD,IAAfA,oBAAoB;IACjC,IAAIiB;IACMA,UAANT,QAAiBU,oBAAoB,QAAQ,MAAM,IAAI,MAAM,mCACxDpB,MAAM,SAAS,IAAaqB,WAAW,OAAOrB,MAAM,SAAS,EAAE,MAAMa,cACrEK,AAAgB,OAAhBA,MAAK,IAAI,MAAsBI,KAAK,UAAU,0BAA0BJ,QAAOI,SACxED,WAAW,MAAM,QAAAlB,CAAAA,cAAAA,MAAM,IAAI,AAAD,IAATA,cAAcoB,QAAQ,IAAI,EAAE,MAAMV,UAAU,MAAM;IACnF,QACGW,KACC,WAAWlB,QAAQ,SAAS,GAC3B,GAAGA,QAAQ,OAAO,EACnB,OAAO;QACL,OAAO,GAAGM,KAAK,EAAE,CAAC;QAClB,QAAQ,GAAGA,KAAK,EAAE,CAAC;QACnB,SAASN,QAAQ,QAAQ,IAAII,OAAO,MAAM;QAC1C,GAAIC,SACA;YACE,iBAAiBc,YAAYC,UAAUlB,QAAQ,OAAO,EAAE;YACxD,aAAaiB,YAAYC,UAAUlB,QAAQ,OAAO,EAAE;QACtD,IACA,CAAC,CAAC;IACR,GACA,uBAAuB,MACvB,qBAAqB,UACpB,GAAI,AAAC,SAAAJ,CAAAA,4BAAAA,MAAM,kBAAkB,AAAD,IAAvBA,4BAA6Bc,SAAQS,MAAQ,IAC/C;QAAE,uBAAuB,QAAAtB,CAAAA,6BAAAA,MAAM,kBAAkB,AAAD,IAAvBA,6BAA4Ba;IAAK,IAC1D,CAAC,CAAC,EACN,SAASJ,QACR,GAAGE,MAAM,EACX;MACC,CAACG,QAAQ;MACT,CAACR,UAAUX,AAA0B,UAA1BA,MAAM,eAAe,IAC7BwB,KAAK,UAAU,0BAA0B,OAAO;QAAE,CAAClB,AAAsB,UAAtBA,QAAQ,SAAS,GAAa,SAAS,QAAQ,EAAE;IAAM,OACzG,KAAK;IACX,EAAEkB;AAEN"}
@@ -0,0 +1,46 @@
1
+ import './button.css';
2
+ import { type G9ButtonVariant, 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
+ /** Props of {@link G9IconButton} (MAUI `G9IconButton`). */
7
+ export interface G9IconButtonProps extends G9ControlBaseProps {
8
+ readonly emoji?: string | null;
9
+ readonly icon?: G9IconInput;
10
+ readonly imagePath?: string | null;
11
+ readonly image?: G9ImageSource | null;
12
+ /** Icon and spinner size; ≤ 0 → 20. Default 20. */
13
+ readonly iconSize?: number;
14
+ /** Square frame size; ≤ 0 → 40. Default 40. */
15
+ readonly buttonSize?: number;
16
+ /** Transparent, no stroke, icon in `textSecondary`. Default false. */
17
+ readonly isGhost?: boolean;
18
+ /** Default `'surface'`. */
19
+ readonly variant?: G9ButtonVariant;
20
+ /** Fully round instead of 12 px corners. Default false. */
21
+ readonly isCircular?: boolean;
22
+ /** Measured (touch) size when larger than the drawn frame; the frame stays centred. Default 0. */
23
+ readonly minimumTouchTarget?: number;
24
+ readonly baseBackgroundColor?: string | null;
25
+ /** Icon colour override. */
26
+ readonly textColor?: string | null;
27
+ readonly isLoading?: boolean;
28
+ /** Count badge on the top-trailing corner; wins over the dot. */
29
+ readonly badgeText?: string | null;
30
+ readonly showBadgeDot?: boolean;
31
+ /** Default `var(--g9-error)`. */
32
+ readonly badgeColor?: string | null;
33
+ /** Default true. */
34
+ readonly mirrorBadgeTextInRtl?: boolean;
35
+ /** Accessibility name (MAUI `AccessibilityText`); `accessibilityLabel` is an alias. */
36
+ readonly accessibilityText?: string | null;
37
+ readonly onPress?: () => void;
38
+ readonly blocked?: boolean;
39
+ }
40
+ /**
41
+ * Square icon button (MAUI `G9IconButton`): one icon, variant/ghost fill, optional circle, corner badge that is never
42
+ * dimmed (opacity applies to the frame only), loading spinner, minimum touch target. Press: one handler on the root,
43
+ * scale 0.82 (80 ms) → 1 (150 ms). Accessibility hint: "Loading" while loading, else the badge text.
44
+ */
45
+ export declare function G9IconButton(props: G9IconButtonProps): ReactNode;
46
+ //# sourceMappingURL=icon-button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icon-button.d.ts","sourceRoot":"","sources":["../../src/button/icon-button.tsx"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAC;AACtB,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,aAAa,EAA0B,MAAM,+BAA+B,CAAC;AACjH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,KAAK,kBAAkB,EAAgB,MAAM,iBAAiB,CAAC;AAIxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAKhD,2DAA2D;AAC3D,MAAM,WAAW,iBAAkB,SAAQ,kBAAkB;IAC3D,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IACtC,mDAAmD;IACnD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,+CAA+C;IAC/C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,sEAAsE;IACtE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,2BAA2B;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC;IACnC,2DAA2D;IAC3D,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,kGAAkG;IAClG,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7C,4BAA4B;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,iEAAiE;IACjE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,iCAAiC;IACjC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,oBAAoB;IACpB,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IACxC,uFAAuF;IACvF,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,SAAS,CA2EhE"}
@@ -0,0 +1,69 @@
1
+ import "./button.css";
2
+ import { G9Metrics, G9StringKey } from "@g9tm/lynxcontrols-foundation";
3
+ import { useG9Control } from "../base/control.jsx";
4
+ import { G9CornerBadge } from "../base/corner-badge.jsx";
5
+ import { useG9Press, usePressVisual } from "../base/press.jsx";
6
+ import { G9ActivityIndicator } from "../display/activity-indicator.jsx";
7
+ import { G9IconSlot } from "../icon/slot.jsx";
8
+ import { useG9Strings, useG9Theme } from "../provider/hooks.jsx";
9
+ import { resolveButtonPaint } from "./visuals.jsx";
10
+ function G9IconButton(props) {
11
+ var _props_variant, _props_textColor, _props_minimumTouchTarget, _props_accessibilityText, _props_badgeText;
12
+ const control = useG9Control(props, 'g9-icon-button');
13
+ const theme = useG9Theme();
14
+ const strings = useG9Strings();
15
+ const loading = true === props.isLoading;
16
+ const enabled = !control.disabled && true !== props.blocked;
17
+ const size = props.buttonSize && props.buttonSize > 0 ? props.buttonSize : 40;
18
+ const iconSize = props.iconSize && props.iconSize > 0 ? props.iconSize : G9Metrics.InputIconSize;
19
+ const ghost = true === props.isGhost;
20
+ const paint = resolveButtonPaint({
21
+ variant: null != (_props_variant = props.variant) ? _props_variant : 'surface',
22
+ palette: theme.palette,
23
+ enabled,
24
+ loading,
25
+ baseBackgroundColor: ghost ? 'rgba(0,0,0,0)' : props.baseBackgroundColor,
26
+ textColor: null != (_props_textColor = props.textColor) ? _props_textColor : ghost ? theme.palette.TextSecondary : null,
27
+ kind: 'icon'
28
+ });
29
+ const press = useG9Press(props.onPress, {
30
+ blocked: !enabled || loading,
31
+ source: 'G9IconButton'
32
+ });
33
+ const visual = usePressVisual({
34
+ property: 'scale',
35
+ rest: 1,
36
+ pressed: 0.82,
37
+ inMs: 80,
38
+ outMs: 150
39
+ }, !enabled || loading);
40
+ const touch = Math.max(null != (_props_minimumTouchTarget = props.minimumTouchTarget) ? _props_minimumTouchTarget : 0, size);
41
+ const name = null != (_props_accessibilityText = props.accessibilityText) ? _props_accessibilityText : props.accessibilityLabel;
42
+ const hint = loading ? strings.get(G9StringKey.Loading) : null != (_props_badgeText = props.badgeText) ? _props_badgeText : void 0;
43
+ return <view className={control.className} {...control.idProps} style={{
44
+ minWidth: `${touch}px`,
45
+ minHeight: `${touch}px`
46
+ }} accessibility-element={true} accessibility-traits="button" {...name ? {
47
+ 'accessibility-label': name
48
+ } : {}} {...hint ? {
49
+ 'accessibility-value': hint
50
+ } : {}} bindtap={press} {...visual}>
51
+ <view className="g9-icon-button__host">
52
+ <view className="g9-icon-button__frame" style={{
53
+ width: `${size}px`,
54
+ height: `${size}px`,
55
+ background: paint.background,
56
+ borderColor: paint.stroke,
57
+ borderWidth: `${paint.strokeWidth}px`,
58
+ borderRadius: `${props.isCircular ? size / 2 : G9Metrics.RadiusMd}px`,
59
+ opacity: paint.opacity
60
+ }}>
61
+ {loading ? <G9ActivityIndicator running size={iconSize} color={paint.text}/> : <G9IconSlot emoji={props.emoji} icon={props.icon} imagePath={props.imagePath} image={props.image} size={iconSize} color={paint.text}/>}
62
+ </view>
63
+ <G9CornerBadge text={props.badgeText} dot={true === props.showBadgeDot} color={props.badgeColor} textColor="#FFFFFF" ringColor={ghost ? 'var(--g9-background)' : 'var(--g9-surface)'} mirrorTextInRtl={false !== props.mirrorBadgeTextInRtl}/>
64
+ </view>
65
+ </view>;
66
+ }
67
+ export { G9IconButton };
68
+
69
+ //# sourceMappingURL=icon-button.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button/icon-button.jsx","sources":["../../src/button/icon-button.tsx"],"sourcesContent":["import './button.css';\nimport { type G9ButtonVariant, type G9ImageSource, G9Metrics, G9StringKey } from '@g9tm/lynxcontrols-foundation';\nimport type { ReactNode } from '@lynx-js/react';\nimport { type G9ControlBaseProps, useG9Control } from '../base/control';\nimport { G9CornerBadge } from '../base/corner-badge';\nimport { useG9Press, usePressVisual } from '../base/press';\nimport { G9ActivityIndicator } from '../display/activity-indicator';\nimport type { G9IconInput } from '../icon/icon';\nimport { G9IconSlot } from '../icon/slot';\nimport { useG9Strings, useG9Theme } from '../provider/hooks';\nimport { resolveButtonPaint } from './visuals';\n\n/** Props of {@link G9IconButton} (MAUI `G9IconButton`). */\nexport interface G9IconButtonProps extends G9ControlBaseProps {\n readonly emoji?: string | null;\n readonly icon?: G9IconInput;\n readonly imagePath?: string | null;\n readonly image?: G9ImageSource | null;\n /** Icon and spinner size; ≤ 0 → 20. Default 20. */\n readonly iconSize?: number;\n /** Square frame size; ≤ 0 → 40. Default 40. */\n readonly buttonSize?: number;\n /** Transparent, no stroke, icon in `textSecondary`. Default false. */\n readonly isGhost?: boolean;\n /** Default `'surface'`. */\n readonly variant?: G9ButtonVariant;\n /** Fully round instead of 12 px corners. Default false. */\n readonly isCircular?: boolean;\n /** Measured (touch) size when larger than the drawn frame; the frame stays centred. Default 0. */\n readonly minimumTouchTarget?: number;\n readonly baseBackgroundColor?: string | null;\n /** Icon colour override. */\n readonly textColor?: string | null;\n readonly isLoading?: boolean;\n /** Count badge on the top-trailing corner; wins over the dot. */\n readonly badgeText?: string | null;\n readonly showBadgeDot?: boolean;\n /** Default `var(--g9-error)`. */\n readonly badgeColor?: string | null;\n /** Default true. */\n readonly mirrorBadgeTextInRtl?: boolean;\n /** Accessibility name (MAUI `AccessibilityText`); `accessibilityLabel` is an alias. */\n readonly accessibilityText?: string | null;\n readonly onPress?: () => void;\n readonly blocked?: boolean;\n}\n\n/**\n * Square icon button (MAUI `G9IconButton`): one icon, variant/ghost fill, optional circle, corner badge that is never\n * dimmed (opacity applies to the frame only), loading spinner, minimum touch target. Press: one handler on the root,\n * scale 0.82 (80 ms) → 1 (150 ms). Accessibility hint: \"Loading\" while loading, else the badge text.\n */\nexport function G9IconButton(props: G9IconButtonProps): ReactNode {\n const control = useG9Control(props, 'g9-icon-button');\n const theme = useG9Theme();\n const strings = useG9Strings();\n const loading = props.isLoading === true;\n const enabled = !control.disabled && props.blocked !== true;\n const size = props.buttonSize && props.buttonSize > 0 ? props.buttonSize : 40;\n const iconSize = props.iconSize && props.iconSize > 0 ? props.iconSize : G9Metrics.InputIconSize;\n const ghost = props.isGhost === true;\n const paint = resolveButtonPaint({\n variant: props.variant ?? 'surface',\n palette: theme.palette,\n enabled,\n loading,\n baseBackgroundColor: ghost ? 'rgba(0,0,0,0)' : props.baseBackgroundColor,\n textColor: props.textColor ?? (ghost ? theme.palette.TextSecondary : null),\n kind: 'icon',\n });\n const press = useG9Press(props.onPress, { blocked: !enabled || loading, source: 'G9IconButton' });\n const visual = usePressVisual(\n { property: 'scale', rest: 1, pressed: 0.82, inMs: 80, outMs: 150 },\n !enabled || loading,\n );\n const touch = Math.max(props.minimumTouchTarget ?? 0, size);\n const name = props.accessibilityText ?? props.accessibilityLabel;\n const hint = loading ? strings.get(G9StringKey.Loading) : (props.badgeText ?? undefined);\n return (\n <view\n className={control.className}\n {...control.idProps}\n style={{ minWidth: `${touch}px`, minHeight: `${touch}px` }}\n accessibility-element={true}\n accessibility-traits=\"button\"\n {...(name ? { 'accessibility-label': name } : {})}\n {...(hint ? { 'accessibility-value': hint } : {})}\n bindtap={press}\n {...visual}\n >\n <view className=\"g9-icon-button__host\">\n <view\n className=\"g9-icon-button__frame\"\n style={{\n width: `${size}px`,\n height: `${size}px`,\n background: paint.background,\n borderColor: paint.stroke,\n borderWidth: `${paint.strokeWidth}px`,\n borderRadius: `${props.isCircular ? size / 2 : G9Metrics.RadiusMd}px`,\n opacity: paint.opacity,\n }}\n >\n {loading ? (\n <G9ActivityIndicator running size={iconSize} color={paint.text} />\n ) : (\n <G9IconSlot\n emoji={props.emoji}\n icon={props.icon}\n imagePath={props.imagePath}\n image={props.image}\n size={iconSize}\n color={paint.text}\n />\n )}\n </view>\n <G9CornerBadge\n text={props.badgeText}\n dot={props.showBadgeDot === true}\n color={props.badgeColor}\n textColor=\"#FFFFFF\"\n ringColor={ghost ? 'var(--g9-background)' : 'var(--g9-surface)'}\n mirrorTextInRtl={props.mirrorBadgeTextInRtl !== false}\n />\n </view>\n </view>\n );\n}\n"],"names":["G9IconButton","props","_props_variant","_props_textColor","_props_minimumTouchTarget","_props_accessibilityText","_props_badgeText","control","useG9Control","theme","useG9Theme","strings","useG9Strings","loading","enabled","size","iconSize","G9Metrics","ghost","paint","resolveButtonPaint","press","useG9Press","visual","usePressVisual","touch","Math","name","hint","G9StringKey","undefined","view","G9ActivityIndicator","G9IconSlot","G9CornerBadge"],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export { G9Button, type G9ButtonProps } from './button.js';
2
+ export { G9HeaderActionButton, type G9HeaderActionButtonProps, g9ToolbarButtonSize, g9ToolbarIconSize, } from './header-action-button.js';
3
+ export { G9IconButton, type G9IconButtonProps } from './icon-button.js';
4
+ export { G9NavCard, type G9NavCardProps } from './nav-card.js';
5
+ export { G9SafeButton, type G9SafeButtonHandle, type G9SafeButtonProps, G9SafeButtonType, type G9SafeExecuteHandler, type G9SafeExecutionProps, G9SafeIconButton, type G9SafeIconButtonProps, useSafeExecution, } from './safe.js';
6
+ export { type G9SafeTapOptions, useSafeTap } from './safe-tap.js';
7
+ export { G9VerticalIconTextButton, type G9VerticalIconTextButtonProps } from './vertical-icon-text-button.js';
8
+ export { buttonSizePreset, fontAttributesStyle, type G9ButtonPaint, type G9ButtonPaintInput, type G9ButtonSizePreset, type G9FontAttributes, resolveButtonPaint, } from './visuals.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/button/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EACL,oBAAoB,EACpB,KAAK,yBAAyB,EAC9B,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EACL,YAAY,EACZ,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,gBAAgB,EAChB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,gBAAgB,GACjB,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,KAAK,gBAAgB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,KAAK,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC3G,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,kBAAkB,GACnB,MAAM,WAAW,CAAC"}
@@ -0,0 +1,8 @@
1
+ export { G9Button } from "./button.jsx";
2
+ export { G9HeaderActionButton, g9ToolbarButtonSize, g9ToolbarIconSize } from "./header-action-button.jsx";
3
+ export { G9IconButton } from "./icon-button.jsx";
4
+ export { G9NavCard } from "./nav-card.jsx";
5
+ export { G9SafeButton, G9SafeButtonType, G9SafeIconButton, useSafeExecution } from "./safe.jsx";
6
+ export { useSafeTap } from "./safe-tap.jsx";
7
+ export { G9VerticalIconTextButton } from "./vertical-icon-text-button.jsx";
8
+ export { buttonSizePreset, fontAttributesStyle, resolveButtonPaint } from "./visuals.jsx";