@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,111 @@
1
+ const f = Math.fround;
2
+ const g9CheckFillPhaseEnd = f(0.4);
3
+ const g9CheckMarkPhaseStart = f(0.25);
4
+ function clamp01(value) {
5
+ if (!(value > 0)) return 0;
6
+ return value >= 1 ? 1 : f(value);
7
+ }
8
+ function targetProgress(isChecked, isIndeterminate) {
9
+ return isChecked || isIndeterminate ? 1 : 0;
10
+ }
11
+ function targetMorph(isIndeterminate) {
12
+ return isIndeterminate ? 1 : 0;
13
+ }
14
+ function nextOnTap(isChecked, isIndeterminate) {
15
+ return isIndeterminate ? {
16
+ checked: true,
17
+ indeterminate: false
18
+ } : {
19
+ checked: !isChecked,
20
+ indeterminate: false
21
+ };
22
+ }
23
+ function fillAmount(progress) {
24
+ return clamp01(f(f(progress) / g9CheckFillPhaseEnd));
25
+ }
26
+ function markAmount(progress) {
27
+ return clamp01(f(f(f(progress) - g9CheckMarkPhaseStart) / f(1 - g9CheckMarkPhaseStart)));
28
+ }
29
+ const geometry = (ax, ay, bx, by, cx, cy)=>Object.freeze({
30
+ ax: f(ax),
31
+ ay: f(ay),
32
+ bx: f(bx),
33
+ by: f(by),
34
+ cx: f(cx),
35
+ cy: f(cy)
36
+ });
37
+ const g9CheckGeometry = geometry(0.24, 0.52, 0.42, 0.7, 0.77, 0.33);
38
+ const g9DashGeometry = geometry(0.26, 0.5, 0.5, 0.5, 0.74, 0.5);
39
+ const lerp = (from, to, t)=>f(from + f(f(to - from) * t));
40
+ const distance = (x1, y1, x2, y2)=>{
41
+ const dx = f(x2 - x1);
42
+ const dy = f(y2 - y1);
43
+ return f(Math.sqrt(f(f(dx * dx) + f(dy * dy))));
44
+ };
45
+ function resolveCheckMarkGeometry(morph) {
46
+ const t = clamp01(morph);
47
+ if (t <= 0) return g9CheckGeometry;
48
+ if (t >= 1) return g9DashGeometry;
49
+ const c = g9CheckGeometry;
50
+ const d = g9DashGeometry;
51
+ return Object.freeze({
52
+ ax: lerp(c.ax, d.ax, t),
53
+ ay: lerp(c.ay, d.ay, t),
54
+ bx: lerp(c.bx, d.bx, t),
55
+ by: lerp(c.by, d.by, t),
56
+ cx: lerp(c.cx, d.cx, t),
57
+ cy: lerp(c.cy, d.cy, t)
58
+ });
59
+ }
60
+ function firstArmLength(g) {
61
+ return distance(g.ax, g.ay, g.bx, g.by);
62
+ }
63
+ function secondArmLength(g) {
64
+ return distance(g.bx, g.by, g.cx, g.cy);
65
+ }
66
+ const emptyTrim = Object.freeze({
67
+ isEmpty: true,
68
+ firstEndX: 0,
69
+ firstEndY: 0,
70
+ hasSecond: false,
71
+ secondEndX: 0,
72
+ secondEndY: 0
73
+ });
74
+ function trimCheckMark(g, amount) {
75
+ const t = clamp01(amount);
76
+ const first = firstArmLength(g);
77
+ const total = f(first + secondArmLength(g));
78
+ if (t <= 0 || total <= 0) return emptyTrim;
79
+ const drawn = f(t * total);
80
+ if (drawn <= first) {
81
+ const k = f(drawn / first);
82
+ return {
83
+ isEmpty: false,
84
+ firstEndX: f(g.ax + f(f(g.bx - g.ax) * k)),
85
+ firstEndY: f(g.ay + f(f(g.by - g.ay) * k)),
86
+ hasSecond: false,
87
+ secondEndX: g.bx,
88
+ secondEndY: g.by
89
+ };
90
+ }
91
+ const s = f(f(drawn - first) / f(total - first));
92
+ return {
93
+ isEmpty: false,
94
+ firstEndX: g.bx,
95
+ firstEndY: g.by,
96
+ hasSecond: true,
97
+ secondEndX: f(g.bx + f(f(g.cx - g.bx) * s)),
98
+ secondEndY: f(g.by + f(f(g.cy - g.by) * s))
99
+ };
100
+ }
101
+ function checkMarkPath(progress, morph, size) {
102
+ const trim = trimCheckMark(resolveCheckMarkGeometry(morph), markAmount(progress));
103
+ if (trim.isEmpty) return '';
104
+ const g = resolveCheckMarkGeometry(morph);
105
+ const p = (x, y)=>`${round(x * size)} ${round(y * size)}`;
106
+ return trim.hasSecond ? `M${p(g.ax, g.ay)} L${p(trim.firstEndX, trim.firstEndY)} L${p(trim.secondEndX, trim.secondEndY)}` : `M${p(g.ax, g.ay)} L${p(trim.firstEndX, trim.firstEndY)}`;
107
+ }
108
+ const round = (n)=>Math.round(1000 * n) / 1000;
109
+ export { checkMarkPath, clamp01, fillAmount, firstArmLength, g9CheckFillPhaseEnd, g9CheckGeometry, g9CheckMarkPhaseStart, g9DashGeometry, markAmount, nextOnTap, resolveCheckMarkGeometry, secondArmLength, targetMorph, targetProgress, trimCheckMark };
110
+
111
+ //# sourceMappingURL=checkbox-math.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toggle/checkbox-math.jsx","sources":["../../src/toggle/checkbox-math.ts"],"sourcesContent":["// MAUI `G9CheckBoxMath` / `G9CheckMarkGeometry` (Controls/G9CheckBox/G9CheckBoxMath.cs), in float32 like the C#\n// (`Math.fround` after every operation), so the golden vectors (plan/golden/checkbox.json) match bit for bit.\n\nconst f = Math.fround;\n\n/** Progress at which the box fill is complete. */\nexport const g9CheckFillPhaseEnd = f(0.4);\n/** Progress at which the mark starts drawing. */\nexport const g9CheckMarkPhaseStart = f(0.25);\n\n/** Clamps to [0, 1]; NaN and negatives give 0 (MAUI `Clamp01`). */\nexport function clamp01(value: number): number {\n if (!(value > 0)) return 0;\n return value >= 1 ? 1 : f(value);\n}\n\n/** Animation target: 1 when checked or indeterminate. */\nexport function targetProgress(isChecked: boolean, isIndeterminate: boolean): number {\n return isChecked || isIndeterminate ? 1 : 0;\n}\n\n/** Morph target: 1 (dash) when indeterminate, 0 (tick) otherwise. */\nexport function targetMorph(isIndeterminate: boolean): number {\n return isIndeterminate ? 1 : 0;\n}\n\n/** Tap transition (ADR-0028): indeterminate → checked; otherwise toggle, never into indeterminate. */\nexport function nextOnTap(isChecked: boolean, isIndeterminate: boolean): { checked: boolean; indeterminate: boolean } {\n return isIndeterminate ? { checked: true, indeterminate: false } : { checked: !isChecked, indeterminate: false };\n}\n\n/** How much of the box is filled at `progress`. */\nexport function fillAmount(progress: number): number {\n return clamp01(f(f(progress) / g9CheckFillPhaseEnd));\n}\n\n/** How much of the mark is drawn at `progress`. */\nexport function markAmount(progress: number): number {\n return clamp01(f(f(f(progress) - g9CheckMarkPhaseStart) / f(1 - g9CheckMarkPhaseStart)));\n}\n\n/** The two-segment mark A→B→C in unit box coordinates. */\nexport interface G9CheckMarkGeometry {\n readonly ax: number;\n readonly ay: number;\n readonly bx: number;\n readonly by: number;\n readonly cx: number;\n readonly cy: number;\n}\n\n/** The visible part of the mark: the end of the first arm, and of the second when it has started. */\nexport interface G9CheckMarkTrim {\n readonly isEmpty: boolean;\n readonly firstEndX: number;\n readonly firstEndY: number;\n readonly hasSecond: boolean;\n readonly secondEndX: number;\n readonly secondEndY: number;\n}\n\nconst geometry = (ax: number, ay: number, bx: number, by: number, cx: number, cy: number): G9CheckMarkGeometry =>\n Object.freeze({ ax: f(ax), ay: f(ay), bx: f(bx), by: f(by), cx: f(cx), cy: f(cy) });\n\n/** The tick. */\nexport const g9CheckGeometry = geometry(0.24, 0.52, 0.42, 0.7, 0.77, 0.33);\n/** The indeterminate dash. */\nexport const g9DashGeometry = geometry(0.26, 0.5, 0.5, 0.5, 0.74, 0.5);\n\nconst lerp = (from: number, to: number, t: number) => f(from + f(f(to - from) * t));\nconst distance = (x1: number, y1: number, x2: number, y2: number) => {\n const dx = f(x2 - x1);\n const dy = f(y2 - y1);\n return f(Math.sqrt(f(f(dx * dx) + f(dy * dy))));\n};\n\n/** The mark between tick (0) and dash (1). */\nexport function resolveCheckMarkGeometry(morph: number): G9CheckMarkGeometry {\n const t = clamp01(morph);\n if (t <= 0) return g9CheckGeometry;\n if (t >= 1) return g9DashGeometry;\n const c = g9CheckGeometry;\n const d = g9DashGeometry;\n return Object.freeze({\n ax: lerp(c.ax, d.ax, t),\n ay: lerp(c.ay, d.ay, t),\n bx: lerp(c.bx, d.bx, t),\n by: lerp(c.by, d.by, t),\n cx: lerp(c.cx, d.cx, t),\n cy: lerp(c.cy, d.cy, t),\n });\n}\n\n/** Length of the first arm A→B. */\nexport function firstArmLength(g: G9CheckMarkGeometry): number {\n return distance(g.ax, g.ay, g.bx, g.by);\n}\n\n/** Length of the second arm B→C. */\nexport function secondArmLength(g: G9CheckMarkGeometry): number {\n return distance(g.bx, g.by, g.cx, g.cy);\n}\n\nconst emptyTrim: G9CheckMarkTrim = Object.freeze({\n isEmpty: true,\n firstEndX: 0,\n firstEndY: 0,\n hasSecond: false,\n secondEndX: 0,\n secondEndY: 0,\n});\n\n/** The visible part of the mark when `amount` of its length is drawn (MAUI `Trim`). */\nexport function trimCheckMark(g: G9CheckMarkGeometry, amount: number): G9CheckMarkTrim {\n const t = clamp01(amount);\n const first = firstArmLength(g);\n const total = f(first + secondArmLength(g));\n if (t <= 0 || total <= 0) return emptyTrim;\n const drawn = f(t * total);\n if (drawn <= first) {\n const k = f(drawn / first);\n return {\n isEmpty: false,\n firstEndX: f(g.ax + f(f(g.bx - g.ax) * k)),\n firstEndY: f(g.ay + f(f(g.by - g.ay) * k)),\n hasSecond: false,\n secondEndX: g.bx,\n secondEndY: g.by,\n };\n }\n const s = f(f(drawn - first) / f(total - first));\n return {\n isEmpty: false,\n firstEndX: g.bx,\n firstEndY: g.by,\n hasSecond: true,\n secondEndX: f(g.bx + f(f(g.cx - g.bx) * s)),\n secondEndY: f(g.by + f(f(g.cy - g.by) * s)),\n };\n}\n\n/** SVG path (in a `size` box) of the mark drawn at `progress` and `morph` (tick → dash). */\nexport function checkMarkPath(progress: number, morph: number, size: number): string {\n const trim = trimCheckMark(resolveCheckMarkGeometry(morph), markAmount(progress));\n if (trim.isEmpty) return '';\n const g = resolveCheckMarkGeometry(morph);\n const p = (x: number, y: number) => `${round(x * size)} ${round(y * size)}`;\n return trim.hasSecond\n ? `M${p(g.ax, g.ay)} L${p(trim.firstEndX, trim.firstEndY)} L${p(trim.secondEndX, trim.secondEndY)}`\n : `M${p(g.ax, g.ay)} L${p(trim.firstEndX, trim.firstEndY)}`;\n}\n\nconst round = (n: number) => Math.round(n * 1000) / 1000;\n"],"names":["f","Math","g9CheckFillPhaseEnd","g9CheckMarkPhaseStart","clamp01","value","targetProgress","isChecked","isIndeterminate","targetMorph","nextOnTap","fillAmount","progress","markAmount","geometry","ax","ay","bx","by","cx","cy","Object","g9CheckGeometry","g9DashGeometry","lerp","from","to","t","distance","x1","y1","x2","y2","dx","dy","resolveCheckMarkGeometry","morph","c","d","firstArmLength","g","secondArmLength","emptyTrim","trimCheckMark","amount","first","total","drawn","k","s","checkMarkPath","size","trim","p","x","y","round","n"],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import './toggle.css';
2
+ import { type G9PaletteValues } from '@g9tm/lynxcontrols-foundation';
3
+ import { type G9ControlBaseProps } from '../base/control.js';
4
+ /** Box size, corner and stroke (MAUI `G9Metrics` check-box values, ADR-0028). */
5
+ export declare const g9CheckBoxMetrics: Readonly<{
6
+ box: 20;
7
+ corner: 6;
8
+ stroke: 2;
9
+ touchTarget: 48;
10
+ progressMs: 200;
11
+ morphMs: 150;
12
+ }>;
13
+ /** Colours the box is drawn with. */
14
+ export interface G9CheckBoxColors {
15
+ readonly outline: string;
16
+ readonly fill: string;
17
+ readonly mark: string;
18
+ }
19
+ /** The palette colours of a check box (outline, fill, mark; disabled variants). */
20
+ export declare function checkBoxColors(palette: G9PaletteValues, disabled: boolean): G9CheckBoxColors;
21
+ /**
22
+ * The SVG of the box at an animation state (MAUI `G9CheckBoxDrawable`): the outline fades with `1 − fill`
23
+ * (× 0.55 disabled), the fill grows from 78 % to 100 % with its alpha, the mark (tick → dash by `morph`) is trimmed by
24
+ * the golden phase functions. Never mirrored in RTL.
25
+ */
26
+ export declare function checkBoxSvg(progress: number, morph: number, colors: G9CheckBoxColors, disabled: boolean): string;
27
+ /** Props of {@link G9CheckBox} (MAUI `G9CheckBox`). */
28
+ export interface G9CheckBoxProps extends G9ControlBaseProps {
29
+ /** Controlled checked state (MAUI `IsChecked`). */
30
+ readonly checked?: boolean;
31
+ readonly defaultChecked?: boolean;
32
+ /** Once per change of `checked` caused by the control (MAUI `CheckedChanged`); never for pushed values. */
33
+ readonly onCheckedChange?: (checked: boolean) => void;
34
+ /** Controlled third state (MAUI `IsIndeterminate`); a tap clears it. */
35
+ readonly indeterminate?: boolean;
36
+ readonly defaultIndeterminate?: boolean;
37
+ readonly onIndeterminateChange?: (indeterminate: boolean) => void;
38
+ /** Label at the end side; also the accessibility name. */
39
+ readonly text?: string | null;
40
+ /** After every user toggle, with the new state (MAUI `Command`). */
41
+ readonly onPress?: (checked: boolean) => void;
42
+ /** 48 px touch slot with the box at the top; false: a 20 px slot, box centred. Default true. */
43
+ readonly reserveTouchTarget?: boolean;
44
+ }
45
+ /** Imperative handle of {@link G9CheckBox}. */
46
+ export interface G9CheckBoxHandle {
47
+ /** Same as a tap (MAUI `Toggle`); ignored while disabled. */
48
+ toggle(): void;
49
+ }
50
+ /**
51
+ * Tri-state check box (MAUI `G9CheckBox`, ADR-0028): tap toggles, indeterminate → checked, never into
52
+ * indeterminate. The box animates (200 ms fill/tick, 150 ms tick↔dash) by updating the SVG attribute directly
53
+ * (`setNativeProps`), never by re-rendering per frame; the first render does not animate.
54
+ */
55
+ export declare const G9CheckBox: import("react").ForwardRefExoticComponent<G9CheckBoxProps & import("react").RefAttributes<G9CheckBoxHandle>>;
56
+ //# sourceMappingURL=checkbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkbox.d.ts","sourceRoot":"","sources":["../../src/toggle/checkbox.tsx"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAC;AACtB,OAAO,EAAe,KAAK,eAAe,EAA0B,MAAM,+BAA+B,CAAC;AAG1G,OAAO,EAAE,KAAK,kBAAkB,EAAyC,MAAM,iBAAiB,CAAC;AAOjG,iFAAiF;AACjF,eAAO,MAAM,iBAAiB;;;;;;;EAO5B,CAAC;AAEH,qCAAqC;AACrC,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,mFAAmF;AACnF,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,GAAG,gBAAgB,CAM5F;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,CA6BhH;AAED,uDAAuD;AACvD,MAAM,WAAW,eAAgB,SAAQ,kBAAkB;IACzD,mDAAmD;IACnD,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,2GAA2G;IAC3G,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACtD,wEAAwE;IACxE,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IACxC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC,aAAa,EAAE,OAAO,KAAK,IAAI,CAAC;IAClE,0DAA0D;IAC1D,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,oEAAoE;IACpE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9C,gGAAgG;IAChG,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;CACvC;AAED,+CAA+C;AAC/C,MAAM,WAAW,gBAAgB;IAC/B,6DAA6D;IAC7D,MAAM,IAAI,IAAI,CAAC;CAChB;AAED;;;;GAIG;AACH,eAAO,MAAM,UAAU,8GAwHrB,CAAC"}
@@ -0,0 +1,152 @@
1
+ import "./toggle.css";
2
+ import { G9StringKey, formatColor, withAlpha } from "@g9tm/lynxcontrols-foundation";
3
+ import { forwardRef, useEffect, useImperativeHandle, useRef } from "@lynx-js/react";
4
+ import { g9RowStyle, g9TextStart, useG9Control } from "../base/control.jsx";
5
+ import { useG9Press } from "../base/press.jsx";
6
+ import { startTimer, stopTimer } from "../base/timers.jsx";
7
+ import { useControllableState } from "../base/use-controllable-state.jsx";
8
+ import { useG9Strings, useG9Theme } from "../provider/hooks.jsx";
9
+ import { checkMarkPath, fillAmount, nextOnTap, targetMorph, targetProgress } from "./checkbox-math.jsx";
10
+ const g9CheckBoxMetrics = Object.freeze({
11
+ box: 20,
12
+ corner: 6,
13
+ stroke: 2,
14
+ touchTarget: 48,
15
+ progressMs: 200,
16
+ morphMs: 150
17
+ });
18
+ function checkBoxColors(palette, disabled) {
19
+ return {
20
+ outline: palette.Outline,
21
+ fill: disabled ? palette.TextDisabled : palette.Primary,
22
+ mark: disabled ? palette.Surface : palette.OnPrimary
23
+ };
24
+ }
25
+ function checkBoxSvg(progress, morph, colors, disabled) {
26
+ const m = g9CheckBoxMetrics;
27
+ const fill = fillAmount(progress);
28
+ const outlineAlpha = (1 - fill) * (disabled ? 0.55 : 1);
29
+ const scale = 0.78 + 0.22 * fill;
30
+ const side = m.box * scale;
31
+ const offset = (m.box - side) / 2;
32
+ const r = (n)=>Math.round(1000 * n) / 1000;
33
+ const parts = [
34
+ `<svg xmlns="http://www.w3.org/2000/svg" width="${m.box}" height="${m.box}" viewBox="0 0 ${m.box} ${m.box}">`
35
+ ];
36
+ if (outlineAlpha > 0.001) parts.push(`<rect x="1" y="1" width="${m.box - 2}" height="${m.box - 2}" rx="${m.corner - 1}" fill="none" stroke="${formatColor(withAlpha(colors.outline, outlineAlpha))}" stroke-width="${m.stroke}"/>`);
37
+ if (fill > 0.001) parts.push(`<rect x="${r(offset)}" y="${r(offset)}" width="${r(side)}" height="${r(side)}" rx="${r(m.corner * scale)}" fill="${formatColor(withAlpha(colors.fill, fill))}"/>`);
38
+ const path = checkMarkPath(progress, morph, m.box);
39
+ if (path) parts.push(`<path d="${path}" fill="none" stroke="${formatColor(colors.mark)}" stroke-width="${m.stroke}" stroke-linecap="round" stroke-linejoin="round"/>`);
40
+ parts.push('</svg>');
41
+ return parts.join('');
42
+ }
43
+ const checkbox_G9CheckBox = forwardRef(function(props, ref) {
44
+ var _props_defaultChecked, _props_defaultIndeterminate, _props_accessibilityLabel, _ref, _props_accessibilityLabel1;
45
+ const control = useG9Control(props, 'g9-checkbox');
46
+ const palette = useG9Theme().palette;
47
+ const strings = useG9Strings();
48
+ const [checked, setChecked] = useControllableState({
49
+ value: props.checked,
50
+ defaultValue: null != (_props_defaultChecked = props.defaultChecked) ? _props_defaultChecked : false,
51
+ onChange: props.onCheckedChange,
52
+ name: 'G9CheckBox.checked'
53
+ });
54
+ const [indeterminate, setIndeterminate] = useControllableState({
55
+ value: props.indeterminate,
56
+ defaultValue: null != (_props_defaultIndeterminate = props.defaultIndeterminate) ? _props_defaultIndeterminate : false,
57
+ onChange: props.onIndeterminateChange,
58
+ name: 'G9CheckBox.indeterminate'
59
+ });
60
+ const colors = checkBoxColors(palette, control.disabled);
61
+ const progressTarget = targetProgress(checked, indeterminate);
62
+ const morphTarget = targetMorph(indeterminate);
63
+ const svgRef = useRef(null);
64
+ const drawn = useRef({
65
+ progress: progressTarget,
66
+ morph: morphTarget
67
+ });
68
+ const frame = useRef(null);
69
+ const latest = useRef({
70
+ colors,
71
+ disabled: control.disabled
72
+ });
73
+ latest.current = {
74
+ colors,
75
+ disabled: control.disabled
76
+ };
77
+ useEffect(()=>{
78
+ const from = {
79
+ ...drawn.current
80
+ };
81
+ if (from.progress === progressTarget && from.morph === morphTarget) return;
82
+ const morphFrom = from.progress < 0.01 ? morphTarget : from.morph;
83
+ const morphTo = 0 === progressTarget ? morphFrom : morphTarget;
84
+ const started = Date.now();
85
+ const step = ()=>{
86
+ const t = Date.now() - started;
87
+ const p = Math.min(1, t / g9CheckBoxMetrics.progressMs);
88
+ const q = Math.min(1, t / g9CheckBoxMetrics.morphMs);
89
+ const easeOut = 1 - (1 - p) ** 3;
90
+ const easeInOut = q < 0.5 ? 4 * q * q * q : 1 - (-2 * q + 2) ** 3 / 2;
91
+ drawn.current = {
92
+ progress: from.progress + (progressTarget - from.progress) * easeOut,
93
+ morph: morphFrom + (morphTo - morphFrom) * easeInOut
94
+ };
95
+ try {
96
+ var _svgRef_current;
97
+ null == (_svgRef_current = svgRef.current) || _svgRef_current.setNativeProps({
98
+ content: checkBoxSvg(drawn.current.progress, drawn.current.morph, latest.current.colors, latest.current.disabled)
99
+ }).exec();
100
+ } catch {}
101
+ frame.current = p < 1 || q < 1 ? startTimer(step, 16) : null;
102
+ };
103
+ if (null !== frame.current) stopTimer(frame.current);
104
+ step();
105
+ return ()=>{
106
+ if (null !== frame.current) stopTimer(frame.current);
107
+ frame.current = null;
108
+ };
109
+ }, [
110
+ progressTarget,
111
+ morphTarget
112
+ ]);
113
+ const toggle = ()=>{
114
+ var _props_onPress;
115
+ if (control.disabled) return;
116
+ const next = nextOnTap(checked, indeterminate);
117
+ setIndeterminate(next.indeterminate);
118
+ setChecked(next.checked);
119
+ null == (_props_onPress = props.onPress) || _props_onPress.call(props, next.checked);
120
+ };
121
+ useImperativeHandle(ref, ()=>({
122
+ toggle
123
+ }));
124
+ const press = useG9Press(toggle, {
125
+ blocked: control.disabled,
126
+ source: 'G9CheckBox',
127
+ guardMs: 0
128
+ });
129
+ const reserve = false !== props.reserveTouchTarget;
130
+ const text1 = props.text && '' !== props.text.trim() ? props.text : null;
131
+ const state = indeterminate ? strings.get(G9StringKey.PartiallyChecked) : checked ? strings.get(G9StringKey.Checked) : strings.get(G9StringKey.NotChecked);
132
+ return <view className={`${control.className}${text1 ? ' g9-checkbox--labelled' : ''}`} {...control.idProps} style={g9RowStyle(control.direction)} accessibility-element={true} accessibility-traits="button" accessibility-value={state} {...(null != (_props_accessibilityLabel = props.accessibilityLabel) ? _props_accessibilityLabel : text1) ? {
133
+ 'accessibility-label': null != (_ref = null != (_props_accessibilityLabel1 = props.accessibilityLabel) ? _props_accessibilityLabel1 : text1) ? _ref : ''
134
+ } : {}} bindtap={press}>
135
+ <view className={`g9-checkbox__slot${reserve ? ' g9-checkbox__slot--reserve' : ''}`} style={{
136
+ width: `${reserve ? g9CheckBoxMetrics.touchTarget : g9CheckBoxMetrics.box}px`
137
+ }}>
138
+ <svg ref={svgRef} className="g9-checkbox__box" content={checkBoxSvg(drawn.current.progress, drawn.current.morph, colors, control.disabled)}/>
139
+ </view>
140
+ {text1 ? <text className="g9-checkbox__text" style={{
141
+ ...g9TextStart(control.direction),
142
+ color: control.disabled ? 'var(--g9-text-disabled)' : 'var(--g9-text-primary)',
143
+ paddingTop: reserve ? '12px' : '0px',
144
+ paddingBottom: reserve ? '12px' : '0px'
145
+ }}>
146
+ {text1}
147
+ </text> : null}
148
+ </view>;
149
+ });
150
+ export { checkBoxColors, checkBoxSvg, checkbox_G9CheckBox as G9CheckBox, g9CheckBoxMetrics };
151
+
152
+ //# sourceMappingURL=checkbox.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toggle/checkbox.jsx","sources":["../../src/toggle/checkbox.tsx"],"sourcesContent":["import './toggle.css';\nimport { formatColor, type G9PaletteValues, G9StringKey, withAlpha } from '@g9tm/lynxcontrols-foundation';\nimport { forwardRef, type ReactNode, useEffect, useImperativeHandle, useRef } from '@lynx-js/react';\nimport type { NodesRef } from '@lynx-js/types';\nimport { type G9ControlBaseProps, g9RowStyle, g9TextStart, useG9Control } from '../base/control';\nimport { useG9Press } from '../base/press';\nimport { type G9TimerHandle, startTimer, stopTimer } from '../base/timers';\nimport { useControllableState } from '../base/use-controllable-state';\nimport { useG9Strings, useG9Theme } from '../provider/hooks';\nimport { checkMarkPath, fillAmount, nextOnTap, targetMorph, targetProgress } from './checkbox-math';\n\n/** Box size, corner and stroke (MAUI `G9Metrics` check-box values, ADR-0028). */\nexport const g9CheckBoxMetrics = Object.freeze({\n box: 20,\n corner: 6,\n stroke: 2,\n touchTarget: 48,\n progressMs: 200,\n morphMs: 150,\n});\n\n/** Colours the box is drawn with. */\nexport interface G9CheckBoxColors {\n readonly outline: string;\n readonly fill: string;\n readonly mark: string;\n}\n\n/** The palette colours of a check box (outline, fill, mark; disabled variants). */\nexport function checkBoxColors(palette: G9PaletteValues, disabled: boolean): G9CheckBoxColors {\n return {\n outline: palette.Outline,\n fill: disabled ? palette.TextDisabled : palette.Primary,\n mark: disabled ? palette.Surface : palette.OnPrimary,\n };\n}\n\n/**\n * The SVG of the box at an animation state (MAUI `G9CheckBoxDrawable`): the outline fades with `1 − fill`\n * (× 0.55 disabled), the fill grows from 78 % to 100 % with its alpha, the mark (tick → dash by `morph`) is trimmed by\n * the golden phase functions. Never mirrored in RTL.\n */\nexport function checkBoxSvg(progress: number, morph: number, colors: G9CheckBoxColors, disabled: boolean): string {\n const m = g9CheckBoxMetrics;\n const fill = fillAmount(progress);\n const outlineAlpha = (1 - fill) * (disabled ? 0.55 : 1);\n const scale = 0.78 + 0.22 * fill;\n const side = m.box * scale;\n const offset = (m.box - side) / 2;\n const r = (n: number) => Math.round(n * 1000) / 1000;\n const parts = [\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${m.box}\" height=\"${m.box}\" viewBox=\"0 0 ${m.box} ${m.box}\">`,\n ];\n if (outlineAlpha > 0.001) {\n parts.push(\n `<rect x=\"1\" y=\"1\" width=\"${m.box - 2}\" height=\"${m.box - 2}\" rx=\"${m.corner - 1}\" fill=\"none\" stroke=\"${formatColor(withAlpha(colors.outline, outlineAlpha))}\" stroke-width=\"${m.stroke}\"/>`,\n );\n }\n if (fill > 0.001) {\n parts.push(\n `<rect x=\"${r(offset)}\" y=\"${r(offset)}\" width=\"${r(side)}\" height=\"${r(side)}\" rx=\"${r(m.corner * scale)}\" fill=\"${formatColor(withAlpha(colors.fill, fill))}\"/>`,\n );\n }\n const path = checkMarkPath(progress, morph, m.box);\n if (path) {\n parts.push(\n `<path d=\"${path}\" fill=\"none\" stroke=\"${formatColor(colors.mark)}\" stroke-width=\"${m.stroke}\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>`,\n );\n }\n parts.push('</svg>');\n return parts.join('');\n}\n\n/** Props of {@link G9CheckBox} (MAUI `G9CheckBox`). */\nexport interface G9CheckBoxProps extends G9ControlBaseProps {\n /** Controlled checked state (MAUI `IsChecked`). */\n readonly checked?: boolean;\n readonly defaultChecked?: boolean;\n /** Once per change of `checked` caused by the control (MAUI `CheckedChanged`); never for pushed values. */\n readonly onCheckedChange?: (checked: boolean) => void;\n /** Controlled third state (MAUI `IsIndeterminate`); a tap clears it. */\n readonly indeterminate?: boolean;\n readonly defaultIndeterminate?: boolean;\n readonly onIndeterminateChange?: (indeterminate: boolean) => void;\n /** Label at the end side; also the accessibility name. */\n readonly text?: string | null;\n /** After every user toggle, with the new state (MAUI `Command`). */\n readonly onPress?: (checked: boolean) => void;\n /** 48 px touch slot with the box at the top; false: a 20 px slot, box centred. Default true. */\n readonly reserveTouchTarget?: boolean;\n}\n\n/** Imperative handle of {@link G9CheckBox}. */\nexport interface G9CheckBoxHandle {\n /** Same as a tap (MAUI `Toggle`); ignored while disabled. */\n toggle(): void;\n}\n\n/**\n * Tri-state check box (MAUI `G9CheckBox`, ADR-0028): tap toggles, indeterminate → checked, never into\n * indeterminate. The box animates (200 ms fill/tick, 150 ms tick↔dash) by updating the SVG attribute directly\n * (`setNativeProps`), never by re-rendering per frame; the first render does not animate.\n */\nexport const G9CheckBox = forwardRef<G9CheckBoxHandle, G9CheckBoxProps>(function G9CheckBox(props, ref): ReactNode {\n const control = useG9Control(props, 'g9-checkbox');\n const palette = useG9Theme().palette;\n const strings = useG9Strings();\n const [checked, setChecked] = useControllableState<boolean>({\n value: props.checked,\n defaultValue: props.defaultChecked ?? false,\n onChange: props.onCheckedChange,\n name: 'G9CheckBox.checked',\n });\n const [indeterminate, setIndeterminate] = useControllableState<boolean>({\n value: props.indeterminate,\n defaultValue: props.defaultIndeterminate ?? false,\n onChange: props.onIndeterminateChange,\n name: 'G9CheckBox.indeterminate',\n });\n const colors = checkBoxColors(palette, control.disabled);\n const progressTarget = targetProgress(checked, indeterminate);\n const morphTarget = targetMorph(indeterminate);\n\n // Animation state lives outside React: the drawn progress/morph and the frame timer.\n const svgRef = useRef<NodesRef | null>(null);\n const drawn = useRef({ progress: progressTarget, morph: morphTarget });\n const frame = useRef<G9TimerHandle | null>(null);\n const latest = useRef({ colors, disabled: control.disabled });\n latest.current = { colors, disabled: control.disabled };\n useEffect(() => {\n const from = { ...drawn.current };\n if (from.progress === progressTarget && from.morph === morphTarget) return;\n // Unchecked → indeterminate draws the dash directly; a fade-out keeps the current mark shape.\n const morphFrom = from.progress < 0.01 ? morphTarget : from.morph;\n const morphTo = progressTarget === 0 ? morphFrom : morphTarget;\n const started = Date.now();\n const step = () => {\n const t = Date.now() - started;\n const p = Math.min(1, t / g9CheckBoxMetrics.progressMs);\n const q = Math.min(1, t / g9CheckBoxMetrics.morphMs);\n const easeOut = 1 - (1 - p) ** 3;\n const easeInOut = q < 0.5 ? 4 * q * q * q : 1 - (-2 * q + 2) ** 3 / 2;\n drawn.current = {\n progress: from.progress + (progressTarget - from.progress) * easeOut,\n morph: morphFrom + (morphTo - morphFrom) * easeInOut,\n };\n try {\n svgRef.current\n ?.setNativeProps({\n content: checkBoxSvg(\n drawn.current.progress,\n drawn.current.morph,\n latest.current.colors,\n latest.current.disabled,\n ),\n })\n .exec();\n } catch {\n // Unmounted between frames.\n }\n frame.current = p < 1 || q < 1 ? startTimer(step, 16) : null;\n };\n if (frame.current !== null) stopTimer(frame.current);\n step();\n return () => {\n if (frame.current !== null) stopTimer(frame.current);\n frame.current = null;\n };\n }, [progressTarget, morphTarget]);\n\n const toggle = () => {\n if (control.disabled) return;\n const next = nextOnTap(checked, indeterminate);\n setIndeterminate(next.indeterminate);\n setChecked(next.checked);\n props.onPress?.(next.checked);\n };\n useImperativeHandle(ref, () => ({ toggle }));\n const press = useG9Press(toggle, { blocked: control.disabled, source: 'G9CheckBox', guardMs: 0 });\n\n const reserve = props.reserveTouchTarget !== false;\n const text = props.text && props.text.trim() !== '' ? props.text : null;\n const state = indeterminate\n ? strings.get(G9StringKey.PartiallyChecked)\n : checked\n ? strings.get(G9StringKey.Checked)\n : strings.get(G9StringKey.NotChecked);\n return (\n <view\n className={`${control.className}${text ? ' g9-checkbox--labelled' : ''}`}\n {...control.idProps}\n style={g9RowStyle(control.direction)}\n accessibility-element={true}\n accessibility-traits=\"button\"\n accessibility-value={state}\n {...((props.accessibilityLabel ?? text) ? { 'accessibility-label': props.accessibilityLabel ?? text ?? '' } : {})}\n bindtap={press}\n >\n <view\n className={`g9-checkbox__slot${reserve ? ' g9-checkbox__slot--reserve' : ''}`}\n style={{ width: `${reserve ? g9CheckBoxMetrics.touchTarget : g9CheckBoxMetrics.box}px` }}\n >\n <svg\n ref={svgRef}\n className=\"g9-checkbox__box\"\n content={checkBoxSvg(drawn.current.progress, drawn.current.morph, colors, control.disabled)}\n />\n </view>\n {text ? (\n <text\n className=\"g9-checkbox__text\"\n style={{\n ...g9TextStart(control.direction),\n color: control.disabled ? 'var(--g9-text-disabled)' : 'var(--g9-text-primary)',\n paddingTop: reserve ? '12px' : '0px',\n paddingBottom: reserve ? '12px' : '0px',\n }}\n >\n {text}\n </text>\n ) : null}\n </view>\n );\n});\n"],"names":["g9CheckBoxMetrics","Object","checkBoxColors","palette","disabled","checkBoxSvg","progress","morph","colors","m","fill","fillAmount","outlineAlpha","scale","side","offset","r","n","Math","parts","formatColor","withAlpha","path","checkMarkPath","G9CheckBox","forwardRef","props","ref","_props_defaultChecked","_props_defaultIndeterminate","_props_accessibilityLabel","_ref","control","useG9Control","useG9Theme","strings","useG9Strings","checked","setChecked","useControllableState","indeterminate","setIndeterminate","progressTarget","targetProgress","morphTarget","targetMorph","svgRef","useRef","drawn","frame","latest","useEffect","from","morphFrom","morphTo","started","Date","step","t","p","q","easeOut","easeInOut","_svgRef_current","startTimer","stopTimer","toggle","next","nextOnTap","useImperativeHandle","press","useG9Press","reserve","text1","state","G9StringKey","view","g9RowStyle","svg","text","g9TextStart"],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import './toggle.css';
2
+ import { type G9ChipGroupLayoutMode, type G9ChipGroupSelectionMode } from '@g9tm/lynxcontrols-foundation';
3
+ import type { ReactNode } from '@lynx-js/react';
4
+ import { type G9ControlBaseProps } from '../base/control.js';
5
+ import { type G9SelectionItem } from '../base/selection-item.js';
6
+ /** Props of {@link G9ChipGroup} (MAUI `G9ChipGroup`). */
7
+ export interface G9ChipGroupProps extends G9ControlBaseProps {
8
+ /** One chip per item (MAUI `ItemsSource`). Selection is by `selectionKey(item)`, so replaced objects keep it. */
9
+ readonly items: ReadonlyArray<G9SelectionItem>;
10
+ /** Default `'multiSelection'`. */
11
+ readonly selectionMode?: G9ChipGroupSelectionMode;
12
+ /** Multi mode: controlled selected keys (MAUI `SelectedItems`). */
13
+ readonly selectedKeys?: ReadonlyArray<string>;
14
+ readonly defaultSelectedKeys?: ReadonlyArray<string>;
15
+ readonly onSelectedKeysChange?: (keys: ReadonlyArray<string>) => void;
16
+ /** Single mode: controlled selected key (MAUI `SelectedItem`); `null` = none. */
17
+ readonly selectedKey?: string | null;
18
+ readonly defaultSelectedKey?: string | null;
19
+ readonly onSelectedKeyChange?: (key: string | null, item: G9SelectionItem | null) => void;
20
+ /** Single mode: tapping the selected chip clears the selection. Default false. */
21
+ readonly allowNullSelection?: boolean;
22
+ /** Gap between chips. Default 6. */
23
+ readonly itemSpacing?: number;
24
+ /** Default 36. */
25
+ readonly chipHeight?: number;
26
+ /** Leading icon size. Default 16. */
27
+ readonly iconSize?: number;
28
+ /** Group-wide selected fill (an item's `selectedColor` wins). Default primary. */
29
+ readonly selectedBackground?: string | null;
30
+ /** Group-wide selected text colour. Default on-primary. */
31
+ readonly selectedTextColor?: string | null;
32
+ /** `'wrap'` (default) or one horizontally scrolling line. */
33
+ readonly layoutMode?: G9ChipGroupLayoutMode;
34
+ /** Default 9 (`G9LayoutMetrics.ControlCornerRadius`). */
35
+ readonly chipCornerRadius?: number;
36
+ /** Check mark at the trailing edge of selected chips. Default true. */
37
+ readonly showSelectionCheckmark?: boolean;
38
+ /**
39
+ * After every user tap (MAUI `SelectionChanged`): single mode `[item]` or `[]` (also when the tap changed nothing),
40
+ * multi mode the selected items.
41
+ */
42
+ readonly onSelectionChange?: (items: ReadonlyArray<G9SelectionItem>) => void;
43
+ }
44
+ /**
45
+ * Chip group (MAUI `G9ChipGroup`): single or multi selection by item identity, wrap or single-line scroll, colour
46
+ * transition (140 ms) and check mark (120 ms) in CSS, press pulse 0.94 on the main thread. Disabled items are dimmed
47
+ * and ignore taps.
48
+ */
49
+ export declare function G9ChipGroup(props: G9ChipGroupProps): ReactNode;
50
+ //# sourceMappingURL=chip-group.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chip-group.d.ts","sourceRoot":"","sources":["../../src/toggle/chip-group.tsx"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAC;AACtB,OAAO,EAIL,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAI9B,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,KAAK,kBAAkB,EAAkD,MAAM,iBAAiB,CAAC;AAE1G,OAAO,EAAE,KAAK,eAAe,EAAgB,MAAM,wBAAwB,CAAC;AAK5E,yDAAyD;AACzD,MAAM,WAAW,gBAAiB,SAAQ,kBAAkB;IAC1D,iHAAiH;IACjH,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IAC/C,kCAAkC;IAClC,QAAQ,CAAC,aAAa,CAAC,EAAE,wBAAwB,CAAC;IAClD,mEAAmE;IACnE,QAAQ,CAAC,YAAY,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC9C,QAAQ,CAAC,mBAAmB,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACrD,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;IACtE,iFAAiF;IACjF,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,EAAE,eAAe,GAAG,IAAI,KAAK,IAAI,CAAC;IAC1F,kFAAkF;IAClF,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IACtC,oCAAoC;IACpC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,kBAAkB;IAClB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,qCAAqC;IACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,kFAAkF;IAClF,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,2DAA2D;IAC3D,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,6DAA6D;IAC7D,QAAQ,CAAC,UAAU,CAAC,EAAE,qBAAqB,CAAC;IAC5C,yDAAyD;IACzD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,uEAAuE;IACvE,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IAC1C;;;OAGG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,eAAe,CAAC,KAAK,IAAI,CAAC;CAC9E;AAID;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,SAAS,CAyF9D"}
@@ -0,0 +1,107 @@
1
+ import "./toggle.css";
2
+ import { G9Metrics, G9StringKey, buildSolidOrGradient, fillToCss, formatColor, tryParseColor } from "@g9tm/lynxcontrols-foundation";
3
+ import { g9ChildId, g9IdProps, g9RowStyle, useG9Control } from "../base/control.jsx";
4
+ import { useG9Press } from "../base/press.jsx";
5
+ import { selectionKey } from "../base/selection-item.jsx";
6
+ import { useControllableState } from "../base/use-controllable-state.jsx";
7
+ import { G9IconSlot } from "../icon/slot.jsx";
8
+ import { useG9Settings, useG9Strings, useG9Theme } from "../provider/hooks.jsx";
9
+ const EMPTY = [];
10
+ function G9ChipGroup(props) {
11
+ var _props_defaultSelectedKeys, _props_defaultSelectedKey, _props_chipHeight, _props_itemSpacing, _props_iconSize, _props_chipCornerRadius;
12
+ const control = useG9Control(props, 'g9-chip-group');
13
+ const palette = useG9Theme().palette;
14
+ const glyphs = useG9Settings().glyphs;
15
+ const strings = useG9Strings();
16
+ const single = 'singleSelection' === props.selectionMode;
17
+ const [keys, setKeys] = useControllableState({
18
+ value: props.selectedKeys,
19
+ defaultValue: null != (_props_defaultSelectedKeys = props.defaultSelectedKeys) ? _props_defaultSelectedKeys : EMPTY,
20
+ onChange: props.onSelectedKeysChange,
21
+ name: 'G9ChipGroup.selectedKeys'
22
+ });
23
+ const [key, setKey] = useControllableState({
24
+ value: props.selectedKey,
25
+ defaultValue: null != (_props_defaultSelectedKey = props.defaultSelectedKey) ? _props_defaultSelectedKey : null,
26
+ onChange: props.onSelectedKeyChange,
27
+ name: 'G9ChipGroup.selectedKey'
28
+ });
29
+ const isSelected = (item)=>single ? key === selectionKey(item) : keys.includes(selectionKey(item));
30
+ const tap = (item)=>{
31
+ var _props_onSelectionChange;
32
+ if (control.disabled || false === item.isEnabled) return;
33
+ const k = selectionKey(item);
34
+ if (single) {
35
+ var _props_onSelectionChange1;
36
+ const next = key === k ? props.allowNullSelection ? null : k : k;
37
+ setKey(next, null === next ? null : item);
38
+ null == (_props_onSelectionChange1 = props.onSelectionChange) || _props_onSelectionChange1.call(props, null === next ? [] : [
39
+ item
40
+ ]);
41
+ return;
42
+ }
43
+ const next = keys.includes(k) ? keys.filter((x)=>x !== k) : [
44
+ ...keys,
45
+ k
46
+ ];
47
+ setKeys(next);
48
+ null == (_props_onSelectionChange = props.onSelectionChange) || _props_onSelectionChange.call(props, props.items.filter((i)=>next.includes(selectionKey(i))));
49
+ };
50
+ const height = null != (_props_chipHeight = props.chipHeight) ? _props_chipHeight : G9Metrics.ChipHeight;
51
+ const spacing = null != (_props_itemSpacing = props.itemSpacing) ? _props_itemSpacing : G9Metrics.ChipSpacing;
52
+ const iconSize = null != (_props_iconSize = props.iconSize) ? _props_iconSize : G9Metrics.ChipIconSize;
53
+ const radius = null != (_props_chipCornerRadius = props.chipCornerRadius) ? _props_chipCornerRadius : 9;
54
+ const checkmark = false !== props.showSelectionCheckmark;
55
+ const chips = props.items.map((item)=>{
56
+ var _ref, _item_selectedColor, _ref1, _item_selectedTextColor;
57
+ const selected = isSelected(item);
58
+ const bg = null != (_ref = null != (_item_selectedColor = item.selectedColor) ? _item_selectedColor : props.selectedBackground) ? _ref : palette.Primary;
59
+ const fg = null != (_ref1 = null != (_item_selectedTextColor = item.selectedTextColor) ? _item_selectedTextColor : props.selectedTextColor) ? _ref1 : palette.OnPrimary;
60
+ const parsed = tryParseColor(bg);
61
+ const background = selected ? parsed ? fillToCss(buildSolidOrGradient(parsed, true)) : bg : palette.Surface;
62
+ const color = selected ? fg : palette.TextSecondary;
63
+ return <Chip key={selectionKey(item)} direction={control.direction} item={item} selected={selected} background={background} stroke={selected ? parsed ? formatColor(parsed) : bg : palette.OutlineVariant} color={color} height={height} spacing={spacing} iconSize={iconSize} radius={radius} checkmark={checkmark} checkIcon={glyphs.check} groupDisabled={control.disabled} selectedLabel={strings.get(G9StringKey.Selected)} onTap={tap} id={g9ChildId(props.id, selectionKey(item))}/>;
64
+ });
65
+ const scroll = 'singleLineScroll' === props.layoutMode;
66
+ return scroll ? <scroll-view className={`${control.className} g9-chip-group--scroll`} {...control.idProps} scroll-orientation="horizontal">
67
+ <view className="g9-chip-group__line" style={g9RowStyle(control.direction)}>
68
+ {chips}
69
+ </view>
70
+ </scroll-view> : <view className={`${control.className} g9-chip-group--wrap`} {...control.idProps} style={g9RowStyle(control.direction)}>
71
+ {chips}
72
+ </view>;
73
+ }
74
+ function Chip(props) {
75
+ const { item } = props;
76
+ const disabled = props.groupDisabled || false === item.isEnabled;
77
+ const press = useG9Press(()=>props.onTap(item), {
78
+ blocked: disabled,
79
+ source: 'G9ChipGroup',
80
+ guardMs: 0
81
+ });
82
+ return <view className={`g9-chip${props.selected ? ' g9-chip--selected' : ''}${false === item.isEnabled ? ' g9-chip--disabled' : ''}`} {...g9IdProps(props.id)} style={{
83
+ ...g9RowStyle(props.direction),
84
+ height: `${props.height}px`,
85
+ minHeight: `${props.height}px`,
86
+ ['rtl' === props.direction ? 'marginLeft' : 'marginRight']: `${props.spacing}px`,
87
+ marginBottom: `${props.spacing}px`,
88
+ borderRadius: `${props.radius}px`,
89
+ background: props.background,
90
+ borderColor: props.stroke
91
+ }} accessibility-element={true} accessibility-traits="button" accessibility-label={item.text} {...props.selected ? {
92
+ 'accessibility-value': props.selectedLabel
93
+ } : {}} bindtap={press}>
94
+ <G9IconSlot emoji={item.emoji} icon={item.icon} imagePath={item.iconPath} image={item.iconImage} size={props.iconSize} color={props.color}/>
95
+ <text className="g9-chip__text" style={{
96
+ color: props.color
97
+ }}>
98
+ {item.text}
99
+ </text>
100
+ {props.checkmark ? <view className={`g9-chip__check${props.selected ? ' g9-chip__check--on' : ''}`}>
101
+ <G9IconSlot icon={props.checkIcon} size={G9Metrics.ChipIconSize} color={props.color}/>
102
+ </view> : null}
103
+ </view>;
104
+ }
105
+ export { G9ChipGroup };
106
+
107
+ //# sourceMappingURL=chip-group.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toggle/chip-group.jsx","sources":["../../src/toggle/chip-group.tsx"],"sourcesContent":["import './toggle.css';\nimport {\n buildSolidOrGradient,\n fillToCss,\n formatColor,\n type G9ChipGroupLayoutMode,\n type G9ChipGroupSelectionMode,\n G9Metrics,\n G9StringKey,\n tryParseColor,\n} from '@g9tm/lynxcontrols-foundation';\nimport type { ReactNode } from '@lynx-js/react';\nimport { type G9ControlBaseProps, g9ChildId, g9IdProps, g9RowStyle, useG9Control } from '../base/control';\nimport { useG9Press } from '../base/press';\nimport { type G9SelectionItem, selectionKey } from '../base/selection-item';\nimport { useControllableState } from '../base/use-controllable-state';\nimport { G9IconSlot } from '../icon/slot';\nimport { useG9Settings, useG9Strings, useG9Theme } from '../provider/hooks';\n\n/** Props of {@link G9ChipGroup} (MAUI `G9ChipGroup`). */\nexport interface G9ChipGroupProps extends G9ControlBaseProps {\n /** One chip per item (MAUI `ItemsSource`). Selection is by `selectionKey(item)`, so replaced objects keep it. */\n readonly items: ReadonlyArray<G9SelectionItem>;\n /** Default `'multiSelection'`. */\n readonly selectionMode?: G9ChipGroupSelectionMode;\n /** Multi mode: controlled selected keys (MAUI `SelectedItems`). */\n readonly selectedKeys?: ReadonlyArray<string>;\n readonly defaultSelectedKeys?: ReadonlyArray<string>;\n readonly onSelectedKeysChange?: (keys: ReadonlyArray<string>) => void;\n /** Single mode: controlled selected key (MAUI `SelectedItem`); `null` = none. */\n readonly selectedKey?: string | null;\n readonly defaultSelectedKey?: string | null;\n readonly onSelectedKeyChange?: (key: string | null, item: G9SelectionItem | null) => void;\n /** Single mode: tapping the selected chip clears the selection. Default false. */\n readonly allowNullSelection?: boolean;\n /** Gap between chips. Default 6. */\n readonly itemSpacing?: number;\n /** Default 36. */\n readonly chipHeight?: number;\n /** Leading icon size. Default 16. */\n readonly iconSize?: number;\n /** Group-wide selected fill (an item's `selectedColor` wins). Default primary. */\n readonly selectedBackground?: string | null;\n /** Group-wide selected text colour. Default on-primary. */\n readonly selectedTextColor?: string | null;\n /** `'wrap'` (default) or one horizontally scrolling line. */\n readonly layoutMode?: G9ChipGroupLayoutMode;\n /** Default 9 (`G9LayoutMetrics.ControlCornerRadius`). */\n readonly chipCornerRadius?: number;\n /** Check mark at the trailing edge of selected chips. Default true. */\n readonly showSelectionCheckmark?: boolean;\n /**\n * After every user tap (MAUI `SelectionChanged`): single mode `[item]` or `[]` (also when the tap changed nothing),\n * multi mode the selected items.\n */\n readonly onSelectionChange?: (items: ReadonlyArray<G9SelectionItem>) => void;\n}\n\nconst EMPTY: ReadonlyArray<string> = [];\n\n/**\n * Chip group (MAUI `G9ChipGroup`): single or multi selection by item identity, wrap or single-line scroll, colour\n * transition (140 ms) and check mark (120 ms) in CSS, press pulse 0.94 on the main thread. Disabled items are dimmed\n * and ignore taps.\n */\nexport function G9ChipGroup(props: G9ChipGroupProps): ReactNode {\n const control = useG9Control(props, 'g9-chip-group');\n const palette = useG9Theme().palette;\n const glyphs = useG9Settings().glyphs;\n const strings = useG9Strings();\n const single = props.selectionMode === 'singleSelection';\n const [keys, setKeys] = useControllableState<ReadonlyArray<string>>({\n value: props.selectedKeys,\n defaultValue: props.defaultSelectedKeys ?? EMPTY,\n onChange: props.onSelectedKeysChange,\n name: 'G9ChipGroup.selectedKeys',\n });\n const [key, setKey] = useControllableState<string | null, [G9SelectionItem | null]>({\n value: props.selectedKey,\n defaultValue: props.defaultSelectedKey ?? null,\n onChange: props.onSelectedKeyChange,\n name: 'G9ChipGroup.selectedKey',\n });\n const isSelected = (item: G9SelectionItem) =>\n single ? key === selectionKey(item) : keys.includes(selectionKey(item));\n\n const tap = (item: G9SelectionItem) => {\n if (control.disabled || item.isEnabled === false) return;\n const k = selectionKey(item);\n if (single) {\n const next = key === k ? (props.allowNullSelection ? null : k) : k;\n setKey(next, next === null ? null : item);\n props.onSelectionChange?.(next === null ? [] : [item]);\n return;\n }\n const next = keys.includes(k) ? keys.filter((x) => x !== k) : [...keys, k];\n setKeys(next);\n props.onSelectionChange?.(props.items.filter((i) => next.includes(selectionKey(i))));\n };\n\n const height = props.chipHeight ?? G9Metrics.ChipHeight;\n const spacing = props.itemSpacing ?? G9Metrics.ChipSpacing;\n const iconSize = props.iconSize ?? G9Metrics.ChipIconSize;\n const radius = props.chipCornerRadius ?? 9;\n const checkmark = props.showSelectionCheckmark !== false;\n const chips = props.items.map((item) => {\n const selected = isSelected(item);\n const bg = item.selectedColor ?? props.selectedBackground ?? palette.Primary;\n const fg = item.selectedTextColor ?? props.selectedTextColor ?? palette.OnPrimary;\n const parsed = tryParseColor(bg);\n const background = selected ? (parsed ? fillToCss(buildSolidOrGradient(parsed, true)) : bg) : palette.Surface;\n const color = selected ? fg : palette.TextSecondary;\n return (\n <Chip\n key={selectionKey(item)}\n direction={control.direction}\n item={item}\n selected={selected}\n background={background}\n stroke={selected ? (parsed ? formatColor(parsed) : bg) : palette.OutlineVariant}\n color={color}\n height={height}\n spacing={spacing}\n iconSize={iconSize}\n radius={radius}\n checkmark={checkmark}\n checkIcon={glyphs.check}\n groupDisabled={control.disabled}\n selectedLabel={strings.get(G9StringKey.Selected)}\n onTap={tap}\n id={g9ChildId(props.id, selectionKey(item))}\n />\n );\n });\n const scroll = props.layoutMode === 'singleLineScroll';\n return scroll ? (\n <scroll-view\n className={`${control.className} g9-chip-group--scroll`}\n {...control.idProps}\n scroll-orientation=\"horizontal\"\n >\n <view className=\"g9-chip-group__line\" style={g9RowStyle(control.direction)}>\n {chips}\n </view>\n </scroll-view>\n ) : (\n <view\n className={`${control.className} g9-chip-group--wrap`}\n {...control.idProps}\n style={g9RowStyle(control.direction)}\n >\n {chips}\n </view>\n );\n}\n\ninterface ChipProps {\n readonly item: G9SelectionItem;\n readonly selected: boolean;\n readonly background: string;\n readonly stroke: string;\n readonly color: string;\n readonly height: number;\n readonly spacing: number;\n readonly iconSize: number;\n readonly radius: number;\n readonly checkmark: boolean;\n readonly checkIcon: Parameters<typeof G9IconSlot>[0]['icon'];\n readonly groupDisabled: boolean;\n readonly selectedLabel: string;\n readonly onTap: (item: G9SelectionItem) => void;\n readonly direction: 'ltr' | 'rtl';\n /** The chip's automation id (`${groupId}_${key}`). */\n readonly id: string | undefined;\n}\n\nfunction Chip(props: ChipProps): ReactNode {\n const { item } = props;\n const disabled = props.groupDisabled || item.isEnabled === false;\n const press = useG9Press(() => props.onTap(item), { blocked: disabled, source: 'G9ChipGroup', guardMs: 0 });\n return (\n <view\n className={`g9-chip${props.selected ? ' g9-chip--selected' : ''}${item.isEnabled === false ? ' g9-chip--disabled' : ''}`}\n {...g9IdProps(props.id)}\n style={{\n ...g9RowStyle(props.direction),\n height: `${props.height}px`,\n minHeight: `${props.height}px`,\n [props.direction === 'rtl' ? 'marginLeft' : 'marginRight']: `${props.spacing}px`,\n marginBottom: `${props.spacing}px`,\n borderRadius: `${props.radius}px`,\n background: props.background,\n borderColor: props.stroke,\n }}\n accessibility-element={true}\n accessibility-traits=\"button\"\n accessibility-label={item.text}\n {...(props.selected ? { 'accessibility-value': props.selectedLabel } : {})}\n bindtap={press}\n >\n <G9IconSlot\n emoji={item.emoji}\n icon={item.icon}\n imagePath={item.iconPath}\n image={item.iconImage}\n size={props.iconSize}\n color={props.color}\n />\n <text className=\"g9-chip__text\" style={{ color: props.color }}>\n {item.text}\n </text>\n {props.checkmark ? (\n <view className={`g9-chip__check${props.selected ? ' g9-chip__check--on' : ''}`}>\n <G9IconSlot icon={props.checkIcon} size={G9Metrics.ChipIconSize} color={props.color} />\n </view>\n ) : null}\n </view>\n );\n}\n"],"names":["EMPTY","G9ChipGroup","props","_props_defaultSelectedKeys","_props_defaultSelectedKey","_props_chipHeight","_props_itemSpacing","_props_iconSize","_props_chipCornerRadius","control","useG9Control","palette","useG9Theme","glyphs","useG9Settings","strings","useG9Strings","single","keys","setKeys","useControllableState","key","setKey","isSelected","item","selectionKey","tap","k","next","x","i","height","G9Metrics","spacing","iconSize","radius","checkmark","chips","_ref","_ref1","selected","bg","fg","parsed","tryParseColor","background","fillToCss","buildSolidOrGradient","color","Chip","formatColor","G9StringKey","g9ChildId","scroll","scroll-view","view","g9RowStyle","disabled","press","useG9Press","g9IdProps","G9IconSlot","text"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { checkBoxColors, checkBoxSvg, G9CheckBox, type G9CheckBoxColors, type G9CheckBoxHandle, type G9CheckBoxProps, g9CheckBoxMetrics, } from './checkbox.js';
2
+ export { checkMarkPath, clamp01, fillAmount, firstArmLength, type G9CheckMarkGeometry, type G9CheckMarkTrim, g9CheckFillPhaseEnd, g9CheckGeometry, g9CheckMarkPhaseStart, g9DashGeometry, markAmount, nextOnTap, resolveCheckMarkGeometry, secondArmLength, targetMorph, targetProgress, trimCheckMark, } from './checkbox-math.js';
3
+ export { G9ChipGroup, type G9ChipGroupProps } from './chip-group.js';
4
+ export { G9Switch, G9SwitchGroup, type G9SwitchGroupProps, type G9SwitchHandle, type G9SwitchProps, } from './switch.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/toggle/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,EACd,WAAW,EACX,UAAU,EACV,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,aAAa,EACb,OAAO,EACP,UAAU,EACV,cAAc,EACd,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,mBAAmB,EACnB,eAAe,EACf,qBAAqB,EACrB,cAAc,EACd,UAAU,EACV,SAAS,EACT,wBAAwB,EACxB,eAAe,EACf,WAAW,EACX,cAAc,EACd,aAAa,GACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EACL,QAAQ,EACR,aAAa,EACb,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,aAAa,GACnB,MAAM,UAAU,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { G9CheckBox, checkBoxColors, checkBoxSvg, g9CheckBoxMetrics } from "./checkbox.jsx";
2
+ export { checkMarkPath, clamp01, fillAmount, firstArmLength, g9CheckFillPhaseEnd, g9CheckGeometry, g9CheckMarkPhaseStart, g9DashGeometry, markAmount, nextOnTap, resolveCheckMarkGeometry, secondArmLength, targetMorph, targetProgress, trimCheckMark } from "./checkbox-math.jsx";
3
+ export { G9ChipGroup } from "./chip-group.jsx";
4
+ export { G9Switch, G9SwitchGroup } from "./switch.jsx";