@g9tm/lynxcontrols 0.0.0-stage → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (545) hide show
  1. package/README.md +22 -2
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/base/base.css +16 -0
  4. package/dist/base/base.css.map +1 -0
  5. package/dist/base/control.d.ts +44 -0
  6. package/dist/base/control.d.ts.map +1 -0
  7. package/dist/base/control.jsx +24 -0
  8. package/dist/base/control.jsx.map +1 -0
  9. package/dist/base/corner-badge.d.ts +35 -0
  10. package/dist/base/corner-badge.d.ts.map +1 -0
  11. package/dist/base/corner-badge.jsx +45 -0
  12. package/dist/base/corner-badge.jsx.map +1 -0
  13. package/dist/base/disposer.d.ts +28 -0
  14. package/dist/base/disposer.d.ts.map +1 -0
  15. package/dist/base/disposer.jsx +61 -0
  16. package/dist/base/disposer.jsx.map +1 -0
  17. package/dist/base/index.d.ts +10 -0
  18. package/dist/base/index.d.ts.map +1 -0
  19. package/dist/base/index.jsx +9 -0
  20. package/dist/base/press.d.ts +38 -0
  21. package/dist/base/press.d.ts.map +1 -0
  22. package/dist/base/press.jsx +73 -0
  23. package/dist/base/press.jsx.map +1 -0
  24. package/dist/base/pressable.d.ts +25 -0
  25. package/dist/base/pressable.d.ts.map +1 -0
  26. package/dist/base/pressable.jsx +38 -0
  27. package/dist/base/pressable.jsx.map +1 -0
  28. package/dist/base/selection-item.d.ts +29 -0
  29. package/dist/base/selection-item.d.ts.map +1 -0
  30. package/dist/base/selection-item.jsx +6 -0
  31. package/dist/base/selection-item.jsx.map +1 -0
  32. package/dist/base/timers.d.ts +7 -0
  33. package/dist/base/timers.d.ts.map +1 -0
  34. package/dist/base/timers.jsx +10 -0
  35. package/dist/base/timers.jsx.map +1 -0
  36. package/dist/base/use-controllable-state.d.ts +30 -0
  37. package/dist/base/use-controllable-state.d.ts.map +1 -0
  38. package/dist/base/use-controllable-state.jsx +49 -0
  39. package/dist/base/use-controllable-state.jsx.map +1 -0
  40. package/dist/base/use-stable-callback.d.ts +8 -0
  41. package/dist/base/use-stable-callback.d.ts.map +1 -0
  42. package/dist/base/use-stable-callback.jsx +12 -0
  43. package/dist/base/use-stable-callback.jsx.map +1 -0
  44. package/dist/button/button.css +162 -0
  45. package/dist/button/button.css.map +1 -0
  46. package/dist/button/button.d.ts +52 -0
  47. package/dist/button/button.d.ts.map +1 -0
  48. package/dist/button/button.jsx +87 -0
  49. package/dist/button/button.jsx.map +1 -0
  50. package/dist/button/header-action-button.d.ts +34 -0
  51. package/dist/button/header-action-button.d.ts.map +1 -0
  52. package/dist/button/header-action-button.jsx +51 -0
  53. package/dist/button/header-action-button.jsx.map +1 -0
  54. package/dist/button/icon-button.d.ts +46 -0
  55. package/dist/button/icon-button.d.ts.map +1 -0
  56. package/dist/button/icon-button.jsx +69 -0
  57. package/dist/button/icon-button.jsx.map +1 -0
  58. package/dist/button/index.d.ts +9 -0
  59. package/dist/button/index.d.ts.map +1 -0
  60. package/dist/button/index.jsx +8 -0
  61. package/dist/button/nav-card.d.ts +58 -0
  62. package/dist/button/nav-card.d.ts.map +1 -0
  63. package/dist/button/nav-card.jsx +95 -0
  64. package/dist/button/nav-card.jsx.map +1 -0
  65. package/dist/button/safe-tap.d.ts +27 -0
  66. package/dist/button/safe-tap.d.ts.map +1 -0
  67. package/dist/button/safe-tap.jsx +46 -0
  68. package/dist/button/safe-tap.jsx.map +1 -0
  69. package/dist/button/safe.d.ts +84 -0
  70. package/dist/button/safe.d.ts.map +1 -0
  71. package/dist/button/safe.jsx +116 -0
  72. package/dist/button/safe.jsx.map +1 -0
  73. package/dist/button/vertical-icon-text-button.d.ts +18 -0
  74. package/dist/button/vertical-icon-text-button.d.ts.map +1 -0
  75. package/dist/button/vertical-icon-text-button.jsx +21 -0
  76. package/dist/button/vertical-icon-text-button.jsx.map +1 -0
  77. package/dist/button/visuals.d.ts +53 -0
  78. package/dist/button/visuals.d.ts.map +1 -0
  79. package/dist/button/visuals.jsx +92 -0
  80. package/dist/button/visuals.jsx.map +1 -0
  81. package/dist/cascade/cascade-panel.d.ts +80 -0
  82. package/dist/cascade/cascade-panel.d.ts.map +1 -0
  83. package/dist/cascade/cascade-panel.jsx +179 -0
  84. package/dist/cascade/cascade-panel.jsx.map +1 -0
  85. package/dist/cascade/cascade.css +70 -0
  86. package/dist/cascade/cascade.css.map +1 -0
  87. package/dist/cascade/index.d.ts +3 -0
  88. package/dist/cascade/index.d.ts.map +1 -0
  89. package/dist/cascade/index.jsx +2 -0
  90. package/dist/cascade/model.d.ts +68 -0
  91. package/dist/cascade/model.d.ts.map +1 -0
  92. package/dist/cascade/model.jsx +161 -0
  93. package/dist/cascade/model.jsx.map +1 -0
  94. package/dist/deferred/deferred-content.d.ts +82 -0
  95. package/dist/deferred/deferred-content.d.ts.map +1 -0
  96. package/dist/deferred/deferred-content.jsx +263 -0
  97. package/dist/deferred/deferred-content.jsx.map +1 -0
  98. package/dist/deferred/deferred.css +62 -0
  99. package/dist/deferred/deferred.css.map +1 -0
  100. package/dist/deferred/index.d.ts +3 -0
  101. package/dist/deferred/index.d.ts.map +1 -0
  102. package/dist/deferred/index.jsx +2 -0
  103. package/dist/deferred/readiness-signal.d.ts +16 -0
  104. package/dist/deferred/readiness-signal.d.ts.map +1 -0
  105. package/dist/deferred/readiness-signal.jsx +29 -0
  106. package/dist/deferred/readiness-signal.jsx.map +1 -0
  107. package/dist/display/activity-indicator.d.ts +21 -0
  108. package/dist/display/activity-indicator.d.ts.map +1 -0
  109. package/dist/display/activity-indicator.jsx +22 -0
  110. package/dist/display/activity-indicator.jsx.map +1 -0
  111. package/dist/display/culture-date-time-label.d.ts +64 -0
  112. package/dist/display/culture-date-time-label.d.ts.map +1 -0
  113. package/dist/display/culture-date-time-label.jsx +71 -0
  114. package/dist/display/culture-date-time-label.jsx.map +1 -0
  115. package/dist/display/display.css +217 -0
  116. package/dist/display/display.css.map +1 -0
  117. package/dist/display/index.d.ts +7 -0
  118. package/dist/display/index.d.ts.map +1 -0
  119. package/dist/display/index.jsx +6 -0
  120. package/dist/display/progress-bar.d.ts +38 -0
  121. package/dist/display/progress-bar.d.ts.map +1 -0
  122. package/dist/display/progress-bar.jsx +57 -0
  123. package/dist/display/progress-bar.jsx.map +1 -0
  124. package/dist/display/separator.d.ts +30 -0
  125. package/dist/display/separator.d.ts.map +1 -0
  126. package/dist/display/separator.jsx +55 -0
  127. package/dist/display/separator.jsx.map +1 -0
  128. package/dist/display/shimmer.d.ts +41 -0
  129. package/dist/display/shimmer.d.ts.map +1 -0
  130. package/dist/display/shimmer.jsx +41 -0
  131. package/dist/display/shimmer.jsx.map +1 -0
  132. package/dist/display/title-with-line.d.ts +13 -0
  133. package/dist/display/title-with-line.d.ts.map +1 -0
  134. package/dist/display/title-with-line.jsx +21 -0
  135. package/dist/display/title-with-line.jsx.map +1 -0
  136. package/dist/edge-panel/edge-panel.css +132 -0
  137. package/dist/edge-panel/edge-panel.css.map +1 -0
  138. package/dist/edge-panel/edge-panel.d.ts +87 -0
  139. package/dist/edge-panel/edge-panel.d.ts.map +1 -0
  140. package/dist/edge-panel/edge-panel.jsx +326 -0
  141. package/dist/edge-panel/edge-panel.jsx.map +1 -0
  142. package/dist/edge-panel/helper.d.ts +27 -0
  143. package/dist/edge-panel/helper.d.ts.map +1 -0
  144. package/dist/edge-panel/helper.jsx +118 -0
  145. package/dist/edge-panel/helper.jsx.map +1 -0
  146. package/dist/edge-panel/index.d.ts +4 -0
  147. package/dist/edge-panel/index.d.ts.map +1 -0
  148. package/dist/edge-panel/index.jsx +3 -0
  149. package/dist/edge-panel/types.d.ts +155 -0
  150. package/dist/edge-panel/types.d.ts.map +1 -0
  151. package/dist/edge-panel/types.jsx +139 -0
  152. package/dist/edge-panel/types.jsx.map +1 -0
  153. package/dist/expander/expander.css +54 -0
  154. package/dist/expander/expander.css.map +1 -0
  155. package/dist/expander/expander.d.ts +46 -0
  156. package/dist/expander/expander.d.ts.map +1 -0
  157. package/dist/expander/expander.jsx +110 -0
  158. package/dist/expander/expander.jsx.map +1 -0
  159. package/dist/expander/index.d.ts +2 -0
  160. package/dist/expander/index.d.ts.map +1 -0
  161. package/dist/expander/index.jsx +1 -0
  162. package/dist/fields/dictation.d.ts +43 -0
  163. package/dist/fields/dictation.d.ts.map +1 -0
  164. package/dist/fields/dictation.jsx +124 -0
  165. package/dist/fields/dictation.jsx.map +1 -0
  166. package/dist/fields/editor.d.ts +26 -0
  167. package/dist/fields/editor.d.ts.map +1 -0
  168. package/dist/fields/editor.jsx +46 -0
  169. package/dist/fields/editor.jsx.map +1 -0
  170. package/dist/fields/fields.css +156 -0
  171. package/dist/fields/fields.css.map +1 -0
  172. package/dist/fields/index.d.ts +12 -0
  173. package/dist/fields/index.d.ts.map +1 -0
  174. package/dist/fields/index.jsx +11 -0
  175. package/dist/fields/input-policy.d.ts +48 -0
  176. package/dist/fields/input-policy.d.ts.map +1 -0
  177. package/dist/fields/input-policy.jsx +215 -0
  178. package/dist/fields/input-policy.jsx.map +1 -0
  179. package/dist/fields/outlined-field.d.ts +146 -0
  180. package/dist/fields/outlined-field.d.ts.map +1 -0
  181. package/dist/fields/outlined-field.jsx +196 -0
  182. package/dist/fields/outlined-field.jsx.map +1 -0
  183. package/dist/fields/pin-entry.d.ts +63 -0
  184. package/dist/fields/pin-entry.d.ts.map +1 -0
  185. package/dist/fields/pin-entry.jsx +293 -0
  186. package/dist/fields/pin-entry.jsx.map +1 -0
  187. package/dist/fields/search-entry.d.ts +35 -0
  188. package/dist/fields/search-entry.d.ts.map +1 -0
  189. package/dist/fields/search-entry.jsx +118 -0
  190. package/dist/fields/search-entry.jsx.map +1 -0
  191. package/dist/fields/slot-layout.d.ts +33 -0
  192. package/dist/fields/slot-layout.d.ts.map +1 -0
  193. package/dist/fields/slot-layout.jsx +33 -0
  194. package/dist/fields/slot-layout.jsx.map +1 -0
  195. package/dist/fields/text-entry.d.ts +62 -0
  196. package/dist/fields/text-entry.d.ts.map +1 -0
  197. package/dist/fields/text-entry.jsx +72 -0
  198. package/dist/fields/text-entry.jsx.map +1 -0
  199. package/dist/fields/use-dictation.d.ts +34 -0
  200. package/dist/fields/use-dictation.d.ts.map +1 -0
  201. package/dist/fields/use-dictation.jsx +80 -0
  202. package/dist/fields/use-dictation.jsx.map +1 -0
  203. package/dist/fields/use-text-input.d.ts +150 -0
  204. package/dist/fields/use-text-input.d.ts.map +1 -0
  205. package/dist/fields/use-text-input.jsx +237 -0
  206. package/dist/fields/use-text-input.jsx.map +1 -0
  207. package/dist/fields/validator.d.ts +14 -0
  208. package/dist/fields/validator.d.ts.map +1 -0
  209. package/dist/fields/validator.jsx +20 -0
  210. package/dist/fields/validator.jsx.map +1 -0
  211. package/dist/host/back.d.ts +42 -0
  212. package/dist/host/back.d.ts.map +1 -0
  213. package/dist/host/back.jsx +47 -0
  214. package/dist/host/back.jsx.map +1 -0
  215. package/dist/host/hooks.d.ts +85 -0
  216. package/dist/host/hooks.d.ts.map +1 -0
  217. package/dist/host/hooks.jsx +163 -0
  218. package/dist/host/hooks.jsx.map +1 -0
  219. package/dist/host/host.css +81 -0
  220. package/dist/host/host.css.map +1 -0
  221. package/dist/host/host.d.ts +70 -0
  222. package/dist/host/host.d.ts.map +1 -0
  223. package/dist/host/host.jsx +229 -0
  224. package/dist/host/host.jsx.map +1 -0
  225. package/dist/host/index.d.ts +9 -0
  226. package/dist/host/index.d.ts.map +1 -0
  227. package/dist/host/index.jsx +8 -0
  228. package/dist/host/keyboard.d.ts +24 -0
  229. package/dist/host/keyboard.d.ts.map +1 -0
  230. package/dist/host/keyboard.jsx +28 -0
  231. package/dist/host/keyboard.jsx.map +1 -0
  232. package/dist/host/layers.d.ts +69 -0
  233. package/dist/host/layers.d.ts.map +1 -0
  234. package/dist/host/layers.jsx +111 -0
  235. package/dist/host/layers.jsx.map +1 -0
  236. package/dist/host/page-loading-overlay.d.ts +17 -0
  237. package/dist/host/page-loading-overlay.d.ts.map +1 -0
  238. package/dist/host/page-loading-overlay.jsx +16 -0
  239. package/dist/host/page-loading-overlay.jsx.map +1 -0
  240. package/dist/host/readiness.d.ts +57 -0
  241. package/dist/host/readiness.d.ts.map +1 -0
  242. package/dist/host/readiness.jsx +138 -0
  243. package/dist/host/readiness.jsx.map +1 -0
  244. package/dist/host/registry.d.ts +106 -0
  245. package/dist/host/registry.d.ts.map +1 -0
  246. package/dist/host/registry.jsx +93 -0
  247. package/dist/host/registry.jsx.map +1 -0
  248. package/dist/icon/icon.css +39 -0
  249. package/dist/icon/icon.css.map +1 -0
  250. package/dist/icon/icon.d.ts +57 -0
  251. package/dist/icon/icon.d.ts.map +1 -0
  252. package/dist/icon/icon.jsx +115 -0
  253. package/dist/icon/icon.jsx.map +1 -0
  254. package/dist/icon/index.d.ts +4 -0
  255. package/dist/icon/index.d.ts.map +1 -0
  256. package/dist/icon/index.jsx +3 -0
  257. package/dist/icon/slot.d.ts +45 -0
  258. package/dist/icon/slot.d.ts.map +1 -0
  259. package/dist/icon/slot.jsx +61 -0
  260. package/dist/icon/slot.jsx.map +1 -0
  261. package/dist/icon/swatch.d.ts +29 -0
  262. package/dist/icon/swatch.d.ts.map +1 -0
  263. package/dist/icon/swatch.jsx +25 -0
  264. package/dist/icon/swatch.jsx.map +1 -0
  265. package/dist/index.d.ts +23 -0
  266. package/dist/index.d.ts.map +1 -0
  267. package/dist/index.jsx +1 -0
  268. package/dist/pickers/combo-box.d.ts +42 -0
  269. package/dist/pickers/combo-box.d.ts.map +1 -0
  270. package/dist/pickers/combo-box.jsx +129 -0
  271. package/dist/pickers/combo-box.jsx.map +1 -0
  272. package/dist/pickers/date-time-picker.d.ts +63 -0
  273. package/dist/pickers/date-time-picker.d.ts.map +1 -0
  274. package/dist/pickers/date-time-picker.jsx +141 -0
  275. package/dist/pickers/date-time-picker.jsx.map +1 -0
  276. package/dist/pickers/date-time.d.ts +82 -0
  277. package/dist/pickers/date-time.d.ts.map +1 -0
  278. package/dist/pickers/date-time.jsx +130 -0
  279. package/dist/pickers/date-time.jsx.map +1 -0
  280. package/dist/pickers/index.d.ts +10 -0
  281. package/dist/pickers/index.d.ts.map +1 -0
  282. package/dist/pickers/index.jsx +9 -0
  283. package/dist/pickers/picker-sheet.d.ts +21 -0
  284. package/dist/pickers/picker-sheet.d.ts.map +1 -0
  285. package/dist/pickers/picker-sheet.jsx +61 -0
  286. package/dist/pickers/picker-sheet.jsx.map +1 -0
  287. package/dist/pickers/picker.d.ts +32 -0
  288. package/dist/pickers/picker.d.ts.map +1 -0
  289. package/dist/pickers/picker.jsx +72 -0
  290. package/dist/pickers/picker.jsx.map +1 -0
  291. package/dist/pickers/pickers.css +219 -0
  292. package/dist/pickers/pickers.css.map +1 -0
  293. package/dist/pickers/timespan-picker.d.ts +36 -0
  294. package/dist/pickers/timespan-picker.d.ts.map +1 -0
  295. package/dist/pickers/timespan-picker.jsx +99 -0
  296. package/dist/pickers/timespan-picker.jsx.map +1 -0
  297. package/dist/pickers/timespan.d.ts +38 -0
  298. package/dist/pickers/timespan.d.ts.map +1 -0
  299. package/dist/pickers/timespan.jsx +49 -0
  300. package/dist/pickers/timespan.jsx.map +1 -0
  301. package/dist/pickers/trigger.d.ts +34 -0
  302. package/dist/pickers/trigger.d.ts.map +1 -0
  303. package/dist/pickers/trigger.jsx +77 -0
  304. package/dist/pickers/trigger.jsx.map +1 -0
  305. package/dist/pickers/wheel-column.d.ts +32 -0
  306. package/dist/pickers/wheel-column.d.ts.map +1 -0
  307. package/dist/pickers/wheel-column.jsx +99 -0
  308. package/dist/pickers/wheel-column.jsx.map +1 -0
  309. package/dist/plus-button/index.d.ts +3 -0
  310. package/dist/plus-button/index.d.ts.map +1 -0
  311. package/dist/plus-button/index.jsx +2 -0
  312. package/dist/plus-button/model.d.ts +65 -0
  313. package/dist/plus-button/model.d.ts.map +1 -0
  314. package/dist/plus-button/model.jsx +86 -0
  315. package/dist/plus-button/model.jsx.map +1 -0
  316. package/dist/plus-button/plus-button.css +67 -0
  317. package/dist/plus-button/plus-button.css.map +1 -0
  318. package/dist/plus-button/plus-button.d.ts +38 -0
  319. package/dist/plus-button/plus-button.d.ts.map +1 -0
  320. package/dist/plus-button/plus-button.jsx +155 -0
  321. package/dist/plus-button/plus-button.jsx.map +1 -0
  322. package/dist/popup/frame.d.ts +101 -0
  323. package/dist/popup/frame.d.ts.map +1 -0
  324. package/dist/popup/frame.jsx +244 -0
  325. package/dist/popup/frame.jsx.map +1 -0
  326. package/dist/popup/index.d.ts +8 -0
  327. package/dist/popup/index.d.ts.map +1 -0
  328. package/dist/popup/index.jsx +7 -0
  329. package/dist/popup/input-form.d.ts +35 -0
  330. package/dist/popup/input-form.d.ts.map +1 -0
  331. package/dist/popup/input-form.jsx +160 -0
  332. package/dist/popup/input-form.jsx.map +1 -0
  333. package/dist/popup/input.d.ts +175 -0
  334. package/dist/popup/input.d.ts.map +1 -0
  335. package/dist/popup/input.jsx +176 -0
  336. package/dist/popup/input.jsx.map +1 -0
  337. package/dist/popup/popup-view.d.ts +25 -0
  338. package/dist/popup/popup-view.d.ts.map +1 -0
  339. package/dist/popup/popup-view.jsx +67 -0
  340. package/dist/popup/popup-view.jsx.map +1 -0
  341. package/dist/popup/popup.css +203 -0
  342. package/dist/popup/popup.css.map +1 -0
  343. package/dist/popup/queue.d.ts +90 -0
  344. package/dist/popup/queue.d.ts.map +1 -0
  345. package/dist/popup/queue.jsx +309 -0
  346. package/dist/popup/queue.jsx.map +1 -0
  347. package/dist/popup/service.d.ts +60 -0
  348. package/dist/popup/service.d.ts.map +1 -0
  349. package/dist/popup/service.jsx +342 -0
  350. package/dist/popup/service.jsx.map +1 -0
  351. package/dist/popup/types.d.ts +211 -0
  352. package/dist/popup/types.d.ts.map +1 -0
  353. package/dist/popup/types.jsx +218 -0
  354. package/dist/popup/types.jsx.map +1 -0
  355. package/dist/provider/contexts.d.ts +41 -0
  356. package/dist/provider/contexts.d.ts.map +1 -0
  357. package/dist/provider/contexts.jsx +11 -0
  358. package/dist/provider/contexts.jsx.map +1 -0
  359. package/dist/provider/global-events.d.ts +8 -0
  360. package/dist/provider/global-events.d.ts.map +1 -0
  361. package/dist/provider/global-events.jsx +17 -0
  362. package/dist/provider/global-events.jsx.map +1 -0
  363. package/dist/provider/hooks.d.ts +49 -0
  364. package/dist/provider/hooks.d.ts.map +1 -0
  365. package/dist/provider/hooks.jsx +72 -0
  366. package/dist/provider/hooks.jsx.map +1 -0
  367. package/dist/provider/index.d.ts +5 -0
  368. package/dist/provider/index.d.ts.map +1 -0
  369. package/dist/provider/index.jsx +3 -0
  370. package/dist/provider/provider.css +18 -0
  371. package/dist/provider/provider.css.map +1 -0
  372. package/dist/provider/provider.d.ts +51 -0
  373. package/dist/provider/provider.d.ts.map +1 -0
  374. package/dist/provider/provider.jsx +290 -0
  375. package/dist/provider/provider.jsx.map +1 -0
  376. package/dist/provider/settings.d.ts +99 -0
  377. package/dist/provider/settings.d.ts.map +1 -0
  378. package/dist/provider/settings.jsx +45 -0
  379. package/dist/provider/settings.jsx.map +1 -0
  380. package/dist/provider/theme-css.d.ts +12 -0
  381. package/dist/provider/theme-css.d.ts.map +1 -0
  382. package/dist/provider/theme-css.jsx +19 -0
  383. package/dist/provider/theme-css.jsx.map +1 -0
  384. package/dist/provider/theme-root.d.ts +10 -0
  385. package/dist/provider/theme-root.d.ts.map +1 -0
  386. package/dist/provider/theme-root.jsx +24 -0
  387. package/dist/provider/theme-root.jsx.map +1 -0
  388. package/dist/provider/theme.css +473 -0
  389. package/dist/provider/theme.css.map +1 -0
  390. package/dist/range-slider/index.d.ts +3 -0
  391. package/dist/range-slider/index.d.ts.map +1 -0
  392. package/dist/range-slider/index.jsx +2 -0
  393. package/dist/range-slider/math.d.ts +23 -0
  394. package/dist/range-slider/math.d.ts.map +1 -0
  395. package/dist/range-slider/math.jsx +71 -0
  396. package/dist/range-slider/math.jsx.map +1 -0
  397. package/dist/range-slider/range-slider.css +90 -0
  398. package/dist/range-slider/range-slider.css.map +1 -0
  399. package/dist/range-slider/range-slider.d.ts +52 -0
  400. package/dist/range-slider/range-slider.d.ts.map +1 -0
  401. package/dist/range-slider/range-slider.jsx +159 -0
  402. package/dist/range-slider/range-slider.jsx.map +1 -0
  403. package/dist/selection/index.d.ts +5 -0
  404. package/dist/selection/index.d.ts.map +1 -0
  405. package/dist/selection/index.jsx +3 -0
  406. package/dist/selection/model.d.ts +53 -0
  407. package/dist/selection/model.d.ts.map +1 -0
  408. package/dist/selection/model.jsx +69 -0
  409. package/dist/selection/model.jsx.map +1 -0
  410. package/dist/selection/selection-sheet.d.ts +80 -0
  411. package/dist/selection/selection-sheet.d.ts.map +1 -0
  412. package/dist/selection/selection-sheet.jsx +362 -0
  413. package/dist/selection/selection-sheet.jsx.map +1 -0
  414. package/dist/selection/selection.css +75 -0
  415. package/dist/selection/selection.css.map +1 -0
  416. package/dist/selection/use-selection-model.d.ts +9 -0
  417. package/dist/selection/use-selection-model.d.ts.map +1 -0
  418. package/dist/selection/use-selection-model.jsx +22 -0
  419. package/dist/selection/use-selection-model.jsx.map +1 -0
  420. package/dist/sheet/frame.d.ts +45 -0
  421. package/dist/sheet/frame.d.ts.map +1 -0
  422. package/dist/sheet/frame.jsx +205 -0
  423. package/dist/sheet/frame.jsx.map +1 -0
  424. package/dist/sheet/header.d.ts +35 -0
  425. package/dist/sheet/header.d.ts.map +1 -0
  426. package/dist/sheet/header.jsx +145 -0
  427. package/dist/sheet/header.jsx.map +1 -0
  428. package/dist/sheet/height-memo.d.ts +47 -0
  429. package/dist/sheet/height-memo.d.ts.map +1 -0
  430. package/dist/sheet/height-memo.jsx +100 -0
  431. package/dist/sheet/height-memo.jsx.map +1 -0
  432. package/dist/sheet/index.d.ts +11 -0
  433. package/dist/sheet/index.d.ts.map +1 -0
  434. package/dist/sheet/index.jsx +10 -0
  435. package/dist/sheet/loadable.d.ts +35 -0
  436. package/dist/sheet/loadable.d.ts.map +1 -0
  437. package/dist/sheet/loadable.jsx +65 -0
  438. package/dist/sheet/loadable.jsx.map +1 -0
  439. package/dist/sheet/options.d.ts +220 -0
  440. package/dist/sheet/options.d.ts.map +1 -0
  441. package/dist/sheet/options.jsx +91 -0
  442. package/dist/sheet/options.jsx.map +1 -0
  443. package/dist/sheet/processing.d.ts +22 -0
  444. package/dist/sheet/processing.d.ts.map +1 -0
  445. package/dist/sheet/processing.jsx +66 -0
  446. package/dist/sheet/processing.jsx.map +1 -0
  447. package/dist/sheet/service.d.ts +55 -0
  448. package/dist/sheet/service.d.ts.map +1 -0
  449. package/dist/sheet/service.jsx +143 -0
  450. package/dist/sheet/service.jsx.map +1 -0
  451. package/dist/sheet/sheet.css +195 -0
  452. package/dist/sheet/sheet.css.map +1 -0
  453. package/dist/sheet/sheet.d.ts +19 -0
  454. package/dist/sheet/sheet.d.ts.map +1 -0
  455. package/dist/sheet/sheet.jsx +40 -0
  456. package/dist/sheet/sheet.jsx.map +1 -0
  457. package/dist/sheet/sizing.d.ts +69 -0
  458. package/dist/sheet/sizing.d.ts.map +1 -0
  459. package/dist/sheet/sizing.jsx +146 -0
  460. package/dist/sheet/sizing.jsx.map +1 -0
  461. package/dist/sheet/stack.d.ts +161 -0
  462. package/dist/sheet/stack.d.ts.map +1 -0
  463. package/dist/sheet/stack.jsx +378 -0
  464. package/dist/sheet/stack.jsx.map +1 -0
  465. package/dist/swipe/index.d.ts +3 -0
  466. package/dist/swipe/index.d.ts.map +1 -0
  467. package/dist/swipe/index.jsx +2 -0
  468. package/dist/swipe/model.d.ts +72 -0
  469. package/dist/swipe/model.d.ts.map +1 -0
  470. package/dist/swipe/model.jsx +66 -0
  471. package/dist/swipe/model.jsx.map +1 -0
  472. package/dist/swipe/swipe-view.d.ts +40 -0
  473. package/dist/swipe/swipe-view.d.ts.map +1 -0
  474. package/dist/swipe/swipe-view.jsx +163 -0
  475. package/dist/swipe/swipe-view.jsx.map +1 -0
  476. package/dist/swipe/swipe.css +34 -0
  477. package/dist/swipe/swipe.css.map +1 -0
  478. package/dist/tab-bar/index.d.ts +4 -0
  479. package/dist/tab-bar/index.d.ts.map +1 -0
  480. package/dist/tab-bar/index.jsx +3 -0
  481. package/dist/tab-bar/metrics.d.ts +230 -0
  482. package/dist/tab-bar/metrics.d.ts.map +1 -0
  483. package/dist/tab-bar/metrics.jsx +221 -0
  484. package/dist/tab-bar/metrics.jsx.map +1 -0
  485. package/dist/tab-bar/model.d.ts +170 -0
  486. package/dist/tab-bar/model.d.ts.map +1 -0
  487. package/dist/tab-bar/model.jsx +349 -0
  488. package/dist/tab-bar/model.jsx.map +1 -0
  489. package/dist/tab-bar/tab-bar.css +173 -0
  490. package/dist/tab-bar/tab-bar.css.map +1 -0
  491. package/dist/tab-bar/tab-bar.d.ts +56 -0
  492. package/dist/tab-bar/tab-bar.d.ts.map +1 -0
  493. package/dist/tab-bar/tab-bar.jsx +343 -0
  494. package/dist/tab-bar/tab-bar.jsx.map +1 -0
  495. package/dist/tabs/index.d.ts +3 -0
  496. package/dist/tabs/index.d.ts.map +1 -0
  497. package/dist/tabs/index.jsx +2 -0
  498. package/dist/tabs/model.d.ts +83 -0
  499. package/dist/tabs/model.d.ts.map +1 -0
  500. package/dist/tabs/model.jsx +113 -0
  501. package/dist/tabs/model.jsx.map +1 -0
  502. package/dist/tabs/tab-view.d.ts +47 -0
  503. package/dist/tabs/tab-view.d.ts.map +1 -0
  504. package/dist/tabs/tab-view.jsx +227 -0
  505. package/dist/tabs/tab-view.jsx.map +1 -0
  506. package/dist/tabs/tabs.css +182 -0
  507. package/dist/tabs/tabs.css.map +1 -0
  508. package/dist/toast/index.d.ts +3 -0
  509. package/dist/toast/index.d.ts.map +1 -0
  510. package/dist/toast/index.jsx +2 -0
  511. package/dist/toast/service.d.ts +48 -0
  512. package/dist/toast/service.d.ts.map +1 -0
  513. package/dist/toast/service.jsx +201 -0
  514. package/dist/toast/service.jsx.map +1 -0
  515. package/dist/toast/store.d.ts +174 -0
  516. package/dist/toast/store.d.ts.map +1 -0
  517. package/dist/toast/store.jsx +353 -0
  518. package/dist/toast/store.jsx.map +1 -0
  519. package/dist/toast/toast.css +152 -0
  520. package/dist/toast/toast.css.map +1 -0
  521. package/dist/toggle/checkbox-math.d.ts +52 -0
  522. package/dist/toggle/checkbox-math.d.ts.map +1 -0
  523. package/dist/toggle/checkbox-math.jsx +111 -0
  524. package/dist/toggle/checkbox-math.jsx.map +1 -0
  525. package/dist/toggle/checkbox.d.ts +56 -0
  526. package/dist/toggle/checkbox.d.ts.map +1 -0
  527. package/dist/toggle/checkbox.jsx +152 -0
  528. package/dist/toggle/checkbox.jsx.map +1 -0
  529. package/dist/toggle/chip-group.d.ts +50 -0
  530. package/dist/toggle/chip-group.d.ts.map +1 -0
  531. package/dist/toggle/chip-group.jsx +107 -0
  532. package/dist/toggle/chip-group.jsx.map +1 -0
  533. package/dist/toggle/index.d.ts +5 -0
  534. package/dist/toggle/index.d.ts.map +1 -0
  535. package/dist/toggle/index.jsx +4 -0
  536. package/dist/toggle/switch.d.ts +52 -0
  537. package/dist/toggle/switch.d.ts.map +1 -0
  538. package/dist/toggle/switch.jsx +192 -0
  539. package/dist/toggle/switch.jsx.map +1 -0
  540. package/dist/toggle/toggle.css +189 -0
  541. package/dist/toggle/toggle.css.map +1 -0
  542. package/package.json +155 -4
  543. package/rspeedy/index.d.ts +21 -0
  544. package/rspeedy/index.mjs +75 -0
  545. package/rspeedy/index.test.mjs +52 -0
@@ -0,0 +1,10 @@
1
+ export { type G9ControlBaseProps, type G9ControlState, g9RowStyle, g9TextStart, useG9Control, } from './control.js';
2
+ export { cornerBadgeWidth, G9CornerBadge, type G9CornerBadgeProps, g9CornerBadgeMetrics, hasCornerBadge, } from './corner-badge.js';
3
+ export { createDisposer, type G9Disposer, useDisposer } from './disposer.js';
4
+ export { type G9PressOptions, type G9PressVisual, g9PressGuardMs, useG9Press, usePressVisual } from './press.js';
5
+ export { G9Pressable, type G9PressableProps, g9PressFeedbackDefaults } from './pressable.js';
6
+ export { type G9SelectionItem, selectionKey } from './selection-item.js';
7
+ export { type G9TimerHandle, startTimer, stopTimer } from './timers.js';
8
+ export { type G9ControllableSetter, type G9ControllableStateOptions, useControllableState, } from './use-controllable-state.js';
9
+ export { useStableCallback } from './use-stable-callback.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/base/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,UAAU,EACV,WAAW,EACX,YAAY,GACb,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,KAAK,kBAAkB,EACvB,oBAAoB,EACpB,cAAc,GACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,KAAK,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC9G,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAC1F,OAAO,EAAE,KAAK,eAAe,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,KAAK,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrE,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,0BAA0B,EAC/B,oBAAoB,GACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,9 @@
1
+ export { g9RowStyle, g9TextStart, useG9Control } from "./control.jsx";
2
+ export { G9CornerBadge, cornerBadgeWidth, g9CornerBadgeMetrics, hasCornerBadge } from "./corner-badge.jsx";
3
+ export { createDisposer, useDisposer } from "./disposer.jsx";
4
+ export { g9PressGuardMs, useG9Press, usePressVisual } from "./press.jsx";
5
+ export { G9Pressable, g9PressFeedbackDefaults } from "./pressable.jsx";
6
+ export { selectionKey } from "./selection-item.jsx";
7
+ export { startTimer, stopTimer } from "./timers.jsx";
8
+ export { useControllableState } from "./use-controllable-state.jsx";
9
+ export { useStableCallback } from "./use-stable-callback.jsx";
@@ -0,0 +1,38 @@
1
+ /** Presses closer together than this are dropped (MAUI `G9Press` 300 ms double-fire guard). */
2
+ export declare const g9PressGuardMs = 300;
3
+ /** Options of {@link useG9Press}. */
4
+ export interface G9PressOptions {
5
+ /** Blocks the press (disabled, loading, coming soon …). */
6
+ readonly blocked?: boolean;
7
+ /** Diagnostics source for a press handler that throws (e.g. `'G9Button'`). */
8
+ readonly source: string;
9
+ /** Double-fire guard in ms; 0 disables it. Default {@link g9PressGuardMs}. */
10
+ readonly guardMs?: number;
11
+ }
12
+ /**
13
+ * The press of a G9 control (MAUI `G9Press.Invoke`): one handler on the control root (`bindtap`), so a tap on any
14
+ * child (icon, label, badge) fires it exactly once. Blocked presses do nothing; a second press within `guardMs` is
15
+ * dropped; a handler that throws is reported to the provider diagnostics (MAUI `G9Press.ReportFailure`) and never
16
+ * escapes into the event loop. Returns a stable-per-render tap handler.
17
+ */
18
+ export declare function useG9Press(onPress: (() => void) | undefined, options: G9PressOptions): () => void;
19
+ /** A press visual: what the root's style becomes while pressed, and how fast it goes and comes back. */
20
+ export interface G9PressVisual {
21
+ /** `'scale'` (transform) or `'opacity'`. */
22
+ readonly property: 'scale' | 'opacity';
23
+ readonly rest: number;
24
+ readonly pressed: number;
25
+ /** Press-in duration (ms). */
26
+ readonly inMs: number;
27
+ /** Release duration (ms). */
28
+ readonly outMs: number;
29
+ /** Hovered value (desktop pointer); `undefined` = no hover state. */
30
+ readonly hovered?: number;
31
+ }
32
+ /**
33
+ * Press feedback as main-thread twins (plan/specs/02 §3): the touch handlers run on the main thread and set the
34
+ * root's style directly, so the feedback starts on the frame of the touch and never re-renders React. Spread the
35
+ * returned props on the control root. Disabled: no feedback.
36
+ */
37
+ export declare function usePressVisual(visual: G9PressVisual, disabled: boolean): Record<string, unknown>;
38
+ //# sourceMappingURL=press.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"press.d.ts","sourceRoot":"","sources":["../../src/base/press.ts"],"names":[],"mappings":"AAGA,+FAA+F;AAC/F,eAAO,MAAM,cAAc,MAAM,CAAC;AAElC,qCAAqC;AACrC,MAAM,WAAW,cAAc;IAC7B,2DAA2D;IAC3D,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,8EAA8E;IAC9E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,8EAA8E;IAC9E,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAOD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,EAAE,OAAO,EAAE,cAAc,GAAG,MAAM,IAAI,CAyBjG;AAED,wGAAwG;AACxG,MAAM,WAAW,aAAa;IAC5B,4CAA4C;IAC5C,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,8BAA8B;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,6BAA6B;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,qEAAqE;IACrE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAMD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAqChG"}
@@ -0,0 +1,73 @@
1
+ import { useContext, useRef } from "@lynx-js/react";
2
+ import { G9CoreContext, G9DiagnosticsContext } from "../provider/contexts.jsx";
3
+ const g9PressGuardMs = 300;
4
+ function monotonicNow(core) {
5
+ if (core) return core.services.clock.monotonicNow();
6
+ return Date.now();
7
+ }
8
+ function useG9Press(onPress, options) {
9
+ const core = useContext(G9CoreContext);
10
+ const diagnostics = useContext(G9DiagnosticsContext);
11
+ const last = useRef(-1 / 0);
12
+ return ()=>{
13
+ var _options_guardMs;
14
+ if (options.blocked || !onPress) return;
15
+ const guard = null != (_options_guardMs = options.guardMs) ? _options_guardMs : g9PressGuardMs;
16
+ const now = monotonicNow(core);
17
+ if (guard > 0 && now - last.current < guard) return;
18
+ last.current = now;
19
+ try {
20
+ onPress();
21
+ } catch (error) {
22
+ if (diagnostics) diagnostics.log({
23
+ level: 'error',
24
+ message: `${options.source}: press handler failed.`,
25
+ source: options.source,
26
+ error
27
+ });
28
+ else console.error(`[G9] ${options.source}: press handler failed.`, error);
29
+ }
30
+ };
31
+ }
32
+ function usePressVisual(visual, disabled) {
33
+ const property = visual.property;
34
+ const rest = visual.rest;
35
+ const pressed = visual.pressed;
36
+ const inMs = visual.inMs;
37
+ const outMs = visual.outMs;
38
+ const hovered = visual.hovered;
39
+ const apply = (target, value, ms)=>{
40
+ 'main thread';
41
+ var _target_setStyleProperties;
42
+ const css = 'scale' === property ? 'transform' : 'opacity';
43
+ null == target || null == (_target_setStyleProperties = target.setStyleProperties) || _target_setStyleProperties.call(target, {
44
+ transition: `${css} ${ms}ms ease-out`,
45
+ [css]: 'scale' === property ? `scale(${value})` : String(value)
46
+ });
47
+ };
48
+ const onStart = (event)=>{
49
+ 'main thread';
50
+ apply(event.currentTarget, pressed, inMs);
51
+ };
52
+ const onEnd = (event)=>{
53
+ 'main thread';
54
+ apply(event.currentTarget, rest, outMs);
55
+ };
56
+ if (disabled) return {};
57
+ const props = {
58
+ 'main-thread:bindtouchstart': onStart,
59
+ 'main-thread:bindtouchend': onEnd,
60
+ 'main-thread:bindtouchcancel': onEnd
61
+ };
62
+ if (void 0 !== hovered) {
63
+ props['main-thread:bindmouseenter'] = (event)=>{
64
+ 'main thread';
65
+ apply(event.currentTarget, hovered, outMs);
66
+ };
67
+ props['main-thread:bindmouseleave'] = onEnd;
68
+ }
69
+ return props;
70
+ }
71
+ export { g9PressGuardMs, useG9Press, usePressVisual };
72
+
73
+ //# sourceMappingURL=press.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base/press.jsx","sources":["../../src/base/press.ts"],"sourcesContent":["import { useContext, useRef } from '@lynx-js/react';\nimport { G9CoreContext, G9DiagnosticsContext } from '../provider/contexts';\n\n/** Presses closer together than this are dropped (MAUI `G9Press` 300 ms double-fire guard). */\nexport const g9PressGuardMs = 300;\n\n/** Options of {@link useG9Press}. */\nexport interface G9PressOptions {\n /** Blocks the press (disabled, loading, coming soon …). */\n readonly blocked?: boolean;\n /** Diagnostics source for a press handler that throws (e.g. `'G9Button'`). */\n readonly source: string;\n /** Double-fire guard in ms; 0 disables it. Default {@link g9PressGuardMs}. */\n readonly guardMs?: number;\n}\n\nfunction monotonicNow(core: { services: { clock: { monotonicNow(): number } } } | null): number {\n if (core) return core.services.clock.monotonicNow();\n return Date.now();\n}\n\n/**\n * The press of a G9 control (MAUI `G9Press.Invoke`): one handler on the control root (`bindtap`), so a tap on any\n * child (icon, label, badge) fires it exactly once. Blocked presses do nothing; a second press within `guardMs` is\n * dropped; a handler that throws is reported to the provider diagnostics (MAUI `G9Press.ReportFailure`) and never\n * escapes into the event loop. Returns a stable-per-render tap handler.\n */\nexport function useG9Press(onPress: (() => void) | undefined, options: G9PressOptions): () => void {\n const core = useContext(G9CoreContext);\n const diagnostics = useContext(G9DiagnosticsContext);\n const last = useRef(Number.NEGATIVE_INFINITY);\n return () => {\n if (options.blocked || !onPress) return;\n const guard = options.guardMs ?? g9PressGuardMs;\n const now = monotonicNow(core);\n if (guard > 0 && now - last.current < guard) return;\n last.current = now;\n try {\n onPress();\n } catch (error) {\n if (diagnostics) {\n diagnostics.log({\n level: 'error',\n message: `${options.source}: press handler failed.`,\n source: options.source,\n error,\n });\n } else {\n console.error(`[G9] ${options.source}: press handler failed.`, error);\n }\n }\n };\n}\n\n/** A press visual: what the root's style becomes while pressed, and how fast it goes and comes back. */\nexport interface G9PressVisual {\n /** `'scale'` (transform) or `'opacity'`. */\n readonly property: 'scale' | 'opacity';\n readonly rest: number;\n readonly pressed: number;\n /** Press-in duration (ms). */\n readonly inMs: number;\n /** Release duration (ms). */\n readonly outMs: number;\n /** Hovered value (desktop pointer); `undefined` = no hover state. */\n readonly hovered?: number;\n}\n\ninterface MainThreadTarget {\n setStyleProperties?: (styles: Record<string, string>) => void;\n}\n\n/**\n * Press feedback as main-thread twins (plan/specs/02 §3): the touch handlers run on the main thread and set the\n * root's style directly, so the feedback starts on the frame of the touch and never re-renders React. Spread the\n * returned props on the control root. Disabled: no feedback.\n */\nexport function usePressVisual(visual: G9PressVisual, disabled: boolean): Record<string, unknown> {\n const property = visual.property;\n const rest = visual.rest;\n const pressed = visual.pressed;\n const inMs = visual.inMs;\n const outMs = visual.outMs;\n const hovered = visual.hovered;\n const apply = (target: MainThreadTarget | undefined, value: number, ms: number) => {\n 'main thread';\n const css = property === 'scale' ? 'transform' : 'opacity';\n target?.setStyleProperties?.({\n transition: `${css} ${ms}ms ease-out`,\n [css]: property === 'scale' ? `scale(${value})` : String(value),\n });\n };\n const onStart = (event: { currentTarget?: MainThreadTarget }) => {\n 'main thread';\n apply(event.currentTarget, pressed, inMs);\n };\n const onEnd = (event: { currentTarget?: MainThreadTarget }) => {\n 'main thread';\n apply(event.currentTarget, rest, outMs);\n };\n if (disabled) return {};\n const props: Record<string, unknown> = {\n 'main-thread:bindtouchstart': onStart,\n 'main-thread:bindtouchend': onEnd,\n 'main-thread:bindtouchcancel': onEnd,\n };\n if (hovered !== undefined) {\n props['main-thread:bindmouseenter'] = (event: { currentTarget?: MainThreadTarget }) => {\n 'main thread';\n apply(event.currentTarget, hovered, outMs);\n };\n props['main-thread:bindmouseleave'] = onEnd;\n }\n return props;\n}\n"],"names":["g9PressGuardMs","monotonicNow","core","Date","useG9Press","onPress","options","useContext","G9CoreContext","diagnostics","G9DiagnosticsContext","last","useRef","Number","_options_guardMs","guard","now","error","console","usePressVisual","visual","disabled","property","rest","pressed","inMs","outMs","hovered","apply","target","value","ms","css","String","onStart","event","onEnd","props","undefined"],"mappings":";;AAIO,MAAMA,iBAAiB;AAY9B,SAASC,aAAaC,IAAgE;IACpF,IAAIA,MAAM,OAAOA,KAAK,QAAQ,CAAC,KAAK,CAAC,YAAY;IACjD,OAAOC,KAAK,GAAG;AACjB;AAQO,SAASC,WAAWC,OAAiC,EAAEC,OAAuB;IACnF,MAAMJ,OAAOK,WAAWC;IACxB,MAAMC,cAAcF,WAAWG;IAC/B,MAAMC,OAAOC,OAAOC,MAAwB;IAC5C,OAAO;YAESC;QADd,IAAIR,QAAQ,OAAO,IAAI,CAACD,SAAS;QACjC,MAAMU,QAAQ,QAAAD,CAAAA,mBAAAA,QAAQ,OAAO,AAAD,IAAdA,mBAAmBd;QACjC,MAAMgB,MAAMf,aAAaC;QACzB,IAAIa,QAAQ,KAAKC,MAAML,KAAK,OAAO,GAAGI,OAAO;QAC7CJ,KAAK,OAAO,GAAGK;QACf,IAAI;YACFX;QACF,EAAE,OAAOY,OAAO;YACd,IAAIR,aACFA,YAAY,GAAG,CAAC;gBACd,OAAO;gBACP,SAAS,GAAGH,QAAQ,MAAM,CAAC,uBAAuB,CAAC;gBACnD,QAAQA,QAAQ,MAAM;gBACtBW;YACF;iBAEAC,QAAQ,KAAK,CAAC,CAAC,KAAK,EAAEZ,QAAQ,MAAM,CAAC,uBAAuB,CAAC,EAAEW;QAEnE;IACF;AACF;AAyBO,SAASE,eAAeC,MAAqB,EAAEC,QAAiB;IACrE,MAAMC,WAAWF,OAAO,QAAQ;IAChC,MAAMG,OAAOH,OAAO,IAAI;IACxB,MAAMI,UAAUJ,OAAO,OAAO;IAC9B,MAAMK,OAAOL,OAAO,IAAI;IACxB,MAAMM,QAAQN,OAAO,KAAK;IAC1B,MAAMO,UAAUP,OAAO,OAAO;IAC9B,MAAMQ,QAAQ,CAACC,QAAsCC,OAAeC;QAClE;YAEAF;QADA,MAAMG,MAAMV,AAAa,YAAbA,WAAuB,cAAc;QACjDO,QAAAA,UAAAA,QAAAA,CAAAA,6BAAAA,OAAQ,kBAAkB,AAAD,KAAzBA,2BAAAA,IAAAA,CAAAA,QAA6B;YAC3B,YAAY,GAAGG,IAAI,CAAC,EAAED,GAAG,WAAW,CAAC;YACrC,CAACC,IAAI,EAAEV,AAAa,YAAbA,WAAuB,CAAC,MAAM,EAAEQ,MAAM,CAAC,CAAC,GAAGG,OAAOH;QAC3D;IACF;IACA,MAAMI,UAAU,CAACC;QACf;QACAP,MAAMO,MAAM,aAAa,EAAEX,SAASC;IACtC;IACA,MAAMW,QAAQ,CAACD;QACb;QACAP,MAAMO,MAAM,aAAa,EAAEZ,MAAMG;IACnC;IACA,IAAIL,UAAU,OAAO,CAAC;IACtB,MAAMgB,QAAiC;QACrC,8BAA8BH;QAC9B,4BAA4BE;QAC5B,+BAA+BA;IACjC;IACA,IAAIT,AAAYW,WAAZX,SAAuB;QACzBU,KAAK,CAAC,6BAA6B,GAAG,CAACF;YACrC;YACAP,MAAMO,MAAM,aAAa,EAAER,SAASD;QACtC;QACAW,KAAK,CAAC,6BAA6B,GAAGD;IACxC;IACA,OAAOC;AACT"}
@@ -0,0 +1,25 @@
1
+ import type { ReactNode } from '@lynx-js/react';
2
+ import { type G9ControlBaseProps } from './control.js';
3
+ import { type G9PressVisual } from './press.js';
4
+ /** The standard press feedback curve (MAUI `G9PressFeedbackBehavior` defaults: 1 / 0.86 / 0.78 over 110 ms). */
5
+ export declare const g9PressFeedbackDefaults: G9PressVisual;
6
+ /** Props of {@link G9Pressable}. */
7
+ export interface G9PressableProps extends G9ControlBaseProps {
8
+ /** The press (MAUI `Command` + `CommandParameter`); one handler on the root, children never take the touch. */
9
+ readonly onPress?: () => void;
10
+ /** Opacity at rest. Default 1. */
11
+ readonly restOpacity?: number;
12
+ /** Opacity under a desktop pointer. Default 0.86. */
13
+ readonly hoveredOpacity?: number;
14
+ /** Opacity while pressed. Default 0.78. */
15
+ readonly pressedOpacity?: number;
16
+ /** Each tween's length. Default 110 ms. */
17
+ readonly animationDurationMs?: number;
18
+ readonly children?: ReactNode;
19
+ }
20
+ /**
21
+ * Opacity press feedback around any content (MAUI `G9PressFeedbackBehavior` attached to a view; `.For(command)` is
22
+ * `<G9Pressable onPress={…}>`). The feedback runs on the main thread; the press goes through `useG9Press`.
23
+ */
24
+ export declare function G9Pressable(props: G9PressableProps): ReactNode;
25
+ //# sourceMappingURL=pressable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pressable.d.ts","sourceRoot":"","sources":["../../src/base/pressable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,KAAK,kBAAkB,EAAgB,MAAM,WAAW,CAAC;AAClE,OAAO,EAAE,KAAK,aAAa,EAA8B,MAAM,SAAS,CAAC;AAEzE,gHAAgH;AAChH,eAAO,MAAM,uBAAuB,EAAE,aAOpC,CAAC;AAEH,oCAAoC;AACpC,MAAM,WAAW,gBAAiB,SAAQ,kBAAkB;IAC1D,+GAA+G;IAC/G,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,kCAAkC;IAClC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,qDAAqD;IACrD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,2CAA2C;IAC3C,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,2CAA2C;IAC3C,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;CAC/B;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,SAAS,CA4B9D"}
@@ -0,0 +1,38 @@
1
+ import { useG9Control } from "./control.jsx";
2
+ import { useG9Press, usePressVisual } from "./press.jsx";
3
+ const g9PressFeedbackDefaults = Object.freeze({
4
+ property: 'opacity',
5
+ rest: 1,
6
+ hovered: 0.86,
7
+ pressed: 0.78,
8
+ inMs: 110,
9
+ outMs: 110
10
+ });
11
+ function G9Pressable(props) {
12
+ var _props_animationDurationMs, _props_restOpacity, _props_hoveredOpacity, _props_pressedOpacity, _props_restOpacity1;
13
+ const control = useG9Control(props, 'g9-pressable');
14
+ const press = useG9Press(props.onPress, {
15
+ blocked: control.disabled,
16
+ source: 'G9Pressable'
17
+ });
18
+ const ms = null != (_props_animationDurationMs = props.animationDurationMs) ? _props_animationDurationMs : g9PressFeedbackDefaults.inMs;
19
+ const visual = usePressVisual({
20
+ property: 'opacity',
21
+ rest: null != (_props_restOpacity = props.restOpacity) ? _props_restOpacity : g9PressFeedbackDefaults.rest,
22
+ hovered: null != (_props_hoveredOpacity = props.hoveredOpacity) ? _props_hoveredOpacity : g9PressFeedbackDefaults.hovered,
23
+ pressed: null != (_props_pressedOpacity = props.pressedOpacity) ? _props_pressedOpacity : g9PressFeedbackDefaults.pressed,
24
+ inMs: ms,
25
+ outMs: ms
26
+ }, control.disabled);
27
+ return <view className={control.className} style={{
28
+ opacity: null != (_props_restOpacity1 = props.restOpacity) ? _props_restOpacity1 : 1
29
+ }} {...props.accessibilityLabel ? {
30
+ 'accessibility-element': true,
31
+ 'accessibility-label': props.accessibilityLabel
32
+ } : {}} bindtap={press} {...visual}>
33
+ {props.children}
34
+ </view>;
35
+ }
36
+ export { G9Pressable, g9PressFeedbackDefaults };
37
+
38
+ //# sourceMappingURL=pressable.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base/pressable.jsx","sources":["../../src/base/pressable.tsx"],"sourcesContent":["import type { ReactNode } from '@lynx-js/react';\nimport { type G9ControlBaseProps, useG9Control } from './control';\nimport { type G9PressVisual, useG9Press, usePressVisual } from './press';\n\n/** The standard press feedback curve (MAUI `G9PressFeedbackBehavior` defaults: 1 / 0.86 / 0.78 over 110 ms). */\nexport const g9PressFeedbackDefaults: G9PressVisual = Object.freeze({\n property: 'opacity',\n rest: 1,\n hovered: 0.86,\n pressed: 0.78,\n inMs: 110,\n outMs: 110,\n});\n\n/** Props of {@link G9Pressable}. */\nexport interface G9PressableProps extends G9ControlBaseProps {\n /** The press (MAUI `Command` + `CommandParameter`); one handler on the root, children never take the touch. */\n readonly onPress?: () => void;\n /** Opacity at rest. Default 1. */\n readonly restOpacity?: number;\n /** Opacity under a desktop pointer. Default 0.86. */\n readonly hoveredOpacity?: number;\n /** Opacity while pressed. Default 0.78. */\n readonly pressedOpacity?: number;\n /** Each tween's length. Default 110 ms. */\n readonly animationDurationMs?: number;\n readonly children?: ReactNode;\n}\n\n/**\n * Opacity press feedback around any content (MAUI `G9PressFeedbackBehavior` attached to a view; `.For(command)` is\n * `<G9Pressable onPress={…}>`). The feedback runs on the main thread; the press goes through `useG9Press`.\n */\nexport function G9Pressable(props: G9PressableProps): ReactNode {\n const control = useG9Control(props, 'g9-pressable');\n const press = useG9Press(props.onPress, { blocked: control.disabled, source: 'G9Pressable' });\n const ms = props.animationDurationMs ?? g9PressFeedbackDefaults.inMs;\n const visual = usePressVisual(\n {\n property: 'opacity',\n rest: props.restOpacity ?? g9PressFeedbackDefaults.rest,\n hovered: props.hoveredOpacity ?? (g9PressFeedbackDefaults.hovered as number),\n pressed: props.pressedOpacity ?? g9PressFeedbackDefaults.pressed,\n inMs: ms,\n outMs: ms,\n },\n control.disabled,\n );\n return (\n <view\n className={control.className}\n style={{ opacity: props.restOpacity ?? 1 }}\n {...(props.accessibilityLabel\n ? { 'accessibility-element': true, 'accessibility-label': props.accessibilityLabel }\n : {})}\n bindtap={press}\n {...visual}\n >\n {props.children}\n </view>\n );\n}\n"],"names":["g9PressFeedbackDefaults","Object","G9Pressable","props","_props_animationDurationMs","_props_restOpacity","_props_hoveredOpacity","_props_pressedOpacity","_props_restOpacity1","control","useG9Control","press","useG9Press","ms","visual","usePressVisual","view"],"mappings":";;AAKO,MAAMA,0BAAyCC,OAAO,MAAM,CAAC;IAClE,UAAU;IACV,MAAM;IACN,SAAS;IACT,SAAS;IACT,MAAM;IACN,OAAO;AACT;AAqBO,SAASC,YAAYC,KAAuB;QAGtCC,4BAIDC,oBACGC,uBACAC,uBASSC;IAjBtB,MAAMC,UAAUC,aAAaP,OAAO;IACpC,MAAMQ,QAAQC,WAAWT,MAAM,OAAO,EAAE;QAAE,SAASM,QAAQ,QAAQ;QAAE,QAAQ;IAAc;IAC3F,MAAMI,KAAK,QAAAT,CAAAA,6BAAAA,MAAM,mBAAmB,AAAD,IAAxBA,6BAA6BJ,wBAAwB,IAAI;IACpE,MAAMc,SAASC,eACb;QACE,UAAU;QACV,MAAM,QAAAV,CAAAA,qBAAAA,MAAM,WAAW,AAAD,IAAhBA,qBAAqBL,wBAAwB,IAAI;QACvD,SAAS,QAAAM,CAAAA,wBAAAA,MAAM,cAAc,AAAD,IAAnBA,wBAAyBN,wBAAwB,OAAO;QACjE,SAAS,QAAAO,CAAAA,wBAAAA,MAAM,cAAc,AAAD,IAAnBA,wBAAwBP,wBAAwB,OAAO;QAChE,MAAMa;QACN,OAAOA;IACT,GACAJ,QAAQ,QAAQ;IAElB,QACGO,KACC,WAAWP,QAAQ,SAAS,EAC5B,OAAO;QAAE,SAAS,QAAAD,CAAAA,sBAAAA,MAAM,WAAW,AAAD,IAAhBA,sBAAqB;IAAE,IACxC,GAAIL,MAAM,kBAAkB,GACzB;QAAE,yBAAyB;QAAM,uBAAuBA,MAAM,kBAAkB;IAAC,IACjF,CAAC,CAAC,EACN,SAASQ,QACR,GAAGG,MAAM,EACX;MACC,CAACX,MAAM,QAAQ,CAAC;IAClB,EAAEa;AAEN"}
@@ -0,0 +1,29 @@
1
+ import type { G9ImageSource } from '@g9tm/lynxcontrols-foundation';
2
+ import type { G9IconInput } from '../icon/icon.js';
3
+ /**
4
+ * One selectable item (MAUI `G9SelectionItem`), shared by the chip group (WP04), the selection sheet and the pickers
5
+ * (WP05/WP06). Plain data: create it inline or map your own objects to it.
6
+ */
7
+ export interface G9SelectionItem<TValue = unknown> {
8
+ readonly text: string;
9
+ /** Stable identity; when blank, `text` is the identity (MAUI `SelectionIdentity`). */
10
+ readonly key?: string | null | undefined;
11
+ readonly emoji?: string | null | undefined;
12
+ readonly icon?: G9IconInput | undefined;
13
+ readonly iconPath?: string | null | undefined;
14
+ readonly iconImage?: G9ImageSource | null | undefined;
15
+ readonly iconTintColor?: string | null | undefined;
16
+ /** Colour swatch (one colour = circle, two = split circle). */
17
+ readonly swatchFirstColor?: string | null | undefined;
18
+ readonly swatchSecondColor?: string | null | undefined;
19
+ /** App payload, never read by the controls. */
20
+ readonly value?: TValue | undefined;
21
+ /** Default true. */
22
+ readonly isEnabled?: boolean | undefined;
23
+ /** Selected fill override (wins over the group's). */
24
+ readonly selectedColor?: string | null | undefined;
25
+ readonly selectedTextColor?: string | null | undefined;
26
+ }
27
+ /** The identity of an item: `key` unless blank, else `text` (MAUI `G9SelectionItem.SelectionIdentity`). */
28
+ export declare function selectionKey(item: Pick<G9SelectionItem, 'key' | 'text'>): string;
29
+ //# sourceMappingURL=selection-item.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selection-item.d.ts","sourceRoot":"","sources":["../../src/base/selection-item.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD;;;GAGG;AACH,MAAM,WAAW,eAAe,CAAC,MAAM,GAAG,OAAO;IAC/C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,sFAAsF;IACtF,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,GAAG,IAAI,GAAG,SAAS,CAAC;IACtD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACnD,+DAA+D;IAC/D,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACtD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACvD,+CAA+C;IAC/C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,oBAAoB;IACpB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACzC,sDAAsD;IACtD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACnD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACxD;AAED,2GAA2G;AAC3G,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,GAAG,MAAM,CAAC,GAAG,MAAM,CAEhF"}
@@ -0,0 +1,6 @@
1
+ function selectionKey(item) {
2
+ return null != item.key && '' !== item.key.trim() ? item.key : item.text;
3
+ }
4
+ export { selectionKey };
5
+
6
+ //# sourceMappingURL=selection-item.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base/selection-item.jsx","sources":["../../src/base/selection-item.ts"],"sourcesContent":["import type { G9ImageSource } from '@g9tm/lynxcontrols-foundation';\nimport type { G9IconInput } from '../icon/icon';\n\n/**\n * One selectable item (MAUI `G9SelectionItem`), shared by the chip group (WP04), the selection sheet and the pickers\n * (WP05/WP06). Plain data: create it inline or map your own objects to it.\n */\nexport interface G9SelectionItem<TValue = unknown> {\n readonly text: string;\n /** Stable identity; when blank, `text` is the identity (MAUI `SelectionIdentity`). */\n readonly key?: string | null | undefined;\n readonly emoji?: string | null | undefined;\n readonly icon?: G9IconInput | undefined;\n readonly iconPath?: string | null | undefined;\n readonly iconImage?: G9ImageSource | null | undefined;\n readonly iconTintColor?: string | null | undefined;\n /** Colour swatch (one colour = circle, two = split circle). */\n readonly swatchFirstColor?: string | null | undefined;\n readonly swatchSecondColor?: string | null | undefined;\n /** App payload, never read by the controls. */\n readonly value?: TValue | undefined;\n /** Default true. */\n readonly isEnabled?: boolean | undefined;\n /** Selected fill override (wins over the group's). */\n readonly selectedColor?: string | null | undefined;\n readonly selectedTextColor?: string | null | undefined;\n}\n\n/** The identity of an item: `key` unless blank, else `text` (MAUI `G9SelectionItem.SelectionIdentity`). */\nexport function selectionKey(item: Pick<G9SelectionItem, 'key' | 'text'>): string {\n return item.key != null && item.key.trim() !== '' ? item.key : item.text;\n}\n"],"names":["selectionKey","item"],"mappings":"AA6BO,SAASA,aAAaC,IAA2C;IACtE,OAAOA,AAAY,QAAZA,KAAK,GAAG,IAAYA,AAAoB,OAApBA,KAAK,GAAG,CAAC,IAAI,KAAYA,KAAK,GAAG,GAAGA,KAAK,IAAI;AAC1E"}
@@ -0,0 +1,7 @@
1
+ /** A timer handle as the runtime returns it. */
2
+ export type G9TimerHandle = unknown;
3
+ /** Schedules `callback` after `ms` milliseconds (negative is treated as 0). */
4
+ export declare function startTimer(callback: () => void, ms: number): G9TimerHandle;
5
+ /** Cancels a timer from {@link startTimer}; cancelling twice or after it fired is harmless. */
6
+ export declare function stopTimer(handle: G9TimerHandle): void;
7
+ //# sourceMappingURL=timers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timers.d.ts","sourceRoot":"","sources":["../../src/base/timers.ts"],"names":[],"mappings":"AAIA,gDAAgD;AAChD,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC;AAEpC,+EAA+E;AAC/E,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,EAAE,EAAE,MAAM,GAAG,aAAa,CAE1E;AAED,+FAA+F;AAC/F,wBAAgB,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAErD"}
@@ -0,0 +1,10 @@
1
+ import { g9RuntimeTimers } from "@g9tm/lynxcontrols-foundation";
2
+ function startTimer(callback, ms) {
3
+ return g9RuntimeTimers.setTimeout(callback, Math.max(0, ms));
4
+ }
5
+ function stopTimer(handle) {
6
+ g9RuntimeTimers.clearTimeout(handle);
7
+ }
8
+ export { startTimer, stopTimer };
9
+
10
+ //# sourceMappingURL=timers.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base/timers.jsx","sources":["../../src/base/timers.ts"],"sourcesContent":["// The runtime timers: foundation's `g9RuntimeTimers` (bundle-scope `setTimeout` / `clearTimeout`; Lynx does not put\n// them on `globalThis`). Every G9 control timer goes through here so a disposer can clear it and tests can fake it.\nimport { g9RuntimeTimers } from '@g9tm/lynxcontrols-foundation';\n\n/** A timer handle as the runtime returns it. */\nexport type G9TimerHandle = unknown;\n\n/** Schedules `callback` after `ms` milliseconds (negative is treated as 0). */\nexport function startTimer(callback: () => void, ms: number): G9TimerHandle {\n return g9RuntimeTimers.setTimeout(callback, Math.max(0, ms));\n}\n\n/** Cancels a timer from {@link startTimer}; cancelling twice or after it fired is harmless. */\nexport function stopTimer(handle: G9TimerHandle): void {\n g9RuntimeTimers.clearTimeout(handle);\n}\n"],"names":["startTimer","callback","ms","g9RuntimeTimers","Math","stopTimer","handle"],"mappings":";AAQO,SAASA,WAAWC,QAAoB,EAAEC,EAAU;IACzD,OAAOC,gBAAgB,UAAU,CAACF,UAAUG,KAAK,GAAG,CAAC,GAAGF;AAC1D;AAGO,SAASG,UAAUC,MAAqB;IAC7CH,gBAAgB,YAAY,CAACG;AAC/B"}
@@ -0,0 +1,30 @@
1
+ /** Inputs of {@link useControllableState}: one MAUI two-way property (plan/specs/03 §3). */
2
+ export interface G9ControllableStateOptions<T, TExtra extends unknown[]> {
3
+ /** The controlled value. Present (anything but `undefined`, `null` included) means the caller owns the state. */
4
+ readonly value: T | undefined;
5
+ /** The initial value while uncontrolled. Read once, on the first render. */
6
+ readonly defaultValue: T;
7
+ /** Told once per logical change, with any extra payload the setter received (e.g. `{ source }`). */
8
+ readonly onChange?: ((value: T, ...extra: TExtra) => void) | undefined;
9
+ /** Names the prop in the development diagnostic, e.g. `'G9Switch.checked'`. */
10
+ readonly name: string;
11
+ /** Equality of two values; a setter call with an equal value changes nothing. Default `Object.is`. */
12
+ readonly equals?: ((a: T, b: T) => boolean) | undefined;
13
+ }
14
+ /** Sets the value: a value or an updater of the current one, plus the extra payload for `onChange`. */
15
+ export type G9ControllableSetter<T, TExtra extends unknown[]> = (next: T | ((current: T) => T), ...extra: TExtra) => void;
16
+ /**
17
+ * The library's only implementation of controlled/uncontrolled state (plan/specs/03 §3, WP02 design note).
18
+ *
19
+ * - Controlled (`value !== undefined`): the returned value is always `value`; the setter only calls `onChange`.
20
+ * - Uncontrolled: the hook keeps the state, starting at `defaultValue` (read once).
21
+ * - `onChange` fires once per logical change: never for a value equal to the current one and never for a value the
22
+ * parent pushed in through `value`.
23
+ * - Switching between controlled and uncontrolled during the component's life emits one development diagnostic
24
+ * (a `warning` log on the provider's diagnostics hub, or `console.warn` outside a provider) and keeps working with
25
+ * the new mode.
26
+ *
27
+ * The setter's identity is stable. `T` must not be a function type (a function argument is an updater).
28
+ */
29
+ export declare function useControllableState<T, TExtra extends unknown[] = []>(options: G9ControllableStateOptions<T, TExtra>): [T, G9ControllableSetter<T, TExtra>];
30
+ //# sourceMappingURL=use-controllable-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-controllable-state.d.ts","sourceRoot":"","sources":["../../src/base/use-controllable-state.ts"],"names":[],"mappings":"AAIA,4FAA4F;AAC5F,MAAM,WAAW,0BAA0B,CAAC,CAAC,EAAE,MAAM,SAAS,OAAO,EAAE;IACrE,iHAAiH;IACjH,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC;IAC9B,4EAA4E;IAC5E,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC;IACzB,oGAAoG;IACpG,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACvE,+EAA+E;IAC/E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,sGAAsG;IACtG,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;CACzD;AAED,uGAAuG;AACvG,MAAM,MAAM,oBAAoB,CAAC,CAAC,EAAE,MAAM,SAAS,OAAO,EAAE,IAAI,CAC9D,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,EAC7B,GAAG,KAAK,EAAE,MAAM,KACb,IAAI,CAAC;AAEV;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,MAAM,SAAS,OAAO,EAAE,GAAG,EAAE,EACnE,OAAO,EAAE,0BAA0B,CAAC,CAAC,EAAE,MAAM,CAAC,GAC7C,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAyCtC"}
@@ -0,0 +1,49 @@
1
+ import { useContext, useRef, useState } from "@lynx-js/react";
2
+ import { G9DiagnosticsContext } from "../provider/contexts.jsx";
3
+ import { useStableCallback } from "./use-stable-callback.jsx";
4
+ function useControllableState(options) {
5
+ const { value, defaultValue, name } = options;
6
+ const controlled = void 0 !== value;
7
+ const [internal, setInternal] = useState(defaultValue);
8
+ const diagnostics = useContext(G9DiagnosticsContext);
9
+ const wasControlled = useRef(controlled);
10
+ const warned = useRef(false);
11
+ if (wasControlled.current !== controlled) {
12
+ if (!warned.current) {
13
+ warned.current = true;
14
+ const message = `${name} switched from ${wasControlled.current ? 'controlled' : 'uncontrolled'} to ${controlled ? 'controlled' : 'uncontrolled'}. Decide once: pass the value on every render, or never.`;
15
+ if (diagnostics) diagnostics.log({
16
+ level: 'warning',
17
+ message,
18
+ source: name
19
+ });
20
+ else console.warn(`[G9] ${message}`);
21
+ }
22
+ wasControlled.current = controlled;
23
+ }
24
+ const current = controlled ? value : internal;
25
+ const latest = useRef(current);
26
+ latest.current = current;
27
+ const notify = useStableCallback(options.onChange);
28
+ const equals = useRef(options.equals);
29
+ equals.current = options.equals;
30
+ const isControlled = useRef(controlled);
31
+ isControlled.current = controlled;
32
+ const setValue = useStableCallback((next, ...extra)=>{
33
+ var _equals_current;
34
+ const resolved = 'function' == typeof next ? next(latest.current) : next;
35
+ if ((null != (_equals_current = equals.current) ? _equals_current : Object.is)(latest.current, resolved)) return;
36
+ if (!isControlled.current) {
37
+ latest.current = resolved;
38
+ setInternal(()=>resolved);
39
+ }
40
+ notify(resolved, ...extra);
41
+ });
42
+ return [
43
+ current,
44
+ setValue
45
+ ];
46
+ }
47
+ export { useControllableState };
48
+
49
+ //# sourceMappingURL=use-controllable-state.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base/use-controllable-state.jsx","sources":["../../src/base/use-controllable-state.ts"],"sourcesContent":["import { useContext, useRef, useState } from '@lynx-js/react';\nimport { G9DiagnosticsContext } from '../provider/contexts';\nimport { useStableCallback } from './use-stable-callback';\n\n/** Inputs of {@link useControllableState}: one MAUI two-way property (plan/specs/03 §3). */\nexport interface G9ControllableStateOptions<T, TExtra extends unknown[]> {\n /** The controlled value. Present (anything but `undefined`, `null` included) means the caller owns the state. */\n readonly value: T | undefined;\n /** The initial value while uncontrolled. Read once, on the first render. */\n readonly defaultValue: T;\n /** Told once per logical change, with any extra payload the setter received (e.g. `{ source }`). */\n readonly onChange?: ((value: T, ...extra: TExtra) => void) | undefined;\n /** Names the prop in the development diagnostic, e.g. `'G9Switch.checked'`. */\n readonly name: string;\n /** Equality of two values; a setter call with an equal value changes nothing. Default `Object.is`. */\n readonly equals?: ((a: T, b: T) => boolean) | undefined;\n}\n\n/** Sets the value: a value or an updater of the current one, plus the extra payload for `onChange`. */\nexport type G9ControllableSetter<T, TExtra extends unknown[]> = (\n next: T | ((current: T) => T),\n ...extra: TExtra\n) => void;\n\n/**\n * The library's only implementation of controlled/uncontrolled state (plan/specs/03 §3, WP02 design note).\n *\n * - Controlled (`value !== undefined`): the returned value is always `value`; the setter only calls `onChange`.\n * - Uncontrolled: the hook keeps the state, starting at `defaultValue` (read once).\n * - `onChange` fires once per logical change: never for a value equal to the current one and never for a value the\n * parent pushed in through `value`.\n * - Switching between controlled and uncontrolled during the component's life emits one development diagnostic\n * (a `warning` log on the provider's diagnostics hub, or `console.warn` outside a provider) and keeps working with\n * the new mode.\n *\n * The setter's identity is stable. `T` must not be a function type (a function argument is an updater).\n */\nexport function useControllableState<T, TExtra extends unknown[] = []>(\n options: G9ControllableStateOptions<T, TExtra>,\n): [T, G9ControllableSetter<T, TExtra>] {\n const { value, defaultValue, name } = options;\n const controlled = value !== undefined;\n const [internal, setInternal] = useState<T>(defaultValue);\n const diagnostics = useContext(G9DiagnosticsContext);\n\n const wasControlled = useRef(controlled);\n const warned = useRef(false);\n if (wasControlled.current !== controlled) {\n if (!warned.current) {\n warned.current = true;\n const message =\n `${name} switched from ${wasControlled.current ? 'controlled' : 'uncontrolled'} to ` +\n `${controlled ? 'controlled' : 'uncontrolled'}. Decide once: pass the value on every render, or never.`;\n if (diagnostics) diagnostics.log({ level: 'warning', message, source: name });\n else console.warn(`[G9] ${message}`);\n }\n wasControlled.current = controlled;\n }\n\n const current = controlled ? value : internal;\n const latest = useRef(current);\n latest.current = current;\n\n const notify = useStableCallback(options.onChange);\n const equals = useRef(options.equals);\n equals.current = options.equals;\n const isControlled = useRef(controlled);\n isControlled.current = controlled;\n\n const setValue = useStableCallback((next: T | ((current: T) => T), ...extra: TExtra) => {\n const resolved = typeof next === 'function' ? (next as (current: T) => T)(latest.current) : next;\n if ((equals.current ?? Object.is)(latest.current, resolved)) return;\n if (!isControlled.current) {\n latest.current = resolved;\n setInternal(() => resolved);\n }\n notify(resolved, ...extra);\n }) as G9ControllableSetter<T, TExtra>;\n\n return [current, setValue];\n}\n"],"names":["useControllableState","options","value","defaultValue","name","controlled","undefined","internal","setInternal","useState","diagnostics","useContext","G9DiagnosticsContext","wasControlled","useRef","warned","message","console","current","latest","notify","useStableCallback","equals","isControlled","setValue","next","extra","_equals_current","resolved","Object"],"mappings":";;;AAqCO,SAASA,qBACdC,OAA8C;IAE9C,MAAM,EAAEC,KAAK,EAAEC,YAAY,EAAEC,IAAI,EAAE,GAAGH;IACtC,MAAMI,aAAaH,AAAUI,WAAVJ;IACnB,MAAM,CAACK,UAAUC,YAAY,GAAGC,SAAYN;IAC5C,MAAMO,cAAcC,WAAWC;IAE/B,MAAMC,gBAAgBC,OAAOT;IAC7B,MAAMU,SAASD,OAAO;IACtB,IAAID,cAAc,OAAO,KAAKR,YAAY;QACxC,IAAI,CAACU,OAAO,OAAO,EAAE;YACnBA,OAAO,OAAO,GAAG;YACjB,MAAMC,UACJ,GAAGZ,KAAK,eAAe,EAAES,cAAc,OAAO,GAAG,eAAe,eAC/D,MAAER,aAAa,eAAe,eAAe,wDAAwD,CADlB;YAEtF,IAAIK,aAAaA,YAAY,GAAG,CAAC;gBAAE,OAAO;gBAAWM;gBAAS,QAAQZ;YAAK;iBACtEa,QAAQ,IAAI,CAAC,CAAC,KAAK,EAAED,SAAS;QACrC;QACAH,cAAc,OAAO,GAAGR;IAC1B;IAEA,MAAMa,UAAUb,aAAaH,QAAQK;IACrC,MAAMY,SAASL,OAAOI;IACtBC,OAAO,OAAO,GAAGD;IAEjB,MAAME,SAASC,kBAAkBpB,QAAQ,QAAQ;IACjD,MAAMqB,SAASR,OAAOb,QAAQ,MAAM;IACpCqB,OAAO,OAAO,GAAGrB,QAAQ,MAAM;IAC/B,MAAMsB,eAAeT,OAAOT;IAC5BkB,aAAa,OAAO,GAAGlB;IAEvB,MAAMmB,WAAWH,kBAAkB,CAACI,MAA+B,GAAGC;YAE/DC;QADL,MAAMC,WAAW,AAAgB,cAAhB,OAAOH,OAAuBA,KAA2BN,OAAO,OAAO,IAAIM;QAC5F,IAAI,AAAC,SAAAE,CAAAA,kBAAAA,OAAO,OAAO,AAAD,IAAbA,kBAAkBE,OAAO,EAAE,AAAD,EAAGV,OAAO,OAAO,EAAES,WAAW;QAC7D,IAAI,CAACL,aAAa,OAAO,EAAE;YACzBJ,OAAO,OAAO,GAAGS;YACjBpB,YAAY,IAAMoB;QACpB;QACAR,OAAOQ,aAAaF;IACtB;IAEA,OAAO;QAACR;QAASM;KAAS;AAC5B"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * A function whose identity never changes but which always calls the latest `callback` (the "event handler ref"
3
+ * pattern). Use it for callbacks handed to subscriptions, timers and child props, so a parent re-render neither
4
+ * re-subscribes nor re-renders a memoised child. It always calls the callback of the most recent
5
+ * render. `undefined` makes it a no-op that returns `undefined` (an optional callback prop).
6
+ */
7
+ export declare function useStableCallback<TArgs extends unknown[], TResult>(callback: ((...args: TArgs) => TResult) | undefined): (...args: TArgs) => TResult | undefined;
8
+ //# sourceMappingURL=use-stable-callback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-stable-callback.d.ts","sourceRoot":"","sources":["../../src/base/use-stable-callback.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,SAAS,OAAO,EAAE,EAAE,OAAO,EAChE,QAAQ,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,GAAG,SAAS,GAClD,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,OAAO,GAAG,SAAS,CAIzC"}
@@ -0,0 +1,12 @@
1
+ import { useCallback, useRef } from "@lynx-js/react";
2
+ function useStableCallback(callback) {
3
+ const latest = useRef(callback);
4
+ latest.current = callback;
5
+ return useCallback((...args)=>{
6
+ var _latest_current;
7
+ return null == (_latest_current = latest.current) ? void 0 : _latest_current.call(latest, ...args);
8
+ }, []);
9
+ }
10
+ export { useStableCallback };
11
+
12
+ //# sourceMappingURL=use-stable-callback.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base/use-stable-callback.jsx","sources":["../../src/base/use-stable-callback.ts"],"sourcesContent":["import { useCallback, useRef } from '@lynx-js/react';\n\n/**\n * A function whose identity never changes but which always calls the latest `callback` (the \"event handler ref\"\n * pattern). Use it for callbacks handed to subscriptions, timers and child props, so a parent re-render neither\n * re-subscribes nor re-renders a memoised child. It always calls the callback of the most recent\n * render. `undefined` makes it a no-op that returns `undefined` (an optional callback prop).\n */\nexport function useStableCallback<TArgs extends unknown[], TResult>(\n callback: ((...args: TArgs) => TResult) | undefined,\n): (...args: TArgs) => TResult | undefined {\n const latest = useRef(callback);\n latest.current = callback;\n return useCallback((...args: TArgs) => latest.current?.(...args), []);\n}\n"],"names":["useStableCallback","callback","latest","useRef","useCallback","args"],"mappings":";AAQO,SAASA,kBACdC,QAAmD;IAEnD,MAAMC,SAASC,OAAOF;IACtBC,OAAO,OAAO,GAAGD;IACjB,OAAOG,YAAY,CAAC,GAAGC;YAAgBH;uBAAAA,CAAAA,kBAAAA,OAAO,OAAO,AAAD,IAAbA,KAAAA,IAAAA,gBAAAA,IAAAA,CAAAA,WAAoBG;OAAO,EAAE;AACtE"}
@@ -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":""}