@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,52 @@
1
+ import './toggle.css';
2
+ import { type ReactNode } from '@lynx-js/react';
3
+ import { type G9ControlBaseProps } from '../base/control.js';
4
+ /** Props of {@link G9SwitchGroup} (MAUI `G9SwitchGroup`). */
5
+ export interface G9SwitchGroupProps extends G9ControlBaseProps {
6
+ /** A tap cannot turn off the last active switch of the group (it shakes). Default false. */
7
+ readonly minOneActive?: boolean;
8
+ /** Shows `active / total` under the switches (warning colour at ≤ 1 with `minOneActive`). Default false. */
9
+ readonly showLiveStatus?: boolean;
10
+ /** Told when the number of active switches changes (MAUI `ActiveSwitchCount`). */
11
+ readonly onActiveCountChange?: (active: number, total: number) => void;
12
+ readonly children?: ReactNode;
13
+ }
14
+ /**
15
+ * A vertical group of switches (MAUI `G9SwitchGroup`): counts its switches (nearest group only, as MAUI's direct
16
+ * children), optionally keeps one on and shows a live `active / total` status. It does not make switches exclusive:
17
+ * use `selectionGroup` for radio behaviour.
18
+ */
19
+ export declare function G9SwitchGroup(props: G9SwitchGroupProps): ReactNode;
20
+ /** Props of {@link G9Switch} (MAUI `G9Switch`). */
21
+ export interface G9SwitchProps extends G9ControlBaseProps {
22
+ /** Controlled state (MAUI `IsOn`). */
23
+ readonly checked?: boolean;
24
+ readonly defaultChecked?: boolean;
25
+ /**
26
+ * Once per change made by the switch: a tap, `toggle()`, or being turned off by its selection group (MAUI
27
+ * `Toggled`). Never for a value the parent pushed in.
28
+ */
29
+ readonly onCheckedChange?: (checked: boolean) => void;
30
+ /** A tap cannot turn it off (it shakes); code still can. Default false. */
31
+ readonly isRequired?: boolean;
32
+ /** Radio group name: turning this on turns off the others with the same name under the same provider. */
33
+ readonly selectionGroup?: string | null;
34
+ /** Form row: title/description fill the start, switch at the end, padded. Default false. */
35
+ readonly isInFormRow?: boolean;
36
+ /** Bold 14 title (form row only); the accessibility name. */
37
+ readonly title?: string | null;
38
+ /** 12 px description under the title (form row only). */
39
+ readonly description?: string | null;
40
+ }
41
+ /** Imperative handle of {@link G9Switch}. */
42
+ export interface G9SwitchHandle {
43
+ /** Same as a tap. */
44
+ toggle(): void;
45
+ }
46
+ /**
47
+ * Switch (MAUI `G9Switch`): 56 × 32 track, 24 px thumb that stretches while travelling, 240 ms spring-like CSS
48
+ * transition, tick/dot track mark; RTL moves the "on" side to the left. A blocked tap (required, or the last active
49
+ * switch of a `minOneActive` group) shakes instead of toggling. Disabled: opacity 0.45.
50
+ */
51
+ export declare const G9Switch: import("react").ForwardRefExoticComponent<G9SwitchProps & import("react").RefAttributes<G9SwitchHandle>>;
52
+ //# sourceMappingURL=switch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"switch.d.ts","sourceRoot":"","sources":["../../src/toggle/switch.tsx"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAC;AAUtB,OAAO,EAGL,KAAK,SAAS,EAMf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,kBAAkB,EAAyC,MAAM,iBAAiB,CAAC;AAuCjG,6DAA6D;AAC7D,MAAM,WAAW,kBAAmB,SAAQ,kBAAkB;IAC5D,4FAA4F;IAC5F,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,4GAA4G;IAC5G,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,kFAAkF;IAClF,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvE,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;CAC/B;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,SAAS,CAuDlE;AAID,mDAAmD;AACnD,MAAM,WAAW,aAAc,SAAQ,kBAAkB;IACvD,sCAAsC;IACtC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC;;;OAGG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACtD,2EAA2E;IAC3E,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,yGAAyG;IACzG,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,4FAA4F;IAC5F,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,6DAA6D;IAC7D,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,yDAAyD;IACzD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;AAED,6CAA6C;AAC7C,MAAM,WAAW,cAAc;IAC7B,qBAAqB;IACrB,MAAM,IAAI,IAAI,CAAC;CAChB;AAID;;;;GAIG;AACH,eAAO,MAAM,QAAQ,0GAuHnB,CAAC"}
@@ -0,0 +1,192 @@
1
+ import "./toggle.css";
2
+ import { G9Metrics, G9StringKey, formatColor, switchOffTrack, switchOnTrack, switchThumbOff, switchThumbOn } from "@g9tm/lynxcontrols-foundation";
3
+ import { createContext, forwardRef, useContext, useEffect, useImperativeHandle, useRef, useState } from "@lynx-js/react";
4
+ import { g9RowStyle, g9TextStart, useG9Control } from "../base/control.jsx";
5
+ import { useG9Press } from "../base/press.jsx";
6
+ import { useControllableState } from "../base/use-controllable-state.jsx";
7
+ import { G9CoreContext } from "../provider/contexts.jsx";
8
+ import { useG9Strings, useG9Theme } from "../provider/hooks.jsx";
9
+ const registries = new WeakMap();
10
+ const globalScope = {};
11
+ function groupSet(scope, group) {
12
+ let groups = registries.get(scope);
13
+ if (!groups) {
14
+ groups = new Map();
15
+ registries.set(scope, groups);
16
+ }
17
+ let set = groups.get(group);
18
+ if (!set) {
19
+ set = new Set();
20
+ groups.set(group, set);
21
+ }
22
+ return set;
23
+ }
24
+ const SwitchGroupContext = createContext(null);
25
+ function G9SwitchGroup(props) {
26
+ const control = useG9Control(props, 'g9-switch-group');
27
+ const [states, setStates] = useState(()=>new Map());
28
+ const latest = useRef(states);
29
+ latest.current = states;
30
+ const minOneActive = true === props.minOneActive;
31
+ const minRef = useRef(minOneActive);
32
+ minRef.current = minOneActive;
33
+ const value = useRef(null);
34
+ if (null === value.current) value.current = {
35
+ get minOneActive () {
36
+ return minRef.current;
37
+ },
38
+ activeCount: ()=>{
39
+ let n = 0;
40
+ for (const on of latest.current.values())if (on) n++;
41
+ return n;
42
+ },
43
+ report: (id, on)=>setStates((current)=>{
44
+ if (null === on ? !current.has(id) : current.get(id) === on) return current;
45
+ const next = new Map(current);
46
+ if (null === on) next.delete(id);
47
+ else next.set(id, on);
48
+ latest.current = next;
49
+ return next;
50
+ })
51
+ };
52
+ let active = 0;
53
+ for (const on of states.values())if (on) active++;
54
+ const total = states.size;
55
+ const notify = useRef(props.onActiveCountChange);
56
+ notify.current = props.onActiveCountChange;
57
+ useEffect(()=>{
58
+ var _notify_current;
59
+ null == (_notify_current = notify.current) || _notify_current.call(notify, active, total);
60
+ }, [
61
+ active,
62
+ total
63
+ ]);
64
+ const warn = minOneActive && active <= 1;
65
+ return <SwitchGroupContext.Provider value={value.current}>
66
+ <view className={control.className} {...control.idProps}>
67
+ {props.children}
68
+ {props.showLiveStatus ? <text className="g9-switch-group__status" style={{
69
+ color: warn ? 'var(--g9-warning)' : 'var(--g9-text-tertiary)'
70
+ }}>
71
+ {`${active} / ${total}`}
72
+ </text> : null}
73
+ </view>
74
+ </SwitchGroupContext.Provider>;
75
+ }
76
+ let switchIds = 0;
77
+ const switch_G9Switch = forwardRef(function(props, ref) {
78
+ var _props_defaultChecked, _props_accessibilityLabel, _ref, _props_accessibilityLabel1;
79
+ const control = useG9Control(props, 'g9-switch');
80
+ const theme = useG9Theme();
81
+ const strings = useG9Strings();
82
+ const core = useContext(G9CoreContext);
83
+ const group = useContext(SwitchGroupContext);
84
+ const [checked, setChecked] = useControllableState({
85
+ value: props.checked,
86
+ defaultValue: null != (_props_defaultChecked = props.defaultChecked) ? _props_defaultChecked : false,
87
+ onChange: props.onCheckedChange,
88
+ name: 'G9Switch.checked'
89
+ });
90
+ const [shake, setShake] = useState(0);
91
+ const id = useRef(0);
92
+ if (0 === id.current) id.current = ++switchIds;
93
+ const latestChecked = useRef(checked);
94
+ latestChecked.current = checked;
95
+ const setRef = useRef(setChecked);
96
+ setRef.current = setChecked;
97
+ useEffect(()=>{
98
+ null == group || group.report(id.current, checked);
99
+ }, [
100
+ group,
101
+ checked
102
+ ]);
103
+ useEffect(()=>()=>null == group ? void 0 : group.report(id.current, null), [
104
+ group
105
+ ]);
106
+ const groupName = props.selectionGroup && '' !== props.selectionGroup.trim() ? props.selectionGroup : null;
107
+ const scope = null != core ? core : globalScope;
108
+ const memberRef = useRef(null);
109
+ useEffect(()=>{
110
+ if (!groupName) return;
111
+ const member = {
112
+ turnOff: ()=>setRef.current(false)
113
+ };
114
+ const set = groupSet(scope, groupName);
115
+ set.add(member);
116
+ memberRef.current = member;
117
+ return ()=>{
118
+ set.delete(member);
119
+ memberRef.current = null;
120
+ };
121
+ }, [
122
+ groupName,
123
+ scope
124
+ ]);
125
+ useEffect(()=>{
126
+ if (!checked || !groupName) return;
127
+ for (const other of groupSet(scope, groupName))if (other !== memberRef.current) other.turnOff();
128
+ }, [
129
+ checked,
130
+ groupName,
131
+ scope
132
+ ]);
133
+ const toggle = ()=>{
134
+ if (control.disabled) return;
135
+ const on = latestChecked.current;
136
+ if (on && (props.isRequired || (null == group ? void 0 : group.minOneActive) && group.activeCount() <= 1)) return void setShake((n)=>n + 1);
137
+ setChecked(!on);
138
+ };
139
+ useImperativeHandle(ref, ()=>({
140
+ toggle
141
+ }));
142
+ const press = useG9Press(toggle, {
143
+ blocked: control.disabled,
144
+ source: 'G9Switch',
145
+ guardMs: 0
146
+ });
147
+ const rtl = 'rtl' === control.direction;
148
+ const width = G9Metrics.SwitchWidth;
149
+ const thumb = G9Metrics.SwitchThumb;
150
+ const travel = width - 4 - thumb - 4;
151
+ const x = (checked ? travel : 0) * (rtl ? -1 : 1);
152
+ const track = formatColor(checked ? switchOnTrack(theme) : switchOffTrack(theme));
153
+ const thumbColor = formatColor(checked ? switchThumbOn(theme) : switchThumbOff(theme));
154
+ const form = true === props.isInFormRow;
155
+ const title = props.title && '' !== props.title.trim() ? props.title : null;
156
+ const description = props.description && '' !== props.description.trim() ? props.description : null;
157
+ return <view className={`${control.className}${form ? ' g9-switch--row' : ''}`} {...control.idProps} style={g9RowStyle(control.direction)} accessibility-element={true} accessibility-traits="button" {...checked ? {
158
+ 'accessibility-value': strings.get(G9StringKey.Selected)
159
+ } : {}} {...(null != (_props_accessibilityLabel = props.accessibilityLabel) ? _props_accessibilityLabel : title) ? {
160
+ 'accessibility-label': null != (_ref = null != (_props_accessibilityLabel1 = props.accessibilityLabel) ? _props_accessibilityLabel1 : title) ? _ref : ''
161
+ } : {}} bindtap={press}>
162
+ {form ? <view className="g9-switch__text">
163
+ {title ? <text className="g9-switch__title" style={g9TextStart(control.direction)}>
164
+ {title}
165
+ </text> : null}
166
+ {description ? <text className="g9-switch__description" style={g9TextStart(control.direction)}>
167
+ {description}
168
+ </text> : null}
169
+ </view> : null}
170
+ <view key={`shake-${shake}`} className={`g9-switch__track${shake > 0 ? ' g9-switch__track--shake' : ''}`} style={{
171
+ width: `${width}px`,
172
+ height: `${G9Metrics.SwitchHeight}px`,
173
+ backgroundColor: track
174
+ }}>
175
+ <view className="g9-switch__mark" style={{
176
+ [rtl ? 'right' : 'left']: checked ? `${width - 15 - 6}px` : '12px'
177
+ }}>
178
+ {checked ? <text className="g9-switch__tick">✓</text> : <view className="g9-switch__dot"/>}
179
+ </view>
180
+ <view className="g9-switch__thumb" style={{
181
+ [rtl ? 'right' : 'left']: '4px',
182
+ width: `${thumb}px`,
183
+ height: `${thumb}px`,
184
+ backgroundColor: thumbColor,
185
+ transform: `translateX(${x}px)`
186
+ }}/>
187
+ </view>
188
+ </view>;
189
+ });
190
+ export { G9SwitchGroup, switch_G9Switch as G9Switch };
191
+
192
+ //# sourceMappingURL=switch.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toggle/switch.jsx","sources":["../../src/toggle/switch.tsx"],"sourcesContent":["import './toggle.css';\nimport {\n formatColor,\n G9Metrics,\n G9StringKey,\n switchOffTrack,\n switchOnTrack,\n switchThumbOff,\n switchThumbOn,\n} from '@g9tm/lynxcontrols-foundation';\nimport {\n createContext,\n forwardRef,\n type ReactNode,\n useContext,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from '@lynx-js/react';\nimport { type G9ControlBaseProps, g9RowStyle, g9TextStart, useG9Control } from '../base/control';\nimport { useG9Press } from '../base/press';\nimport { useControllableState } from '../base/use-controllable-state';\nimport { G9CoreContext } from '../provider/contexts';\nimport { useG9Strings, useG9Theme } from '../provider/hooks';\n\n// ---- selection groups (MAUI `SelectionGroup`: radio-style, scoped to the provider) -------------------------------\n\ninterface GroupMember {\n turnOff(): void;\n}\n\nconst registries = new WeakMap<object, Map<string, Set<GroupMember>>>();\nconst globalScope = {};\n\nfunction groupSet(scope: object, group: string): Set<GroupMember> {\n let groups = registries.get(scope);\n if (!groups) {\n groups = new Map();\n registries.set(scope, groups);\n }\n let set = groups.get(group);\n if (!set) {\n set = new Set();\n groups.set(group, set);\n }\n return set;\n}\n\n// ---- G9SwitchGroup ---------------------------------------------------------------------------------------------\n\ninterface SwitchGroupContextValue {\n readonly minOneActive: boolean;\n activeCount(): number;\n report(id: number, on: boolean | null): void;\n}\n\nconst SwitchGroupContext = createContext<SwitchGroupContextValue | null>(null);\n\n/** Props of {@link G9SwitchGroup} (MAUI `G9SwitchGroup`). */\nexport interface G9SwitchGroupProps extends G9ControlBaseProps {\n /** A tap cannot turn off the last active switch of the group (it shakes). Default false. */\n readonly minOneActive?: boolean;\n /** Shows `active / total` under the switches (warning colour at ≤ 1 with `minOneActive`). Default false. */\n readonly showLiveStatus?: boolean;\n /** Told when the number of active switches changes (MAUI `ActiveSwitchCount`). */\n readonly onActiveCountChange?: (active: number, total: number) => void;\n readonly children?: ReactNode;\n}\n\n/**\n * A vertical group of switches (MAUI `G9SwitchGroup`): counts its switches (nearest group only, as MAUI's direct\n * children), optionally keeps one on and shows a live `active / total` status. It does not make switches exclusive:\n * use `selectionGroup` for radio behaviour.\n */\nexport function G9SwitchGroup(props: G9SwitchGroupProps): ReactNode {\n const control = useG9Control(props, 'g9-switch-group');\n const [states, setStates] = useState<ReadonlyMap<number, boolean>>(() => new Map());\n const latest = useRef(states);\n latest.current = states;\n const minOneActive = props.minOneActive === true;\n const minRef = useRef(minOneActive);\n minRef.current = minOneActive;\n // One context object for the group's life: switches key their effects on it.\n const value = useRef<SwitchGroupContextValue | null>(null);\n if (value.current === null) {\n value.current = {\n get minOneActive() {\n return minRef.current;\n },\n activeCount: () => {\n let n = 0;\n for (const on of latest.current.values()) if (on) n++;\n return n;\n },\n report: (id, on) =>\n setStates((current) => {\n if (on === null ? !current.has(id) : current.get(id) === on) return current;\n const next = new Map(current);\n if (on === null) next.delete(id);\n else next.set(id, on);\n latest.current = next;\n return next;\n }),\n };\n }\n let active = 0;\n for (const on of states.values()) if (on) active++;\n const total = states.size;\n const notify = useRef(props.onActiveCountChange);\n notify.current = props.onActiveCountChange;\n useEffect(() => {\n notify.current?.(active, total);\n }, [active, total]);\n const warn = minOneActive && active <= 1;\n return (\n <SwitchGroupContext.Provider value={value.current}>\n <view className={control.className} {...control.idProps}>\n {props.children}\n {props.showLiveStatus ? (\n <text\n className=\"g9-switch-group__status\"\n style={{ color: warn ? 'var(--g9-warning)' : 'var(--g9-text-tertiary)' }}\n >\n {`${active} / ${total}`}\n </text>\n ) : null}\n </view>\n </SwitchGroupContext.Provider>\n );\n}\n\n// ---- G9Switch ----------------------------------------------------------------------------------------------------\n\n/** Props of {@link G9Switch} (MAUI `G9Switch`). */\nexport interface G9SwitchProps extends G9ControlBaseProps {\n /** Controlled state (MAUI `IsOn`). */\n readonly checked?: boolean;\n readonly defaultChecked?: boolean;\n /**\n * Once per change made by the switch: a tap, `toggle()`, or being turned off by its selection group (MAUI\n * `Toggled`). Never for a value the parent pushed in.\n */\n readonly onCheckedChange?: (checked: boolean) => void;\n /** A tap cannot turn it off (it shakes); code still can. Default false. */\n readonly isRequired?: boolean;\n /** Radio group name: turning this on turns off the others with the same name under the same provider. */\n readonly selectionGroup?: string | null;\n /** Form row: title/description fill the start, switch at the end, padded. Default false. */\n readonly isInFormRow?: boolean;\n /** Bold 14 title (form row only); the accessibility name. */\n readonly title?: string | null;\n /** 12 px description under the title (form row only). */\n readonly description?: string | null;\n}\n\n/** Imperative handle of {@link G9Switch}. */\nexport interface G9SwitchHandle {\n /** Same as a tap. */\n toggle(): void;\n}\n\nlet switchIds = 0;\n\n/**\n * Switch (MAUI `G9Switch`): 56 × 32 track, 24 px thumb that stretches while travelling, 240 ms spring-like CSS\n * transition, tick/dot track mark; RTL moves the \"on\" side to the left. A blocked tap (required, or the last active\n * switch of a `minOneActive` group) shakes instead of toggling. Disabled: opacity 0.45.\n */\nexport const G9Switch = forwardRef<G9SwitchHandle, G9SwitchProps>(function G9Switch(props, ref): ReactNode {\n const control = useG9Control(props, 'g9-switch');\n const theme = useG9Theme();\n const strings = useG9Strings();\n const core = useContext(G9CoreContext);\n const group = useContext(SwitchGroupContext);\n const [checked, setChecked] = useControllableState<boolean>({\n value: props.checked,\n defaultValue: props.defaultChecked ?? false,\n onChange: props.onCheckedChange,\n name: 'G9Switch.checked',\n });\n const [shake, setShake] = useState(0);\n const id = useRef(0);\n if (id.current === 0) id.current = ++switchIds;\n const latestChecked = useRef(checked);\n latestChecked.current = checked;\n const setRef = useRef(setChecked);\n setRef.current = setChecked;\n\n // Report to the group.\n useEffect(() => {\n group?.report(id.current, checked);\n }, [group, checked]);\n useEffect(() => () => group?.report(id.current, null), [group]);\n\n // Selection group registration (while mounted and named).\n const groupName = props.selectionGroup && props.selectionGroup.trim() !== '' ? props.selectionGroup : null;\n const scope: object = core ?? globalScope;\n const memberRef = useRef<GroupMember | null>(null);\n useEffect(() => {\n if (!groupName) return;\n const member: GroupMember = { turnOff: () => setRef.current(false) };\n const set = groupSet(scope, groupName);\n set.add(member);\n memberRef.current = member;\n return () => {\n set.delete(member);\n memberRef.current = null;\n };\n }, [groupName, scope]);\n useEffect(() => {\n if (!checked || !groupName) return;\n for (const other of groupSet(scope, groupName)) if (other !== memberRef.current) other.turnOff();\n }, [checked, groupName, scope]);\n\n const toggle = () => {\n if (control.disabled) return;\n const on = latestChecked.current;\n if (on && (props.isRequired || (group?.minOneActive && group.activeCount() <= 1))) {\n setShake((n) => n + 1);\n return;\n }\n setChecked(!on);\n };\n useImperativeHandle(ref, () => ({ toggle }));\n const press = useG9Press(toggle, { blocked: control.disabled, source: 'G9Switch', guardMs: 0 });\n\n const rtl = control.direction === 'rtl';\n const width = G9Metrics.SwitchWidth;\n const thumb = G9Metrics.SwitchThumb;\n const travel = width - 4 - thumb - 4;\n const x = (checked ? travel : 0) * (rtl ? -1 : 1);\n const track = formatColor(checked ? switchOnTrack(theme) : switchOffTrack(theme));\n const thumbColor = formatColor(checked ? switchThumbOn(theme) : switchThumbOff(theme));\n const form = props.isInFormRow === true;\n const title = props.title && props.title.trim() !== '' ? props.title : null;\n const description = props.description && props.description.trim() !== '' ? props.description : null;\n return (\n <view\n className={`${control.className}${form ? ' g9-switch--row' : ''}`}\n {...control.idProps}\n style={g9RowStyle(control.direction)}\n accessibility-element={true}\n accessibility-traits=\"button\"\n {...(checked ? { 'accessibility-value': strings.get(G9StringKey.Selected) } : {})}\n {...((props.accessibilityLabel ?? title)\n ? { 'accessibility-label': props.accessibilityLabel ?? title ?? '' }\n : {})}\n bindtap={press}\n >\n {form ? (\n <view className=\"g9-switch__text\">\n {title ? (\n <text className=\"g9-switch__title\" style={g9TextStart(control.direction)}>\n {title}\n </text>\n ) : null}\n {description ? (\n <text className=\"g9-switch__description\" style={g9TextStart(control.direction)}>\n {description}\n </text>\n ) : null}\n </view>\n ) : null}\n <view\n key={`shake-${shake}`}\n className={`g9-switch__track${shake > 0 ? ' g9-switch__track--shake' : ''}`}\n style={{ width: `${width}px`, height: `${G9Metrics.SwitchHeight}px`, backgroundColor: track }}\n >\n <view\n className=\"g9-switch__mark\"\n style={{ [rtl ? 'right' : 'left']: checked ? `${width - 15 - 6}px` : '12px' }}\n >\n {checked ? <text className=\"g9-switch__tick\">✓</text> : <view className=\"g9-switch__dot\" />}\n </view>\n <view\n className=\"g9-switch__thumb\"\n style={{\n [rtl ? 'right' : 'left']: '4px',\n width: `${thumb}px`,\n height: `${thumb}px`,\n backgroundColor: thumbColor,\n transform: `translateX(${x}px)`,\n }}\n />\n </view>\n </view>\n );\n});\n"],"names":["registries","WeakMap","globalScope","groupSet","scope","group","groups","Map","set","Set","SwitchGroupContext","createContext","G9SwitchGroup","props","control","useG9Control","states","setStates","useState","latest","useRef","minOneActive","minRef","value","n","on","id","current","next","active","total","notify","useEffect","warn","view","text","switchIds","G9Switch","forwardRef","ref","_props_defaultChecked","_props_accessibilityLabel","_ref","theme","useG9Theme","strings","useG9Strings","core","useContext","G9CoreContext","checked","setChecked","useControllableState","shake","setShake","latestChecked","setRef","groupName","memberRef","member","other","toggle","useImperativeHandle","press","useG9Press","rtl","width","G9Metrics","thumb","travel","x","track","formatColor","switchOnTrack","switchOffTrack","thumbColor","switchThumbOn","switchThumbOff","form","title","description","g9RowStyle","G9StringKey","g9TextStart"],"mappings":"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"}
@@ -0,0 +1,188 @@
1
+ .g9-checkbox {
2
+ flex-direction: row;
3
+ align-self: flex-start;
4
+ align-items: flex-start;
5
+ display: flex;
6
+ }
7
+
8
+ .g9-checkbox--labelled {
9
+ align-self: stretch;
10
+ column-gap: 2px;
11
+ }
12
+
13
+ .g9-checkbox__slot {
14
+ justify-content: center;
15
+ align-items: center;
16
+ display: flex;
17
+ }
18
+
19
+ .g9-checkbox__slot--reserve {
20
+ height: 48px;
21
+ }
22
+
23
+ .g9-checkbox__box {
24
+ width: 20px;
25
+ height: 20px;
26
+ }
27
+
28
+ .g9-checkbox__text {
29
+ flex: 1;
30
+ align-self: center;
31
+ font-size: 14px;
32
+ }
33
+
34
+ .g9-switch {
35
+ flex-direction: row;
36
+ justify-content: center;
37
+ align-items: center;
38
+ display: flex;
39
+ }
40
+
41
+ .g9-switch--row {
42
+ justify-content: space-between;
43
+ align-self: stretch;
44
+ column-gap: 12px;
45
+ padding: 12px 16px;
46
+ }
47
+
48
+ .g9-switch__text {
49
+ flex-direction: column;
50
+ flex: 1;
51
+ row-gap: 2px;
52
+ display: flex;
53
+ }
54
+
55
+ .g9-switch__title {
56
+ color: var(--g9-text-primary);
57
+ font-size: 14px;
58
+ font-weight: bold;
59
+ }
60
+
61
+ .g9-switch__description {
62
+ color: var(--g9-text-tertiary);
63
+ font-size: 12px;
64
+ }
65
+
66
+ .g9-switch__track {
67
+ border-radius: 16px;
68
+ transition: background-color .24s ease-out;
69
+ position: relative;
70
+ }
71
+
72
+ .g9-switch__track--shake {
73
+ animation: .31s ease-in-out g9-switch-shake;
74
+ }
75
+
76
+ @keyframes g9-switch-shake {
77
+ 0% {
78
+ transform: translateX(0);
79
+ }
80
+
81
+ 19% {
82
+ transform: translateX(-4px);
83
+ }
84
+
85
+ 39% {
86
+ transform: translateX(4px);
87
+ }
88
+
89
+ 58% {
90
+ transform: translateX(-3px);
91
+ }
92
+
93
+ 77% {
94
+ transform: translateX(3px);
95
+ }
96
+
97
+ 100% {
98
+ transform: translateX(0);
99
+ }
100
+ }
101
+
102
+ .g9-switch__thumb {
103
+ border-radius: 12px;
104
+ transition: transform .24s cubic-bezier(.34, 1.56, .64, 1), background-color .24s ease-out;
105
+ position: absolute;
106
+ top: 4px;
107
+ }
108
+
109
+ .g9-switch__mark {
110
+ position: absolute;
111
+ top: 9px;
112
+ }
113
+
114
+ .g9-switch__tick {
115
+ color: #ffffffbf;
116
+ font-size: 12px;
117
+ }
118
+
119
+ .g9-switch__dot {
120
+ background-color: #00000038;
121
+ border-radius: 3px;
122
+ width: 6px;
123
+ height: 6px;
124
+ margin-top: 4px;
125
+ }
126
+
127
+ .g9-disabled {
128
+ opacity: .45;
129
+ }
130
+
131
+ .g9-switch-group {
132
+ flex-direction: column;
133
+ display: flex;
134
+ }
135
+
136
+ .g9-switch-group__status {
137
+ margin: 6px 2px 0;
138
+ font-size: 11px;
139
+ }
140
+
141
+ .g9-chip-group--wrap {
142
+ flex-flow: wrap;
143
+ justify-content: center;
144
+ display: flex;
145
+ }
146
+
147
+ .g9-chip-group__line {
148
+ flex-direction: row;
149
+ display: flex;
150
+ }
151
+
152
+ .g9-chip {
153
+ border-style: solid;
154
+ border-width: 1.5px;
155
+ flex-direction: row;
156
+ align-items: center;
157
+ column-gap: 6px;
158
+ padding: 0 14px;
159
+ transition: background-color .14s ease-in-out, border-color .14s ease-in-out;
160
+ display: flex;
161
+ }
162
+
163
+ .g9-chip--disabled {
164
+ opacity: .45;
165
+ }
166
+
167
+ .g9-chip__text {
168
+ white-space: nowrap;
169
+ font-size: 13px;
170
+ font-weight: bold;
171
+ }
172
+
173
+ .g9-chip__check {
174
+ opacity: 0;
175
+ width: 0;
176
+ transition: width .12s ease-in-out, opacity .12s ease-in-out, transform .12s ease-in-out;
177
+ overflow: hidden;
178
+ transform: scale(.5);
179
+ }
180
+
181
+ .g9-chip__check--on {
182
+ opacity: 1;
183
+ width: 16px;
184
+ transform: scale(1);
185
+ }
186
+
187
+
188
+ /*# sourceMappingURL=toggle.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["webpack://./src/toggle/toggle.css"],"names":[],"mappings":"AACA;EAAE,mBAAmB;EACnB,sBAAsB;EACtB,uBAAuB;EACvB,aAAa;AACf;;AAGA;EAAE,mBAAmB;EACnB,eAAe;AACjB;;AAGA;EAAE,uBAAuB;EACvB,mBAAmB;EACnB,aAAa;AACf;;AAKA;EAFE,YAAY;AACd;;AAKA;EAFE,WAAW;EACX,YAAY;AACd;;AAOA;EAJE,OAAO;EACP,kBAAkB;EAClB,eAAe;AACjB;;AAOA;EAJE,mBAAmB;EACnB,uBAAuB;EACvB,mBAAmB;EACnB,aAAa;AACf;;AAOA;EAJE,8BAA8B;EAC9B,mBAAmB;EACnB,gBAAgB;EAChB,kBAAkB;AACpB;;AAOA;EAJE,sBAAsB;EACtB,OAAO;EACP,YAAY;EACZ,aAAa;AACf;;AAOA;EAJE,6BAA6B;EAC7B,eAAe;EACf,iBAAiB;AACnB;;AAOA;EAJE,8BAA8B;EAC9B,eAAe;AACjB;;AAOA;EAJE,mBAAmB;EACnB,0CAA0C;EAC1C,kBAAkB;AACpB;;AAOA;EAJE,2CAA2C;AAC7C;;AAOA;EAJE;IACE,wBAAwB;EAC1B;;EAEA;IACE,2BAA2B;EAC7B;;EAEA;IACE,0BAA0B;EAC5B;;EAEA;IACE,2BAA2B;EAC7B;;EAEA;IACE,0BAA0B;EAC5B;;EAEA;IACE,wBAAwB;EAC1B;AACF;;AAEA;EACE,mBAAmB;EACnB,0FAA0F;EAC1F,kBAAkB;EAClB,QAAQ;AACV;;AAIA;EADE,kBAAkB;EAClB,QAAQ;AACV;;AAIA;EADE,gBAAgB;EAChB,eAAe;AACjB;;AAIA;EADE,2BAA2B;EAC3B,kBAAkB;EAClB,UAAU;EACV,WAAW;EACX,eAAe;AACjB;;AAIA;EADE,YAAY;AACd;;AAIA;EADE,sBAAsB;EACtB,aAAa;AACf;;AAIA;EADE,iBAAiB;EACjB,eAAe;AACjB;;AAIA;EADE,eAAe;EACf,uBAAuB;EACvB,aAAa;AACf;;AAKA;EAFE,mBAAmB;EACnB,aAAa;AACf;;AAKA;EAFE,mBAAmB;EACnB,mBAAmB;EACnB,mBAAmB;EACnB,mBAAmB;EACnB,eAAe;EACf,eAAe;EACf,4EAA4E;EAC5E,aAAa;AACf;;AAOA;EAJE,YAAY;AACd;;AAOA;EAJE,mBAAmB;EACnB,eAAe;EACf,iBAAiB;AACnB;;AAOA;EAJE,UAAU;EACV,QAAQ;EACR,wFAAwF;EACxF,gBAAgB;EAChB,oBAAoB;AACtB;;AAUA;EAPE,UAAU;EACV,WAAW;EACX,mBAAmB;AACrB","sourcesContent":["/* Toggles (MAUI G9CheckBox, G9Switch, G9SwitchGroup, G9ChipGroup). */\n.g9-checkbox {\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n align-self: flex-start;\n}\n\n.g9-checkbox--labelled {\n align-self: stretch;\n column-gap: 2px;\n}\n\n.g9-checkbox__slot {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n/* MAUI G9CheckBox: the 20 px box is centred in a 48 × 48 slot (both axes). The slot used to put it at the start edge\n and 7 px low (row direction + padding), 28 px from its label on Android. */\n.g9-checkbox__slot--reserve {\n height: 48px;\n}\n\n.g9-checkbox__box {\n width: 20px;\n height: 20px;\n}\n\n/* One line centres on the slot (MAUI: label centred in the 48 px row); a wrapping label grows the row and the box\n stays level with its first line. */\n.g9-checkbox__text {\n flex: 1;\n align-self: center;\n font-size: 14px;\n}\n\n.g9-switch {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n}\n\n.g9-switch--row {\n justify-content: space-between;\n column-gap: 12px;\n padding: 12px 16px;\n align-self: stretch;\n}\n\n.g9-switch__text {\n display: flex;\n flex-direction: column;\n flex: 1;\n row-gap: 2px;\n}\n\n.g9-switch__title {\n font-size: 14px;\n font-weight: bold;\n color: var(--g9-text-primary);\n}\n\n.g9-switch__description {\n font-size: 12px;\n color: var(--g9-text-tertiary);\n}\n\n.g9-switch__track {\n position: relative;\n border-radius: 16px;\n transition: background-color 240ms ease-out;\n}\n\n.g9-switch__track--shake {\n animation: g9-switch-shake 310ms ease-in-out;\n}\n\n@keyframes g9-switch-shake {\n 0% {\n transform: translateX(0px);\n }\n 19% {\n transform: translateX(-4px);\n }\n 39% {\n transform: translateX(4px);\n }\n 58% {\n transform: translateX(-3px);\n }\n 77% {\n transform: translateX(3px);\n }\n 100% {\n transform: translateX(0px);\n }\n}\n\n.g9-switch__thumb {\n position: absolute;\n top: 4px;\n border-radius: 12px;\n transition:\n transform 240ms cubic-bezier(0.34, 1.56, 0.64, 1),\n background-color 240ms ease-out;\n}\n\n.g9-switch__mark {\n position: absolute;\n top: 9px;\n}\n\n.g9-switch__tick {\n font-size: 12px;\n color: rgba(255, 255, 255, 0.75);\n}\n\n.g9-switch__dot {\n width: 6px;\n height: 6px;\n margin-top: 4px;\n border-radius: 3px;\n background-color: rgba(0, 0, 0, 0.22);\n}\n\n.g9-disabled {\n opacity: 0.45;\n}\n\n.g9-switch-group {\n display: flex;\n flex-direction: column;\n}\n\n.g9-switch-group__status {\n font-size: 11px;\n margin: 6px 2px 0px 2px;\n}\n\n.g9-chip-group--wrap {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: center;\n}\n\n.g9-chip-group__line {\n display: flex;\n flex-direction: row;\n}\n\n.g9-chip {\n display: flex;\n flex-direction: row;\n align-items: center;\n column-gap: 6px;\n padding: 0px 14px;\n border-style: solid;\n border-width: 1.5px;\n transition:\n background-color 140ms ease-in-out,\n border-color 140ms ease-in-out;\n}\n\n.g9-chip--disabled {\n opacity: 0.45;\n}\n\n.g9-chip__text {\n font-size: 13px;\n font-weight: bold;\n white-space: nowrap;\n}\n\n.g9-chip__check {\n width: 0px;\n opacity: 0;\n transform: scale(0.5);\n overflow: hidden;\n transition:\n width 120ms ease-in-out,\n opacity 120ms ease-in-out,\n transform 120ms ease-in-out;\n}\n\n.g9-chip__check--on {\n width: 16px;\n opacity: 1;\n transform: scale(1);\n}\n"],"sourceRoot":""}
package/package.json CHANGED
@@ -1,6 +1,157 @@
1
1
  {
2
2
  "name": "@g9tm/lynxcontrols",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "1.4.2",
4
+ "description": "ReactLynx controls and overlay infrastructure: provider/host, sheets, popups, toasts, fields, buttons, pickers, tab view, tab bar, edge panel, swipe rows.",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "sideEffects": [
8
+ "**/*.css"
9
+ ],
10
+ "exports": {
11
+ ".": {
12
+ "source": "./src/index.ts",
13
+ "types": "./dist/index.d.ts",
14
+ "default": "./dist/index.jsx"
15
+ },
16
+ "./base": {
17
+ "source": "./src/base/index.ts",
18
+ "types": "./dist/base/index.d.ts",
19
+ "default": "./dist/base/index.jsx"
20
+ },
21
+ "./provider": {
22
+ "source": "./src/provider/index.ts",
23
+ "types": "./dist/provider/index.d.ts",
24
+ "default": "./dist/provider/index.jsx"
25
+ },
26
+ "./host": {
27
+ "source": "./src/host/index.ts",
28
+ "types": "./dist/host/index.d.ts",
29
+ "default": "./dist/host/index.jsx"
30
+ },
31
+ "./deferred": {
32
+ "source": "./src/deferred/index.ts",
33
+ "types": "./dist/deferred/index.d.ts",
34
+ "default": "./dist/deferred/index.jsx"
35
+ },
36
+ "./icon": {
37
+ "source": "./src/icon/index.ts",
38
+ "types": "./dist/icon/index.d.ts",
39
+ "default": "./dist/icon/index.jsx"
40
+ },
41
+ "./fields": {
42
+ "source": "./src/fields/index.ts",
43
+ "types": "./dist/fields/index.d.ts",
44
+ "default": "./dist/fields/index.jsx"
45
+ },
46
+ "./button": {
47
+ "source": "./src/button/index.ts",
48
+ "types": "./dist/button/index.d.ts",
49
+ "default": "./dist/button/index.jsx"
50
+ },
51
+ "./display": {
52
+ "source": "./src/display/index.ts",
53
+ "types": "./dist/display/index.d.ts",
54
+ "default": "./dist/display/index.jsx"
55
+ },
56
+ "./toggle": {
57
+ "source": "./src/toggle/index.ts",
58
+ "types": "./dist/toggle/index.d.ts",
59
+ "default": "./dist/toggle/index.jsx"
60
+ },
61
+ "./expander": {
62
+ "source": "./src/expander/index.ts",
63
+ "types": "./dist/expander/index.d.ts",
64
+ "default": "./dist/expander/index.jsx"
65
+ },
66
+ "./sheet": {
67
+ "source": "./src/sheet/index.ts",
68
+ "types": "./dist/sheet/index.d.ts",
69
+ "default": "./dist/sheet/index.jsx"
70
+ },
71
+ "./selection": {
72
+ "source": "./src/selection/index.ts",
73
+ "types": "./dist/selection/index.d.ts",
74
+ "default": "./dist/selection/index.jsx"
75
+ },
76
+ "./pickers": {
77
+ "source": "./src/pickers/index.ts",
78
+ "types": "./dist/pickers/index.d.ts",
79
+ "default": "./dist/pickers/index.jsx"
80
+ },
81
+ "./range-slider": {
82
+ "source": "./src/range-slider/index.ts",
83
+ "types": "./dist/range-slider/index.d.ts",
84
+ "default": "./dist/range-slider/index.jsx"
85
+ },
86
+ "./cascade": {
87
+ "source": "./src/cascade/index.ts",
88
+ "types": "./dist/cascade/index.d.ts",
89
+ "default": "./dist/cascade/index.jsx"
90
+ },
91
+ "./popup": {
92
+ "source": "./src/popup/index.ts",
93
+ "types": "./dist/popup/index.d.ts",
94
+ "default": "./dist/popup/index.jsx"
95
+ },
96
+ "./toast": {
97
+ "source": "./src/toast/index.ts",
98
+ "types": "./dist/toast/index.d.ts",
99
+ "default": "./dist/toast/index.jsx"
100
+ },
101
+ "./tabs": {
102
+ "source": "./src/tabs/index.ts",
103
+ "types": "./dist/tabs/index.d.ts",
104
+ "default": "./dist/tabs/index.jsx"
105
+ },
106
+ "./tab-bar": {
107
+ "source": "./src/tab-bar/index.ts",
108
+ "types": "./dist/tab-bar/index.d.ts",
109
+ "default": "./dist/tab-bar/index.jsx"
110
+ },
111
+ "./plus-button": {
112
+ "source": "./src/plus-button/index.ts",
113
+ "types": "./dist/plus-button/index.d.ts",
114
+ "default": "./dist/plus-button/index.jsx"
115
+ },
116
+ "./edge-panel": {
117
+ "source": "./src/edge-panel/index.ts",
118
+ "types": "./dist/edge-panel/index.d.ts",
119
+ "default": "./dist/edge-panel/index.jsx"
120
+ },
121
+ "./swipe": {
122
+ "source": "./src/swipe/index.ts",
123
+ "types": "./dist/swipe/index.d.ts",
124
+ "default": "./dist/swipe/index.jsx"
125
+ },
126
+ "./rspeedy": {
127
+ "types": "./rspeedy/index.d.ts",
128
+ "default": "./rspeedy/index.mjs"
129
+ }
130
+ },
131
+ "files": [
132
+ "dist",
133
+ "README.md",
134
+ "rspeedy"
135
+ ],
136
+ "scripts": {
137
+ "build": "rslib build"
138
+ },
139
+ "dependencies": {
140
+ "@g9tm/lynxcontrols-foundation": "1.4.2",
141
+ "@lynx-js/lynx-ui-common": "3.139.0",
142
+ "@lynx-js/lynx-ui-deferred-component": "3.139.0",
143
+ "@lynx-js/lynx-ui-draggable": "3.139.0",
144
+ "@lynx-js/lynx-ui-input": "3.139.0",
145
+ "@lynx-js/lynx-ui-input-otp": "3.139.0",
146
+ "@lynx-js/lynx-ui-lazy-component": "3.139.0",
147
+ "@lynx-js/lynx-ui-list": "3.139.0",
148
+ "@lynx-js/lynx-ui-overlay": "3.139.0",
149
+ "@lynx-js/lynx-ui-presence": "3.139.0",
150
+ "@lynx-js/lynx-ui-sheet": "3.139.0",
151
+ "@lynx-js/lynx-ui-slider": "3.139.0",
152
+ "@lynx-js/lynx-ui-view-pager": "3.139.0"
153
+ },
154
+ "peerDependencies": {
155
+ "@lynx-js/react": ">=0.126.2 <0.127.0"
156
+ }
157
+ }
@@ -0,0 +1,21 @@
1
+ /** The page-config flags G9 needs (`enableCSSInlineVariables`: inline `--g9-*` and `var()` work on every engine). */
2
+ export declare const g9PageConfig: Readonly<{ enableCSSInlineVariables: true }>;
3
+
4
+ /** Loads the `LynxTemplatePlugin` class the app's ReactLynx build uses, resolved from `context` (the app root). */
5
+ export declare function loadTemplatePlugin(context: string): Promise<unknown>;
6
+
7
+ /** The rspack plugin that sets the page config through the template plugin's `beforeEncode` hook. */
8
+ export declare class G9PageConfigPlugin {
9
+ constructor(templatePlugin: unknown, pageConfig?: Readonly<Record<string, unknown>>);
10
+ apply(compiler: unknown): void;
11
+ }
12
+
13
+ /**
14
+ * The rspeedy / Rsbuild plugin every app that renders G9 controls adds:
15
+ * `plugins: [pluginReactLynx(), pluginG9Lynx()]`. Without it, colours written as `var(--g9-*)` in inline styles do not
16
+ * resolve (the Lynx engine ignores inline CSS variables unless `enableCSSInlineVariables` is on).
17
+ */
18
+ export declare function pluginG9Lynx(): {
19
+ readonly name: string;
20
+ setup(api: unknown): Promise<void>;
21
+ };