@g9tm/lynxcontrols 0.0.0-stage → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (545) hide show
  1. package/README.md +22 -2
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/base/base.css +16 -0
  4. package/dist/base/base.css.map +1 -0
  5. package/dist/base/control.d.ts +44 -0
  6. package/dist/base/control.d.ts.map +1 -0
  7. package/dist/base/control.jsx +24 -0
  8. package/dist/base/control.jsx.map +1 -0
  9. package/dist/base/corner-badge.d.ts +35 -0
  10. package/dist/base/corner-badge.d.ts.map +1 -0
  11. package/dist/base/corner-badge.jsx +45 -0
  12. package/dist/base/corner-badge.jsx.map +1 -0
  13. package/dist/base/disposer.d.ts +28 -0
  14. package/dist/base/disposer.d.ts.map +1 -0
  15. package/dist/base/disposer.jsx +61 -0
  16. package/dist/base/disposer.jsx.map +1 -0
  17. package/dist/base/index.d.ts +10 -0
  18. package/dist/base/index.d.ts.map +1 -0
  19. package/dist/base/index.jsx +9 -0
  20. package/dist/base/press.d.ts +38 -0
  21. package/dist/base/press.d.ts.map +1 -0
  22. package/dist/base/press.jsx +73 -0
  23. package/dist/base/press.jsx.map +1 -0
  24. package/dist/base/pressable.d.ts +25 -0
  25. package/dist/base/pressable.d.ts.map +1 -0
  26. package/dist/base/pressable.jsx +38 -0
  27. package/dist/base/pressable.jsx.map +1 -0
  28. package/dist/base/selection-item.d.ts +29 -0
  29. package/dist/base/selection-item.d.ts.map +1 -0
  30. package/dist/base/selection-item.jsx +6 -0
  31. package/dist/base/selection-item.jsx.map +1 -0
  32. package/dist/base/timers.d.ts +7 -0
  33. package/dist/base/timers.d.ts.map +1 -0
  34. package/dist/base/timers.jsx +10 -0
  35. package/dist/base/timers.jsx.map +1 -0
  36. package/dist/base/use-controllable-state.d.ts +30 -0
  37. package/dist/base/use-controllable-state.d.ts.map +1 -0
  38. package/dist/base/use-controllable-state.jsx +49 -0
  39. package/dist/base/use-controllable-state.jsx.map +1 -0
  40. package/dist/base/use-stable-callback.d.ts +8 -0
  41. package/dist/base/use-stable-callback.d.ts.map +1 -0
  42. package/dist/base/use-stable-callback.jsx +12 -0
  43. package/dist/base/use-stable-callback.jsx.map +1 -0
  44. package/dist/button/button.css +162 -0
  45. package/dist/button/button.css.map +1 -0
  46. package/dist/button/button.d.ts +52 -0
  47. package/dist/button/button.d.ts.map +1 -0
  48. package/dist/button/button.jsx +87 -0
  49. package/dist/button/button.jsx.map +1 -0
  50. package/dist/button/header-action-button.d.ts +34 -0
  51. package/dist/button/header-action-button.d.ts.map +1 -0
  52. package/dist/button/header-action-button.jsx +51 -0
  53. package/dist/button/header-action-button.jsx.map +1 -0
  54. package/dist/button/icon-button.d.ts +46 -0
  55. package/dist/button/icon-button.d.ts.map +1 -0
  56. package/dist/button/icon-button.jsx +69 -0
  57. package/dist/button/icon-button.jsx.map +1 -0
  58. package/dist/button/index.d.ts +9 -0
  59. package/dist/button/index.d.ts.map +1 -0
  60. package/dist/button/index.jsx +8 -0
  61. package/dist/button/nav-card.d.ts +58 -0
  62. package/dist/button/nav-card.d.ts.map +1 -0
  63. package/dist/button/nav-card.jsx +95 -0
  64. package/dist/button/nav-card.jsx.map +1 -0
  65. package/dist/button/safe-tap.d.ts +27 -0
  66. package/dist/button/safe-tap.d.ts.map +1 -0
  67. package/dist/button/safe-tap.jsx +46 -0
  68. package/dist/button/safe-tap.jsx.map +1 -0
  69. package/dist/button/safe.d.ts +84 -0
  70. package/dist/button/safe.d.ts.map +1 -0
  71. package/dist/button/safe.jsx +116 -0
  72. package/dist/button/safe.jsx.map +1 -0
  73. package/dist/button/vertical-icon-text-button.d.ts +18 -0
  74. package/dist/button/vertical-icon-text-button.d.ts.map +1 -0
  75. package/dist/button/vertical-icon-text-button.jsx +21 -0
  76. package/dist/button/vertical-icon-text-button.jsx.map +1 -0
  77. package/dist/button/visuals.d.ts +53 -0
  78. package/dist/button/visuals.d.ts.map +1 -0
  79. package/dist/button/visuals.jsx +92 -0
  80. package/dist/button/visuals.jsx.map +1 -0
  81. package/dist/cascade/cascade-panel.d.ts +80 -0
  82. package/dist/cascade/cascade-panel.d.ts.map +1 -0
  83. package/dist/cascade/cascade-panel.jsx +179 -0
  84. package/dist/cascade/cascade-panel.jsx.map +1 -0
  85. package/dist/cascade/cascade.css +70 -0
  86. package/dist/cascade/cascade.css.map +1 -0
  87. package/dist/cascade/index.d.ts +3 -0
  88. package/dist/cascade/index.d.ts.map +1 -0
  89. package/dist/cascade/index.jsx +2 -0
  90. package/dist/cascade/model.d.ts +68 -0
  91. package/dist/cascade/model.d.ts.map +1 -0
  92. package/dist/cascade/model.jsx +161 -0
  93. package/dist/cascade/model.jsx.map +1 -0
  94. package/dist/deferred/deferred-content.d.ts +82 -0
  95. package/dist/deferred/deferred-content.d.ts.map +1 -0
  96. package/dist/deferred/deferred-content.jsx +263 -0
  97. package/dist/deferred/deferred-content.jsx.map +1 -0
  98. package/dist/deferred/deferred.css +62 -0
  99. package/dist/deferred/deferred.css.map +1 -0
  100. package/dist/deferred/index.d.ts +3 -0
  101. package/dist/deferred/index.d.ts.map +1 -0
  102. package/dist/deferred/index.jsx +2 -0
  103. package/dist/deferred/readiness-signal.d.ts +16 -0
  104. package/dist/deferred/readiness-signal.d.ts.map +1 -0
  105. package/dist/deferred/readiness-signal.jsx +29 -0
  106. package/dist/deferred/readiness-signal.jsx.map +1 -0
  107. package/dist/display/activity-indicator.d.ts +21 -0
  108. package/dist/display/activity-indicator.d.ts.map +1 -0
  109. package/dist/display/activity-indicator.jsx +22 -0
  110. package/dist/display/activity-indicator.jsx.map +1 -0
  111. package/dist/display/culture-date-time-label.d.ts +64 -0
  112. package/dist/display/culture-date-time-label.d.ts.map +1 -0
  113. package/dist/display/culture-date-time-label.jsx +71 -0
  114. package/dist/display/culture-date-time-label.jsx.map +1 -0
  115. package/dist/display/display.css +217 -0
  116. package/dist/display/display.css.map +1 -0
  117. package/dist/display/index.d.ts +7 -0
  118. package/dist/display/index.d.ts.map +1 -0
  119. package/dist/display/index.jsx +6 -0
  120. package/dist/display/progress-bar.d.ts +38 -0
  121. package/dist/display/progress-bar.d.ts.map +1 -0
  122. package/dist/display/progress-bar.jsx +57 -0
  123. package/dist/display/progress-bar.jsx.map +1 -0
  124. package/dist/display/separator.d.ts +30 -0
  125. package/dist/display/separator.d.ts.map +1 -0
  126. package/dist/display/separator.jsx +55 -0
  127. package/dist/display/separator.jsx.map +1 -0
  128. package/dist/display/shimmer.d.ts +41 -0
  129. package/dist/display/shimmer.d.ts.map +1 -0
  130. package/dist/display/shimmer.jsx +41 -0
  131. package/dist/display/shimmer.jsx.map +1 -0
  132. package/dist/display/title-with-line.d.ts +13 -0
  133. package/dist/display/title-with-line.d.ts.map +1 -0
  134. package/dist/display/title-with-line.jsx +21 -0
  135. package/dist/display/title-with-line.jsx.map +1 -0
  136. package/dist/edge-panel/edge-panel.css +132 -0
  137. package/dist/edge-panel/edge-panel.css.map +1 -0
  138. package/dist/edge-panel/edge-panel.d.ts +87 -0
  139. package/dist/edge-panel/edge-panel.d.ts.map +1 -0
  140. package/dist/edge-panel/edge-panel.jsx +326 -0
  141. package/dist/edge-panel/edge-panel.jsx.map +1 -0
  142. package/dist/edge-panel/helper.d.ts +27 -0
  143. package/dist/edge-panel/helper.d.ts.map +1 -0
  144. package/dist/edge-panel/helper.jsx +118 -0
  145. package/dist/edge-panel/helper.jsx.map +1 -0
  146. package/dist/edge-panel/index.d.ts +4 -0
  147. package/dist/edge-panel/index.d.ts.map +1 -0
  148. package/dist/edge-panel/index.jsx +3 -0
  149. package/dist/edge-panel/types.d.ts +155 -0
  150. package/dist/edge-panel/types.d.ts.map +1 -0
  151. package/dist/edge-panel/types.jsx +139 -0
  152. package/dist/edge-panel/types.jsx.map +1 -0
  153. package/dist/expander/expander.css +54 -0
  154. package/dist/expander/expander.css.map +1 -0
  155. package/dist/expander/expander.d.ts +46 -0
  156. package/dist/expander/expander.d.ts.map +1 -0
  157. package/dist/expander/expander.jsx +110 -0
  158. package/dist/expander/expander.jsx.map +1 -0
  159. package/dist/expander/index.d.ts +2 -0
  160. package/dist/expander/index.d.ts.map +1 -0
  161. package/dist/expander/index.jsx +1 -0
  162. package/dist/fields/dictation.d.ts +43 -0
  163. package/dist/fields/dictation.d.ts.map +1 -0
  164. package/dist/fields/dictation.jsx +124 -0
  165. package/dist/fields/dictation.jsx.map +1 -0
  166. package/dist/fields/editor.d.ts +26 -0
  167. package/dist/fields/editor.d.ts.map +1 -0
  168. package/dist/fields/editor.jsx +46 -0
  169. package/dist/fields/editor.jsx.map +1 -0
  170. package/dist/fields/fields.css +156 -0
  171. package/dist/fields/fields.css.map +1 -0
  172. package/dist/fields/index.d.ts +12 -0
  173. package/dist/fields/index.d.ts.map +1 -0
  174. package/dist/fields/index.jsx +11 -0
  175. package/dist/fields/input-policy.d.ts +48 -0
  176. package/dist/fields/input-policy.d.ts.map +1 -0
  177. package/dist/fields/input-policy.jsx +215 -0
  178. package/dist/fields/input-policy.jsx.map +1 -0
  179. package/dist/fields/outlined-field.d.ts +146 -0
  180. package/dist/fields/outlined-field.d.ts.map +1 -0
  181. package/dist/fields/outlined-field.jsx +196 -0
  182. package/dist/fields/outlined-field.jsx.map +1 -0
  183. package/dist/fields/pin-entry.d.ts +63 -0
  184. package/dist/fields/pin-entry.d.ts.map +1 -0
  185. package/dist/fields/pin-entry.jsx +293 -0
  186. package/dist/fields/pin-entry.jsx.map +1 -0
  187. package/dist/fields/search-entry.d.ts +35 -0
  188. package/dist/fields/search-entry.d.ts.map +1 -0
  189. package/dist/fields/search-entry.jsx +118 -0
  190. package/dist/fields/search-entry.jsx.map +1 -0
  191. package/dist/fields/slot-layout.d.ts +33 -0
  192. package/dist/fields/slot-layout.d.ts.map +1 -0
  193. package/dist/fields/slot-layout.jsx +33 -0
  194. package/dist/fields/slot-layout.jsx.map +1 -0
  195. package/dist/fields/text-entry.d.ts +62 -0
  196. package/dist/fields/text-entry.d.ts.map +1 -0
  197. package/dist/fields/text-entry.jsx +72 -0
  198. package/dist/fields/text-entry.jsx.map +1 -0
  199. package/dist/fields/use-dictation.d.ts +34 -0
  200. package/dist/fields/use-dictation.d.ts.map +1 -0
  201. package/dist/fields/use-dictation.jsx +80 -0
  202. package/dist/fields/use-dictation.jsx.map +1 -0
  203. package/dist/fields/use-text-input.d.ts +150 -0
  204. package/dist/fields/use-text-input.d.ts.map +1 -0
  205. package/dist/fields/use-text-input.jsx +237 -0
  206. package/dist/fields/use-text-input.jsx.map +1 -0
  207. package/dist/fields/validator.d.ts +14 -0
  208. package/dist/fields/validator.d.ts.map +1 -0
  209. package/dist/fields/validator.jsx +20 -0
  210. package/dist/fields/validator.jsx.map +1 -0
  211. package/dist/host/back.d.ts +42 -0
  212. package/dist/host/back.d.ts.map +1 -0
  213. package/dist/host/back.jsx +47 -0
  214. package/dist/host/back.jsx.map +1 -0
  215. package/dist/host/hooks.d.ts +85 -0
  216. package/dist/host/hooks.d.ts.map +1 -0
  217. package/dist/host/hooks.jsx +163 -0
  218. package/dist/host/hooks.jsx.map +1 -0
  219. package/dist/host/host.css +81 -0
  220. package/dist/host/host.css.map +1 -0
  221. package/dist/host/host.d.ts +70 -0
  222. package/dist/host/host.d.ts.map +1 -0
  223. package/dist/host/host.jsx +229 -0
  224. package/dist/host/host.jsx.map +1 -0
  225. package/dist/host/index.d.ts +9 -0
  226. package/dist/host/index.d.ts.map +1 -0
  227. package/dist/host/index.jsx +8 -0
  228. package/dist/host/keyboard.d.ts +24 -0
  229. package/dist/host/keyboard.d.ts.map +1 -0
  230. package/dist/host/keyboard.jsx +28 -0
  231. package/dist/host/keyboard.jsx.map +1 -0
  232. package/dist/host/layers.d.ts +69 -0
  233. package/dist/host/layers.d.ts.map +1 -0
  234. package/dist/host/layers.jsx +111 -0
  235. package/dist/host/layers.jsx.map +1 -0
  236. package/dist/host/page-loading-overlay.d.ts +17 -0
  237. package/dist/host/page-loading-overlay.d.ts.map +1 -0
  238. package/dist/host/page-loading-overlay.jsx +16 -0
  239. package/dist/host/page-loading-overlay.jsx.map +1 -0
  240. package/dist/host/readiness.d.ts +57 -0
  241. package/dist/host/readiness.d.ts.map +1 -0
  242. package/dist/host/readiness.jsx +138 -0
  243. package/dist/host/readiness.jsx.map +1 -0
  244. package/dist/host/registry.d.ts +106 -0
  245. package/dist/host/registry.d.ts.map +1 -0
  246. package/dist/host/registry.jsx +93 -0
  247. package/dist/host/registry.jsx.map +1 -0
  248. package/dist/icon/icon.css +39 -0
  249. package/dist/icon/icon.css.map +1 -0
  250. package/dist/icon/icon.d.ts +57 -0
  251. package/dist/icon/icon.d.ts.map +1 -0
  252. package/dist/icon/icon.jsx +115 -0
  253. package/dist/icon/icon.jsx.map +1 -0
  254. package/dist/icon/index.d.ts +4 -0
  255. package/dist/icon/index.d.ts.map +1 -0
  256. package/dist/icon/index.jsx +3 -0
  257. package/dist/icon/slot.d.ts +45 -0
  258. package/dist/icon/slot.d.ts.map +1 -0
  259. package/dist/icon/slot.jsx +61 -0
  260. package/dist/icon/slot.jsx.map +1 -0
  261. package/dist/icon/swatch.d.ts +29 -0
  262. package/dist/icon/swatch.d.ts.map +1 -0
  263. package/dist/icon/swatch.jsx +25 -0
  264. package/dist/icon/swatch.jsx.map +1 -0
  265. package/dist/index.d.ts +23 -0
  266. package/dist/index.d.ts.map +1 -0
  267. package/dist/index.jsx +1 -0
  268. package/dist/pickers/combo-box.d.ts +42 -0
  269. package/dist/pickers/combo-box.d.ts.map +1 -0
  270. package/dist/pickers/combo-box.jsx +129 -0
  271. package/dist/pickers/combo-box.jsx.map +1 -0
  272. package/dist/pickers/date-time-picker.d.ts +63 -0
  273. package/dist/pickers/date-time-picker.d.ts.map +1 -0
  274. package/dist/pickers/date-time-picker.jsx +141 -0
  275. package/dist/pickers/date-time-picker.jsx.map +1 -0
  276. package/dist/pickers/date-time.d.ts +82 -0
  277. package/dist/pickers/date-time.d.ts.map +1 -0
  278. package/dist/pickers/date-time.jsx +130 -0
  279. package/dist/pickers/date-time.jsx.map +1 -0
  280. package/dist/pickers/index.d.ts +10 -0
  281. package/dist/pickers/index.d.ts.map +1 -0
  282. package/dist/pickers/index.jsx +9 -0
  283. package/dist/pickers/picker-sheet.d.ts +21 -0
  284. package/dist/pickers/picker-sheet.d.ts.map +1 -0
  285. package/dist/pickers/picker-sheet.jsx +61 -0
  286. package/dist/pickers/picker-sheet.jsx.map +1 -0
  287. package/dist/pickers/picker.d.ts +32 -0
  288. package/dist/pickers/picker.d.ts.map +1 -0
  289. package/dist/pickers/picker.jsx +72 -0
  290. package/dist/pickers/picker.jsx.map +1 -0
  291. package/dist/pickers/pickers.css +219 -0
  292. package/dist/pickers/pickers.css.map +1 -0
  293. package/dist/pickers/timespan-picker.d.ts +36 -0
  294. package/dist/pickers/timespan-picker.d.ts.map +1 -0
  295. package/dist/pickers/timespan-picker.jsx +99 -0
  296. package/dist/pickers/timespan-picker.jsx.map +1 -0
  297. package/dist/pickers/timespan.d.ts +38 -0
  298. package/dist/pickers/timespan.d.ts.map +1 -0
  299. package/dist/pickers/timespan.jsx +49 -0
  300. package/dist/pickers/timespan.jsx.map +1 -0
  301. package/dist/pickers/trigger.d.ts +34 -0
  302. package/dist/pickers/trigger.d.ts.map +1 -0
  303. package/dist/pickers/trigger.jsx +77 -0
  304. package/dist/pickers/trigger.jsx.map +1 -0
  305. package/dist/pickers/wheel-column.d.ts +32 -0
  306. package/dist/pickers/wheel-column.d.ts.map +1 -0
  307. package/dist/pickers/wheel-column.jsx +99 -0
  308. package/dist/pickers/wheel-column.jsx.map +1 -0
  309. package/dist/plus-button/index.d.ts +3 -0
  310. package/dist/plus-button/index.d.ts.map +1 -0
  311. package/dist/plus-button/index.jsx +2 -0
  312. package/dist/plus-button/model.d.ts +65 -0
  313. package/dist/plus-button/model.d.ts.map +1 -0
  314. package/dist/plus-button/model.jsx +86 -0
  315. package/dist/plus-button/model.jsx.map +1 -0
  316. package/dist/plus-button/plus-button.css +67 -0
  317. package/dist/plus-button/plus-button.css.map +1 -0
  318. package/dist/plus-button/plus-button.d.ts +38 -0
  319. package/dist/plus-button/plus-button.d.ts.map +1 -0
  320. package/dist/plus-button/plus-button.jsx +155 -0
  321. package/dist/plus-button/plus-button.jsx.map +1 -0
  322. package/dist/popup/frame.d.ts +101 -0
  323. package/dist/popup/frame.d.ts.map +1 -0
  324. package/dist/popup/frame.jsx +244 -0
  325. package/dist/popup/frame.jsx.map +1 -0
  326. package/dist/popup/index.d.ts +8 -0
  327. package/dist/popup/index.d.ts.map +1 -0
  328. package/dist/popup/index.jsx +7 -0
  329. package/dist/popup/input-form.d.ts +35 -0
  330. package/dist/popup/input-form.d.ts.map +1 -0
  331. package/dist/popup/input-form.jsx +160 -0
  332. package/dist/popup/input-form.jsx.map +1 -0
  333. package/dist/popup/input.d.ts +175 -0
  334. package/dist/popup/input.d.ts.map +1 -0
  335. package/dist/popup/input.jsx +176 -0
  336. package/dist/popup/input.jsx.map +1 -0
  337. package/dist/popup/popup-view.d.ts +25 -0
  338. package/dist/popup/popup-view.d.ts.map +1 -0
  339. package/dist/popup/popup-view.jsx +67 -0
  340. package/dist/popup/popup-view.jsx.map +1 -0
  341. package/dist/popup/popup.css +203 -0
  342. package/dist/popup/popup.css.map +1 -0
  343. package/dist/popup/queue.d.ts +90 -0
  344. package/dist/popup/queue.d.ts.map +1 -0
  345. package/dist/popup/queue.jsx +309 -0
  346. package/dist/popup/queue.jsx.map +1 -0
  347. package/dist/popup/service.d.ts +60 -0
  348. package/dist/popup/service.d.ts.map +1 -0
  349. package/dist/popup/service.jsx +342 -0
  350. package/dist/popup/service.jsx.map +1 -0
  351. package/dist/popup/types.d.ts +211 -0
  352. package/dist/popup/types.d.ts.map +1 -0
  353. package/dist/popup/types.jsx +218 -0
  354. package/dist/popup/types.jsx.map +1 -0
  355. package/dist/provider/contexts.d.ts +41 -0
  356. package/dist/provider/contexts.d.ts.map +1 -0
  357. package/dist/provider/contexts.jsx +11 -0
  358. package/dist/provider/contexts.jsx.map +1 -0
  359. package/dist/provider/global-events.d.ts +8 -0
  360. package/dist/provider/global-events.d.ts.map +1 -0
  361. package/dist/provider/global-events.jsx +17 -0
  362. package/dist/provider/global-events.jsx.map +1 -0
  363. package/dist/provider/hooks.d.ts +49 -0
  364. package/dist/provider/hooks.d.ts.map +1 -0
  365. package/dist/provider/hooks.jsx +72 -0
  366. package/dist/provider/hooks.jsx.map +1 -0
  367. package/dist/provider/index.d.ts +5 -0
  368. package/dist/provider/index.d.ts.map +1 -0
  369. package/dist/provider/index.jsx +3 -0
  370. package/dist/provider/provider.css +18 -0
  371. package/dist/provider/provider.css.map +1 -0
  372. package/dist/provider/provider.d.ts +51 -0
  373. package/dist/provider/provider.d.ts.map +1 -0
  374. package/dist/provider/provider.jsx +290 -0
  375. package/dist/provider/provider.jsx.map +1 -0
  376. package/dist/provider/settings.d.ts +99 -0
  377. package/dist/provider/settings.d.ts.map +1 -0
  378. package/dist/provider/settings.jsx +45 -0
  379. package/dist/provider/settings.jsx.map +1 -0
  380. package/dist/provider/theme-css.d.ts +12 -0
  381. package/dist/provider/theme-css.d.ts.map +1 -0
  382. package/dist/provider/theme-css.jsx +19 -0
  383. package/dist/provider/theme-css.jsx.map +1 -0
  384. package/dist/provider/theme-root.d.ts +10 -0
  385. package/dist/provider/theme-root.d.ts.map +1 -0
  386. package/dist/provider/theme-root.jsx +24 -0
  387. package/dist/provider/theme-root.jsx.map +1 -0
  388. package/dist/provider/theme.css +473 -0
  389. package/dist/provider/theme.css.map +1 -0
  390. package/dist/range-slider/index.d.ts +3 -0
  391. package/dist/range-slider/index.d.ts.map +1 -0
  392. package/dist/range-slider/index.jsx +2 -0
  393. package/dist/range-slider/math.d.ts +23 -0
  394. package/dist/range-slider/math.d.ts.map +1 -0
  395. package/dist/range-slider/math.jsx +71 -0
  396. package/dist/range-slider/math.jsx.map +1 -0
  397. package/dist/range-slider/range-slider.css +90 -0
  398. package/dist/range-slider/range-slider.css.map +1 -0
  399. package/dist/range-slider/range-slider.d.ts +52 -0
  400. package/dist/range-slider/range-slider.d.ts.map +1 -0
  401. package/dist/range-slider/range-slider.jsx +159 -0
  402. package/dist/range-slider/range-slider.jsx.map +1 -0
  403. package/dist/selection/index.d.ts +5 -0
  404. package/dist/selection/index.d.ts.map +1 -0
  405. package/dist/selection/index.jsx +3 -0
  406. package/dist/selection/model.d.ts +53 -0
  407. package/dist/selection/model.d.ts.map +1 -0
  408. package/dist/selection/model.jsx +69 -0
  409. package/dist/selection/model.jsx.map +1 -0
  410. package/dist/selection/selection-sheet.d.ts +80 -0
  411. package/dist/selection/selection-sheet.d.ts.map +1 -0
  412. package/dist/selection/selection-sheet.jsx +362 -0
  413. package/dist/selection/selection-sheet.jsx.map +1 -0
  414. package/dist/selection/selection.css +75 -0
  415. package/dist/selection/selection.css.map +1 -0
  416. package/dist/selection/use-selection-model.d.ts +9 -0
  417. package/dist/selection/use-selection-model.d.ts.map +1 -0
  418. package/dist/selection/use-selection-model.jsx +22 -0
  419. package/dist/selection/use-selection-model.jsx.map +1 -0
  420. package/dist/sheet/frame.d.ts +45 -0
  421. package/dist/sheet/frame.d.ts.map +1 -0
  422. package/dist/sheet/frame.jsx +205 -0
  423. package/dist/sheet/frame.jsx.map +1 -0
  424. package/dist/sheet/header.d.ts +35 -0
  425. package/dist/sheet/header.d.ts.map +1 -0
  426. package/dist/sheet/header.jsx +145 -0
  427. package/dist/sheet/header.jsx.map +1 -0
  428. package/dist/sheet/height-memo.d.ts +47 -0
  429. package/dist/sheet/height-memo.d.ts.map +1 -0
  430. package/dist/sheet/height-memo.jsx +100 -0
  431. package/dist/sheet/height-memo.jsx.map +1 -0
  432. package/dist/sheet/index.d.ts +11 -0
  433. package/dist/sheet/index.d.ts.map +1 -0
  434. package/dist/sheet/index.jsx +10 -0
  435. package/dist/sheet/loadable.d.ts +35 -0
  436. package/dist/sheet/loadable.d.ts.map +1 -0
  437. package/dist/sheet/loadable.jsx +65 -0
  438. package/dist/sheet/loadable.jsx.map +1 -0
  439. package/dist/sheet/options.d.ts +220 -0
  440. package/dist/sheet/options.d.ts.map +1 -0
  441. package/dist/sheet/options.jsx +91 -0
  442. package/dist/sheet/options.jsx.map +1 -0
  443. package/dist/sheet/processing.d.ts +22 -0
  444. package/dist/sheet/processing.d.ts.map +1 -0
  445. package/dist/sheet/processing.jsx +66 -0
  446. package/dist/sheet/processing.jsx.map +1 -0
  447. package/dist/sheet/service.d.ts +55 -0
  448. package/dist/sheet/service.d.ts.map +1 -0
  449. package/dist/sheet/service.jsx +143 -0
  450. package/dist/sheet/service.jsx.map +1 -0
  451. package/dist/sheet/sheet.css +195 -0
  452. package/dist/sheet/sheet.css.map +1 -0
  453. package/dist/sheet/sheet.d.ts +19 -0
  454. package/dist/sheet/sheet.d.ts.map +1 -0
  455. package/dist/sheet/sheet.jsx +40 -0
  456. package/dist/sheet/sheet.jsx.map +1 -0
  457. package/dist/sheet/sizing.d.ts +69 -0
  458. package/dist/sheet/sizing.d.ts.map +1 -0
  459. package/dist/sheet/sizing.jsx +146 -0
  460. package/dist/sheet/sizing.jsx.map +1 -0
  461. package/dist/sheet/stack.d.ts +161 -0
  462. package/dist/sheet/stack.d.ts.map +1 -0
  463. package/dist/sheet/stack.jsx +378 -0
  464. package/dist/sheet/stack.jsx.map +1 -0
  465. package/dist/swipe/index.d.ts +3 -0
  466. package/dist/swipe/index.d.ts.map +1 -0
  467. package/dist/swipe/index.jsx +2 -0
  468. package/dist/swipe/model.d.ts +72 -0
  469. package/dist/swipe/model.d.ts.map +1 -0
  470. package/dist/swipe/model.jsx +66 -0
  471. package/dist/swipe/model.jsx.map +1 -0
  472. package/dist/swipe/swipe-view.d.ts +40 -0
  473. package/dist/swipe/swipe-view.d.ts.map +1 -0
  474. package/dist/swipe/swipe-view.jsx +163 -0
  475. package/dist/swipe/swipe-view.jsx.map +1 -0
  476. package/dist/swipe/swipe.css +34 -0
  477. package/dist/swipe/swipe.css.map +1 -0
  478. package/dist/tab-bar/index.d.ts +4 -0
  479. package/dist/tab-bar/index.d.ts.map +1 -0
  480. package/dist/tab-bar/index.jsx +3 -0
  481. package/dist/tab-bar/metrics.d.ts +230 -0
  482. package/dist/tab-bar/metrics.d.ts.map +1 -0
  483. package/dist/tab-bar/metrics.jsx +221 -0
  484. package/dist/tab-bar/metrics.jsx.map +1 -0
  485. package/dist/tab-bar/model.d.ts +170 -0
  486. package/dist/tab-bar/model.d.ts.map +1 -0
  487. package/dist/tab-bar/model.jsx +349 -0
  488. package/dist/tab-bar/model.jsx.map +1 -0
  489. package/dist/tab-bar/tab-bar.css +173 -0
  490. package/dist/tab-bar/tab-bar.css.map +1 -0
  491. package/dist/tab-bar/tab-bar.d.ts +56 -0
  492. package/dist/tab-bar/tab-bar.d.ts.map +1 -0
  493. package/dist/tab-bar/tab-bar.jsx +343 -0
  494. package/dist/tab-bar/tab-bar.jsx.map +1 -0
  495. package/dist/tabs/index.d.ts +3 -0
  496. package/dist/tabs/index.d.ts.map +1 -0
  497. package/dist/tabs/index.jsx +2 -0
  498. package/dist/tabs/model.d.ts +83 -0
  499. package/dist/tabs/model.d.ts.map +1 -0
  500. package/dist/tabs/model.jsx +113 -0
  501. package/dist/tabs/model.jsx.map +1 -0
  502. package/dist/tabs/tab-view.d.ts +47 -0
  503. package/dist/tabs/tab-view.d.ts.map +1 -0
  504. package/dist/tabs/tab-view.jsx +227 -0
  505. package/dist/tabs/tab-view.jsx.map +1 -0
  506. package/dist/tabs/tabs.css +182 -0
  507. package/dist/tabs/tabs.css.map +1 -0
  508. package/dist/toast/index.d.ts +3 -0
  509. package/dist/toast/index.d.ts.map +1 -0
  510. package/dist/toast/index.jsx +2 -0
  511. package/dist/toast/service.d.ts +48 -0
  512. package/dist/toast/service.d.ts.map +1 -0
  513. package/dist/toast/service.jsx +201 -0
  514. package/dist/toast/service.jsx.map +1 -0
  515. package/dist/toast/store.d.ts +174 -0
  516. package/dist/toast/store.d.ts.map +1 -0
  517. package/dist/toast/store.jsx +353 -0
  518. package/dist/toast/store.jsx.map +1 -0
  519. package/dist/toast/toast.css +152 -0
  520. package/dist/toast/toast.css.map +1 -0
  521. package/dist/toggle/checkbox-math.d.ts +52 -0
  522. package/dist/toggle/checkbox-math.d.ts.map +1 -0
  523. package/dist/toggle/checkbox-math.jsx +111 -0
  524. package/dist/toggle/checkbox-math.jsx.map +1 -0
  525. package/dist/toggle/checkbox.d.ts +56 -0
  526. package/dist/toggle/checkbox.d.ts.map +1 -0
  527. package/dist/toggle/checkbox.jsx +152 -0
  528. package/dist/toggle/checkbox.jsx.map +1 -0
  529. package/dist/toggle/chip-group.d.ts +50 -0
  530. package/dist/toggle/chip-group.d.ts.map +1 -0
  531. package/dist/toggle/chip-group.jsx +107 -0
  532. package/dist/toggle/chip-group.jsx.map +1 -0
  533. package/dist/toggle/index.d.ts +5 -0
  534. package/dist/toggle/index.d.ts.map +1 -0
  535. package/dist/toggle/index.jsx +4 -0
  536. package/dist/toggle/switch.d.ts +52 -0
  537. package/dist/toggle/switch.d.ts.map +1 -0
  538. package/dist/toggle/switch.jsx +192 -0
  539. package/dist/toggle/switch.jsx.map +1 -0
  540. package/dist/toggle/toggle.css +189 -0
  541. package/dist/toggle/toggle.css.map +1 -0
  542. package/package.json +155 -4
  543. package/rspeedy/index.d.ts +21 -0
  544. package/rspeedy/index.mjs +75 -0
  545. package/rspeedy/index.test.mjs +52 -0
@@ -0,0 +1,82 @@
1
+ import { type G9CalendarSystem, type G9Culture, G9DateTimeDisplayFormat, G9DateTimePickerMode, type G9LocalDate, type G9LocalDateTime } from '@g9tm/lynxcontrols-foundation';
2
+ /** One wheel row: the value it stands for and its text. */
3
+ export interface G9WheelItem<V extends string | number = number> {
4
+ readonly value: V;
5
+ readonly text: string;
6
+ }
7
+ /** Year rows are a window of at most ±50 years around the selection (MAUI `YearWindowRadius`). */
8
+ export declare const g9YearWindowRadius = 50;
9
+ /** The calendar a picker shows: the explicit one, else Persian for a `fa` culture, else Gregorian (MAUI rule). */
10
+ export declare function resolvePickerCalendar(culture: G9Culture, calendar?: G9CalendarSystem | null): G9CalendarSystem;
11
+ /** A date-time with its time part (a plain date reads as midnight). */
12
+ export declare function asDateTime(value: G9LocalDate): G9LocalDateTime;
13
+ /**
14
+ * Min/max for a calendar: Persian bounds are pulled into the range the Persian calendar supports (from 0622-03-22),
15
+ * and an inverted pair is swapped.
16
+ */
17
+ export declare function normalizePickerBounds(min: G9LocalDate | null | undefined, max: G9LocalDate | null | undefined, calendar: G9CalendarSystem): {
18
+ min: G9LocalDateTime | null;
19
+ max: G9LocalDateTime | null;
20
+ };
21
+ /** Orders two date-times (date first, then time). */
22
+ export declare function compareDateTime(a: G9LocalDateTime, b: G9LocalDateTime): number;
23
+ /** Clamps a value into `[min, max]` (either bound optional) and, for Persian, into the supported range. */
24
+ export declare function clampPickerValue(value: G9LocalDateTime, bounds: {
25
+ min: G9LocalDateTime | null;
26
+ max: G9LocalDateTime | null;
27
+ }, calendar: G9CalendarSystem): G9LocalDateTime;
28
+ /** The value's parts in the picker calendar (what the day/month/year wheels show). */
29
+ export declare function pickerParts(value: G9LocalDateTime, calendar: G9CalendarSystem): {
30
+ year: number;
31
+ month: number;
32
+ day: number;
33
+ };
34
+ /**
35
+ * Builds the value from wheel parts: the day is clamped to the month's length (31 Farvardin → 30 Mehr, 29 Feb → 28
36
+ * in a common year, Esfand 30 → 29), then the result is clamped to the bounds.
37
+ */
38
+ export declare function composePickerValue(parts: {
39
+ year: number;
40
+ month: number;
41
+ day: number;
42
+ hour: number;
43
+ minute: number;
44
+ }, calendar: G9CalendarSystem, bounds: {
45
+ min: G9LocalDateTime | null;
46
+ max: G9LocalDateTime | null;
47
+ }): G9LocalDateTime;
48
+ /** Day rows 1…count (two digits, native numerals). */
49
+ export declare function dayWheelItems(count: number, culture: G9Culture): G9WheelItem[];
50
+ /** Month rows with the calendar's month names. */
51
+ export declare function monthWheelItems(calendar: G9CalendarSystem, culture: G9Culture): G9WheelItem[];
52
+ /**
53
+ * The year window (MAUI `BuildYears`): ±{@link g9YearWindowRadius} around `year`, inside the bounds' years (and the
54
+ * calendar's 1…9999 range).
55
+ */
56
+ export declare function yearWindow(year: number, minYear: number | null, maxYear: number | null): {
57
+ from: number;
58
+ to: number;
59
+ };
60
+ /** Year rows `from…to` (four digits, native numerals). */
61
+ export declare function yearWheelItems(from: number, to: number, culture: G9Culture): G9WheelItem[];
62
+ /** Hour rows 0…23: `HH`, or `hh tt` in 12-hour display (MAUI `BuildHours`). */
63
+ export declare function hourWheelItems(twentyFourHour: boolean, culture: G9Culture): G9WheelItem[];
64
+ /** Minute rows 0…59. */
65
+ export declare function minuteWheelItems(culture: G9Culture): G9WheelItem[];
66
+ /** Options of {@link formatPickerValue}. */
67
+ export interface G9PickerFormatOptions {
68
+ readonly mode?: G9DateTimePickerMode;
69
+ readonly displayFormat?: G9DateTimeDisplayFormat;
70
+ readonly twentyFourHour?: boolean;
71
+ readonly calendar?: G9CalendarSystem | null;
72
+ /** Text of the `'custom'` format (MAUI `FormattedDisplayText`); blank falls back to the short date. */
73
+ readonly customText?: string | null;
74
+ }
75
+ /**
76
+ * The trigger and preview text (MAUI `FormatValue`). Gregorian: short `d MMM yyyy`, long `MMMM d, yyyy`, time
77
+ * `HH:mm`/`hh:mm tt`, short date-time `d MMM yyyy, HH:mm`, long date-time `MMMM d, yyyy, hh:mm tt`. Persian:
78
+ * `dd MMMM yyyy` and `{date}، {time}` (a date the Persian calendar cannot hold is written Gregorian). The `'time'`
79
+ * mode always shows the time; `'custom'` shows `customText`.
80
+ */
81
+ export declare function formatPickerValue(value: G9LocalDate, culture: G9Culture, options?: G9PickerFormatOptions): string;
82
+ //# sourceMappingURL=date-time.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-time.d.ts","sourceRoot":"","sources":["../../src/pickers/date-time.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,130 @@
1
+ import { G9DateTimeDisplayFormat, G9DateTimePickerMode, clampToPersianRange, compareLocal, daysInMonth, formatLocalDateTime, fromCalendarDate, getMonthNames, isPersianLanguage, isSupportedByPersianCalendar, localDateTime, toCalendarDate, toNativeDigits } from "@g9tm/lynxcontrols-foundation";
2
+ const g9YearWindowRadius = 50;
3
+ function resolvePickerCalendar(culture, calendar) {
4
+ if (calendar) return calendar;
5
+ return isPersianLanguage(culture) ? 'persian' : 'gregorian';
6
+ }
7
+ function asDateTime(value) {
8
+ var _t_hour, _t_minute, _t_second, _t_millisecond;
9
+ const t = value;
10
+ return localDateTime(value.year, value.month, value.day, null != (_t_hour = t.hour) ? _t_hour : 0, null != (_t_minute = t.minute) ? _t_minute : 0, null != (_t_second = t.second) ? _t_second : 0, null != (_t_millisecond = t.millisecond) ? _t_millisecond : 0);
11
+ }
12
+ function normalizePickerBounds(min, max, calendar) {
13
+ let lo = min ? asDateTime(min) : null;
14
+ let hi = max ? asDateTime(max) : null;
15
+ if ('persian' === calendar) {
16
+ lo = lo ? clampToPersianRange(lo) : null;
17
+ hi = hi ? clampToPersianRange(hi) : null;
18
+ }
19
+ if (lo && hi && compareDateTime(lo, hi) > 0) [lo, hi] = [
20
+ hi,
21
+ lo
22
+ ];
23
+ return {
24
+ min: lo,
25
+ max: hi
26
+ };
27
+ }
28
+ function compareDateTime(a, b) {
29
+ const d = compareLocal(a, b);
30
+ if (0 !== d) return d;
31
+ return 3600000 * a.hour + 60000 * a.minute + 1000 * a.second + a.millisecond - (3600000 * b.hour + 60000 * b.minute + 1000 * b.second + b.millisecond);
32
+ }
33
+ function clampPickerValue(value, bounds, calendar) {
34
+ let v = 'persian' === calendar ? clampToPersianRange(value) : value;
35
+ if (bounds.min && compareDateTime(v, bounds.min) < 0) v = bounds.min;
36
+ if (bounds.max && compareDateTime(v, bounds.max) > 0) v = bounds.max;
37
+ return v;
38
+ }
39
+ function pickerParts(value, calendar) {
40
+ const c = toCalendarDate(value, calendar);
41
+ return {
42
+ year: c.year,
43
+ month: c.month,
44
+ day: c.day
45
+ };
46
+ }
47
+ function composePickerValue(parts, calendar, bounds) {
48
+ const day = Math.min(parts.day, daysInMonth(calendar, parts.year, parts.month));
49
+ const date = fromCalendarDate({
50
+ calendar,
51
+ year: parts.year,
52
+ month: parts.month,
53
+ day
54
+ });
55
+ return clampPickerValue(localDateTime(date.year, date.month, date.day, parts.hour, parts.minute), bounds, calendar);
56
+ }
57
+ const digits = (culture, n, width)=>toNativeDigits(String(n).padStart(width, '0'), culture.numberingSystem);
58
+ function dayWheelItems(count, culture) {
59
+ return Array.from({
60
+ length: count
61
+ }, (_, i)=>({
62
+ value: i + 1,
63
+ text: digits(culture, i + 1, 2)
64
+ }));
65
+ }
66
+ function monthWheelItems(calendar, culture) {
67
+ return getMonthNames(calendar, culture).map((text, i)=>({
68
+ value: i + 1,
69
+ text
70
+ }));
71
+ }
72
+ function yearWindow(year, minYear, maxYear) {
73
+ const lo = Math.max(1, null != minYear ? minYear : 1);
74
+ const hi = Math.min(9999, null != maxYear ? maxYear : 9999);
75
+ return {
76
+ from: Math.max(lo, year - g9YearWindowRadius),
77
+ to: Math.min(hi, year + g9YearWindowRadius)
78
+ };
79
+ }
80
+ function yearWheelItems(from, to, culture) {
81
+ return Array.from({
82
+ length: Math.max(0, to - from + 1)
83
+ }, (_, i)=>({
84
+ value: from + i,
85
+ text: digits(culture, from + i, 4)
86
+ }));
87
+ }
88
+ function hourWheelItems(twentyFourHour, culture) {
89
+ return Array.from({
90
+ length: 24
91
+ }, (_, h)=>({
92
+ value: h,
93
+ text: formatLocalDateTime(localDateTime(2000, 1, 1, h), twentyFourHour ? 'HH' : 'hh tt', culture, {
94
+ calendar: 'gregorian'
95
+ })
96
+ }));
97
+ }
98
+ function minuteWheelItems(culture) {
99
+ return Array.from({
100
+ length: 60
101
+ }, (_, m)=>({
102
+ value: m,
103
+ text: digits(culture, m, 2)
104
+ }));
105
+ }
106
+ function formatPickerValue(value, culture, options = {}) {
107
+ var _options_displayFormat;
108
+ const format = null != (_options_displayFormat = options.displayFormat) ? _options_displayFormat : G9DateTimeDisplayFormat.ShortDate;
109
+ if (format === G9DateTimeDisplayFormat.Custom && options.customText && '' !== options.customText.trim()) return options.customText;
110
+ const v = asDateTime(value);
111
+ const time = options.twentyFourHour ? 'HH:mm' : 'hh:mm tt';
112
+ const calendar = resolvePickerCalendar(culture, options.calendar);
113
+ const effective = options.mode === G9DateTimePickerMode.Time ? G9DateTimeDisplayFormat.TimeOnly : format;
114
+ if ('persian' === calendar && isSupportedByPersianCalendar(v)) {
115
+ const fmt = (p)=>formatLocalDateTime(v, p, culture, {
116
+ calendar: 'persian'
117
+ });
118
+ const date = fmt('dd MMMM yyyy');
119
+ if (effective === G9DateTimeDisplayFormat.TimeOnly) return fmt(time);
120
+ if (effective === G9DateTimeDisplayFormat.ShortDateTime || effective === G9DateTimeDisplayFormat.LongDateTime) return `${date}، ${fmt(time)}`;
121
+ return date;
122
+ }
123
+ const pattern = effective === G9DateTimeDisplayFormat.LongDate ? 'MMMM d, yyyy' : effective === G9DateTimeDisplayFormat.TimeOnly ? time : effective === G9DateTimeDisplayFormat.ShortDateTime ? 'd MMM yyyy, HH:mm' : effective === G9DateTimeDisplayFormat.LongDateTime ? 'MMMM d, yyyy, hh:mm tt' : 'd MMM yyyy';
124
+ return formatLocalDateTime(v, pattern, culture, {
125
+ calendar: 'gregorian'
126
+ });
127
+ }
128
+ export { asDateTime, clampPickerValue, compareDateTime, composePickerValue, dayWheelItems, formatPickerValue, g9YearWindowRadius, hourWheelItems, minuteWheelItems, monthWheelItems, normalizePickerBounds, pickerParts, resolvePickerCalendar, yearWheelItems, yearWindow };
129
+
130
+ //# sourceMappingURL=date-time.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pickers/date-time.jsx","sources":["../../src/pickers/date-time.ts"],"sourcesContent":["import {\n clampToPersianRange,\n compareLocal,\n daysInMonth,\n formatLocalDateTime,\n fromCalendarDate,\n type G9CalendarSystem,\n type G9Culture,\n G9DateTimeDisplayFormat,\n G9DateTimePickerMode,\n type G9LocalDate,\n type G9LocalDateTime,\n getMonthNames,\n isPersianLanguage,\n isSupportedByPersianCalendar,\n localDateTime,\n toCalendarDate,\n toNativeDigits,\n} from '@g9tm/lynxcontrols-foundation';\n\n// Date math and text of the date/time picker (MAUI `G9DateTimePicker` + `G9DateTimePickerSheet`), Intl-free: every\n// calendar step goes through the foundation calendar functions.\n\n/** One wheel row: the value it stands for and its text. */\nexport interface G9WheelItem<V extends string | number = number> {\n readonly value: V;\n readonly text: string;\n}\n\n/** Year rows are a window of at most ±50 years around the selection (MAUI `YearWindowRadius`). */\nexport const g9YearWindowRadius = 50;\n\n/** The calendar a picker shows: the explicit one, else Persian for a `fa` culture, else Gregorian (MAUI rule). */\nexport function resolvePickerCalendar(culture: G9Culture, calendar?: G9CalendarSystem | null): G9CalendarSystem {\n if (calendar) return calendar;\n return isPersianLanguage(culture) ? 'persian' : 'gregorian';\n}\n\n/** A date-time with its time part (a plain date reads as midnight). */\nexport function asDateTime(value: G9LocalDate): G9LocalDateTime {\n const t = value as Partial<G9LocalDateTime>;\n return localDateTime(\n value.year,\n value.month,\n value.day,\n t.hour ?? 0,\n t.minute ?? 0,\n t.second ?? 0,\n t.millisecond ?? 0,\n );\n}\n\n/**\n * Min/max for a calendar: Persian bounds are pulled into the range the Persian calendar supports (from 0622-03-22),\n * and an inverted pair is swapped.\n */\nexport function normalizePickerBounds(\n min: G9LocalDate | null | undefined,\n max: G9LocalDate | null | undefined,\n calendar: G9CalendarSystem,\n): { min: G9LocalDateTime | null; max: G9LocalDateTime | null } {\n let lo = min ? asDateTime(min) : null;\n let hi = max ? asDateTime(max) : null;\n if (calendar === 'persian') {\n lo = lo ? clampToPersianRange(lo) : null;\n hi = hi ? clampToPersianRange(hi) : null;\n }\n if (lo && hi && compareDateTime(lo, hi) > 0) [lo, hi] = [hi, lo];\n return { min: lo, max: hi };\n}\n\n/** Orders two date-times (date first, then time). */\nexport function compareDateTime(a: G9LocalDateTime, b: G9LocalDateTime): number {\n const d = compareLocal(a, b);\n if (d !== 0) return d;\n return (\n a.hour * 3_600_000 +\n a.minute * 60_000 +\n a.second * 1000 +\n a.millisecond -\n (b.hour * 3_600_000 + b.minute * 60_000 + b.second * 1000 + b.millisecond)\n );\n}\n\n/** Clamps a value into `[min, max]` (either bound optional) and, for Persian, into the supported range. */\nexport function clampPickerValue(\n value: G9LocalDateTime,\n bounds: { min: G9LocalDateTime | null; max: G9LocalDateTime | null },\n calendar: G9CalendarSystem,\n): G9LocalDateTime {\n let v = calendar === 'persian' ? clampToPersianRange(value) : value;\n if (bounds.min && compareDateTime(v, bounds.min) < 0) v = bounds.min;\n if (bounds.max && compareDateTime(v, bounds.max) > 0) v = bounds.max;\n return v;\n}\n\n/** The value's parts in the picker calendar (what the day/month/year wheels show). */\nexport function pickerParts(\n value: G9LocalDateTime,\n calendar: G9CalendarSystem,\n): {\n year: number;\n month: number;\n day: number;\n} {\n const c = toCalendarDate(value, calendar);\n return { year: c.year, month: c.month, day: c.day };\n}\n\n/**\n * Builds the value from wheel parts: the day is clamped to the month's length (31 Farvardin → 30 Mehr, 29 Feb → 28\n * in a common year, Esfand 30 → 29), then the result is clamped to the bounds.\n */\nexport function composePickerValue(\n parts: { year: number; month: number; day: number; hour: number; minute: number },\n calendar: G9CalendarSystem,\n bounds: { min: G9LocalDateTime | null; max: G9LocalDateTime | null },\n): G9LocalDateTime {\n const day = Math.min(parts.day, daysInMonth(calendar, parts.year, parts.month));\n const date = fromCalendarDate({ calendar, year: parts.year, month: parts.month, day });\n return clampPickerValue(localDateTime(date.year, date.month, date.day, parts.hour, parts.minute), bounds, calendar);\n}\n\nconst digits = (culture: G9Culture, n: number, width: number) =>\n toNativeDigits(String(n).padStart(width, '0'), culture.numberingSystem);\n\n/** Day rows 1…count (two digits, native numerals). */\nexport function dayWheelItems(count: number, culture: G9Culture): G9WheelItem[] {\n return Array.from({ length: count }, (_, i) => ({ value: i + 1, text: digits(culture, i + 1, 2) }));\n}\n\n/** Month rows with the calendar's month names. */\nexport function monthWheelItems(calendar: G9CalendarSystem, culture: G9Culture): G9WheelItem[] {\n return getMonthNames(calendar, culture).map((text, i) => ({ value: i + 1, text }));\n}\n\n/**\n * The year window (MAUI `BuildYears`): ±{@link g9YearWindowRadius} around `year`, inside the bounds' years (and the\n * calendar's 1…9999 range).\n */\nexport function yearWindow(year: number, minYear: number | null, maxYear: number | null): { from: number; to: number } {\n const lo = Math.max(1, minYear ?? 1);\n const hi = Math.min(9999, maxYear ?? 9999);\n return { from: Math.max(lo, year - g9YearWindowRadius), to: Math.min(hi, year + g9YearWindowRadius) };\n}\n\n/** Year rows `from…to` (four digits, native numerals). */\nexport function yearWheelItems(from: number, to: number, culture: G9Culture): G9WheelItem[] {\n return Array.from({ length: Math.max(0, to - from + 1) }, (_, i) => ({\n value: from + i,\n text: digits(culture, from + i, 4),\n }));\n}\n\n/** Hour rows 0…23: `HH`, or `hh tt` in 12-hour display (MAUI `BuildHours`). */\nexport function hourWheelItems(twentyFourHour: boolean, culture: G9Culture): G9WheelItem[] {\n return Array.from({ length: 24 }, (_, h) => ({\n value: h,\n text: formatLocalDateTime(localDateTime(2000, 1, 1, h), twentyFourHour ? 'HH' : 'hh tt', culture, {\n calendar: 'gregorian',\n }),\n }));\n}\n\n/** Minute rows 0…59. */\nexport function minuteWheelItems(culture: G9Culture): G9WheelItem[] {\n return Array.from({ length: 60 }, (_, m) => ({ value: m, text: digits(culture, m, 2) }));\n}\n\n/** Options of {@link formatPickerValue}. */\nexport interface G9PickerFormatOptions {\n readonly mode?: G9DateTimePickerMode;\n readonly displayFormat?: G9DateTimeDisplayFormat;\n readonly twentyFourHour?: boolean;\n readonly calendar?: G9CalendarSystem | null;\n /** Text of the `'custom'` format (MAUI `FormattedDisplayText`); blank falls back to the short date. */\n readonly customText?: string | null;\n}\n\n/**\n * The trigger and preview text (MAUI `FormatValue`). Gregorian: short `d MMM yyyy`, long `MMMM d, yyyy`, time\n * `HH:mm`/`hh:mm tt`, short date-time `d MMM yyyy, HH:mm`, long date-time `MMMM d, yyyy, hh:mm tt`. Persian:\n * `dd MMMM yyyy` and `{date}، {time}` (a date the Persian calendar cannot hold is written Gregorian). The `'time'`\n * mode always shows the time; `'custom'` shows `customText`.\n */\nexport function formatPickerValue(value: G9LocalDate, culture: G9Culture, options: G9PickerFormatOptions = {}): string {\n const format = options.displayFormat ?? G9DateTimeDisplayFormat.ShortDate;\n if (format === G9DateTimeDisplayFormat.Custom && options.customText && options.customText.trim() !== '') {\n return options.customText;\n }\n const v = asDateTime(value);\n const time = options.twentyFourHour ? 'HH:mm' : 'hh:mm tt';\n const calendar = resolvePickerCalendar(culture, options.calendar);\n const effective = options.mode === G9DateTimePickerMode.Time ? G9DateTimeDisplayFormat.TimeOnly : format;\n if (calendar === 'persian' && isSupportedByPersianCalendar(v)) {\n const fmt = (p: string) => formatLocalDateTime(v, p, culture, { calendar: 'persian' });\n const date = fmt('dd MMMM yyyy');\n if (effective === G9DateTimeDisplayFormat.TimeOnly) return fmt(time);\n if (effective === G9DateTimeDisplayFormat.ShortDateTime || effective === G9DateTimeDisplayFormat.LongDateTime) {\n return `${date}، ${fmt(time)}`;\n }\n return date;\n }\n const pattern =\n effective === G9DateTimeDisplayFormat.LongDate\n ? 'MMMM d, yyyy'\n : effective === G9DateTimeDisplayFormat.TimeOnly\n ? time\n : effective === G9DateTimeDisplayFormat.ShortDateTime\n ? 'd MMM yyyy, HH:mm'\n : effective === G9DateTimeDisplayFormat.LongDateTime\n ? 'MMMM d, yyyy, hh:mm tt'\n : 'd MMM yyyy';\n return formatLocalDateTime(v, pattern, culture, { calendar: 'gregorian' });\n}\n"],"names":["g9YearWindowRadius","resolvePickerCalendar","culture","calendar","isPersianLanguage","asDateTime","value","_t_hour","_t_minute","_t_second","_t_millisecond","t","localDateTime","normalizePickerBounds","min","max","lo","hi","clampToPersianRange","compareDateTime","a","b","d","compareLocal","clampPickerValue","bounds","v","pickerParts","c","toCalendarDate","composePickerValue","parts","day","Math","daysInMonth","date","fromCalendarDate","digits","n","width","toNativeDigits","String","dayWheelItems","count","Array","_","i","monthWheelItems","getMonthNames","text","yearWindow","year","minYear","maxYear","yearWheelItems","from","to","hourWheelItems","twentyFourHour","h","formatLocalDateTime","minuteWheelItems","m","formatPickerValue","options","_options_displayFormat","format","G9DateTimeDisplayFormat","time","effective","G9DateTimePickerMode","isSupportedByPersianCalendar","fmt","p","pattern"],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export { G9ComboBox, type G9ComboBoxProps, g9ComboMaxChips, sameSelectionKeys } from './combo-box.js';
2
+ export { asDateTime, clampPickerValue, compareDateTime, composePickerValue, dayWheelItems, formatPickerValue, type G9PickerFormatOptions, type G9WheelItem, g9YearWindowRadius, hourWheelItems, minuteWheelItems, monthWheelItems, normalizePickerBounds, pickerParts, resolvePickerCalendar, yearWheelItems, yearWindow, } from './date-time.js';
3
+ export { DateTimeSheetBody, G9DateTimePicker, type G9DateTimePickerProps, g9YearWindowStep } from './date-time-picker.js';
4
+ export { G9Picker, type G9PickerProps } from './picker.js';
5
+ export { type G9PickerSheetBodyProps, PickerSheetHeader, showPickerSheet } from './picker-sheet.js';
6
+ export { composeTimeSpan, formatTimeSpan, type G9TimeSpanParts, G9TimeSpanPickerMode, g9TimeSpanDefaultMaxDays, g9TimeSpanMaxYears, timeSpanDepth, timeSpanParts, } from './timespan.js';
7
+ export { G9TimeSpanPicker, type G9TimeSpanPickerProps, TimeSpanSheetBody } from './timespan-picker.js';
8
+ export { type G9PickerFieldProps, PickerField, SelectionValueIcon, usePickerOpen, valueDirectionClass, } from './trigger.js';
9
+ export { G9WheelColumn, type G9WheelColumnProps, g9WheelRowHeight, g9WheelVisibleRows, wheelIndexAt, } from './wheel-column.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pickers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACnG,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,KAAK,qBAAqB,EAC1B,KAAK,WAAW,EAChB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,qBAAqB,EACrB,WAAW,EACX,qBAAqB,EACrB,cAAc,EACd,UAAU,GACX,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACvH,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EAAE,KAAK,sBAAsB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjG,OAAO,EACL,eAAe,EACf,cAAc,EACd,KAAK,eAAe,EACpB,oBAAoB,EACpB,wBAAwB,EACxB,kBAAkB,EAClB,aAAa,EACb,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACpG,OAAO,EACL,KAAK,kBAAkB,EACvB,WAAW,EACX,kBAAkB,EAClB,aAAa,EACb,mBAAmB,GACpB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,aAAa,EACb,KAAK,kBAAkB,EACvB,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,GACb,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,9 @@
1
+ export { G9ComboBox, g9ComboMaxChips, sameSelectionKeys } from "./combo-box.jsx";
2
+ export { asDateTime, clampPickerValue, compareDateTime, composePickerValue, dayWheelItems, formatPickerValue, g9YearWindowRadius, hourWheelItems, minuteWheelItems, monthWheelItems, normalizePickerBounds, pickerParts, resolvePickerCalendar, yearWheelItems, yearWindow } from "./date-time.jsx";
3
+ export { DateTimeSheetBody, G9DateTimePicker, g9YearWindowStep } from "./date-time-picker.jsx";
4
+ export { G9Picker } from "./picker.jsx";
5
+ export { PickerSheetHeader, showPickerSheet } from "./picker-sheet.jsx";
6
+ export { G9TimeSpanPickerMode, composeTimeSpan, formatTimeSpan, g9TimeSpanDefaultMaxDays, g9TimeSpanMaxYears, timeSpanDepth, timeSpanParts } from "./timespan.jsx";
7
+ export { G9TimeSpanPicker, TimeSpanSheetBody } from "./timespan-picker.jsx";
8
+ export { PickerField, SelectionValueIcon, usePickerOpen, valueDirectionClass } from "./trigger.jsx";
9
+ export { G9WheelColumn, g9WheelRowHeight, g9WheelVisibleRows, wheelIndexAt } from "./wheel-column.jsx";
@@ -0,0 +1,21 @@
1
+ import './pickers.css';
2
+ import type { ReactNode } from '@lynx-js/react';
3
+ import type { G9SheetService } from '../sheet/service.js';
4
+ /** Props a drum sheet body receives: finish with a value (Done) or without (Cancel). */
5
+ export interface G9PickerSheetBodyProps<T> {
6
+ readonly done: (value: T) => void;
7
+ readonly cancel: () => void;
8
+ }
9
+ /**
10
+ * Opens a fit-to-content drum sheet (MAUI `G9DateTimePickerSheet.ShowAsync` / `G9TimeSpanPickerSheet.ShowAsync`) and
11
+ * resolves the value Done returned, or `null` for Cancel, any dismissal, or a throttled open. The body is built after
12
+ * the open motion and revealed as one settled unit (`fadeDeferredContentIn`, MAUI's crossfade).
13
+ */
14
+ export declare function showPickerSheet<T>(sheets: G9SheetService, body: (props: G9PickerSheetBodyProps<T>) => ReactNode): Promise<T | null>;
15
+ /** The drum sheet header (MAUI): Cancel, the title, Done. */
16
+ export declare function PickerSheetHeader(props: {
17
+ readonly title: string;
18
+ readonly onCancel: () => void;
19
+ readonly onDone: () => void;
20
+ }): ReactNode;
21
+ //# sourceMappingURL=picker-sheet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"picker-sheet.d.ts","sourceRoot":"","sources":["../../src/pickers/picker-sheet.tsx"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAMhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,wFAAwF;AACxF,MAAM,WAAW,sBAAsB,CAAC,CAAC;IACvC,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,CAAC,EACrC,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC,CAAC,KAAK,SAAS,GACpD,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAqBnB;AAED,6DAA6D;AAC7D,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC;CAC7B,GAAG,SAAS,CA8BZ"}
@@ -0,0 +1,61 @@
1
+ import "./pickers.css";
2
+ import { G9StringKey } from "@g9tm/lynxcontrols-foundation";
3
+ import { g9RowStyle } from "../base/control.jsx";
4
+ import { useG9Press } from "../base/press.jsx";
5
+ import { useG9Direction, useG9Strings } from "../provider/hooks.jsx";
6
+ import { useG9SheetContext } from "../sheet/frame.jsx";
7
+ import { fitToContentSheetOptions } from "../sheet/options.jsx";
8
+ async function showPickerSheet(sheets, body) {
9
+ let result = null;
10
+ let finished = false;
11
+ const Body = ()=>{
12
+ var _useG9SheetContext;
13
+ const handle = null == (_useG9SheetContext = useG9SheetContext()) ? void 0 : _useG9SheetContext.handle;
14
+ const finish = (value)=>{
15
+ if (finished) return;
16
+ finished = true;
17
+ result = value;
18
+ null == handle || handle.close();
19
+ };
20
+ return body({
21
+ done: (v)=>finish(v),
22
+ cancel: ()=>finish(null)
23
+ });
24
+ };
25
+ const handle = sheets.show(()=><Body/>, {
26
+ ...fitToContentSheetOptions(),
27
+ fadeDeferredContentIn: true,
28
+ loadingSkeleton: 'none'
29
+ });
30
+ if (!handle) return null;
31
+ await handle.result;
32
+ return result;
33
+ }
34
+ function PickerSheetHeader(props) {
35
+ const strings = useG9Strings();
36
+ const direction = useG9Direction();
37
+ const cancel = useG9Press(props.onCancel, {
38
+ source: 'G9PickerSheet',
39
+ guardMs: 0
40
+ });
41
+ const done = useG9Press(props.onDone, {
42
+ source: 'G9PickerSheet',
43
+ guardMs: 0
44
+ });
45
+ return <view className="g9-picker-sheet__header" style={g9RowStyle(direction)}>
46
+ <view className="g9-picker-sheet__action g9-picker-sheet__cancel" accessibility-element={true} accessibility-traits="button" bindtap={cancel}>
47
+ <text className="g9-picker-sheet__action-text">{strings.get(G9StringKey.Cancel)}</text>
48
+ </view>
49
+ <text className="g9-picker-sheet__title" text-maxline="1">
50
+ {props.title}
51
+ </text>
52
+ <view className="g9-picker-sheet__action g9-picker-sheet__done" accessibility-element={true} accessibility-traits="button" bindtap={done}>
53
+ <text className="g9-picker-sheet__action-text g9-picker-sheet__action-text--done">
54
+ {strings.get(G9StringKey.Done)}
55
+ </text>
56
+ </view>
57
+ </view>;
58
+ }
59
+ export { PickerSheetHeader, showPickerSheet };
60
+
61
+ //# sourceMappingURL=picker-sheet.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pickers/picker-sheet.jsx","sources":["../../src/pickers/picker-sheet.tsx"],"sourcesContent":["import './pickers.css';\nimport { G9StringKey } from '@g9tm/lynxcontrols-foundation';\nimport type { ReactNode } from '@lynx-js/react';\nimport { g9RowStyle } from '../base/control';\nimport { useG9Press } from '../base/press';\nimport { useG9Direction, useG9Strings } from '../provider/hooks';\nimport { useG9SheetContext } from '../sheet/frame';\nimport { fitToContentSheetOptions } from '../sheet/options';\nimport type { G9SheetService } from '../sheet/service';\n\n/** Props a drum sheet body receives: finish with a value (Done) or without (Cancel). */\nexport interface G9PickerSheetBodyProps<T> {\n readonly done: (value: T) => void;\n readonly cancel: () => void;\n}\n\n/**\n * Opens a fit-to-content drum sheet (MAUI `G9DateTimePickerSheet.ShowAsync` / `G9TimeSpanPickerSheet.ShowAsync`) and\n * resolves the value Done returned, or `null` for Cancel, any dismissal, or a throttled open. The body is built after\n * the open motion and revealed as one settled unit (`fadeDeferredContentIn`, MAUI's crossfade).\n */\nexport async function showPickerSheet<T>(\n sheets: G9SheetService,\n body: (props: G9PickerSheetBodyProps<T>) => ReactNode,\n): Promise<T | null> {\n let result: T | null = null;\n let finished = false;\n const Body = () => {\n const handle = useG9SheetContext()?.handle;\n const finish = (value: T | null) => {\n if (finished) return;\n finished = true;\n result = value;\n handle?.close();\n };\n return body({ done: (v) => finish(v), cancel: () => finish(null) });\n };\n const handle = sheets.show(() => <Body />, {\n ...fitToContentSheetOptions(),\n fadeDeferredContentIn: true,\n loadingSkeleton: 'none',\n });\n if (!handle) return null;\n await handle.result;\n return result;\n}\n\n/** The drum sheet header (MAUI): Cancel, the title, Done. */\nexport function PickerSheetHeader(props: {\n readonly title: string;\n readonly onCancel: () => void;\n readonly onDone: () => void;\n}): ReactNode {\n const strings = useG9Strings();\n const direction = useG9Direction();\n const cancel = useG9Press(props.onCancel, { source: 'G9PickerSheet', guardMs: 0 });\n const done = useG9Press(props.onDone, { source: 'G9PickerSheet', guardMs: 0 });\n return (\n <view className=\"g9-picker-sheet__header\" style={g9RowStyle(direction)}>\n <view\n className=\"g9-picker-sheet__action g9-picker-sheet__cancel\"\n accessibility-element={true}\n accessibility-traits=\"button\"\n bindtap={cancel}\n >\n <text className=\"g9-picker-sheet__action-text\">{strings.get(G9StringKey.Cancel)}</text>\n </view>\n <text className=\"g9-picker-sheet__title\" text-maxline=\"1\">\n {props.title}\n </text>\n <view\n className=\"g9-picker-sheet__action g9-picker-sheet__done\"\n accessibility-element={true}\n accessibility-traits=\"button\"\n bindtap={done}\n >\n <text className=\"g9-picker-sheet__action-text g9-picker-sheet__action-text--done\">\n {strings.get(G9StringKey.Done)}\n </text>\n </view>\n </view>\n );\n}\n"],"names":["showPickerSheet","sheets","body","result","finished","Body","_useG9SheetContext","handle","finish","value","v","fitToContentSheetOptions","PickerSheetHeader","props","strings","useG9Strings","direction","useG9Direction","cancel","useG9Press","done","view","g9RowStyle","text","G9StringKey"],"mappings":";;;;;;;AAqBO,eAAeA,gBACpBC,MAAsB,EACtBC,IAAqD;IAErD,IAAIC,SAAmB;IACvB,IAAIC,WAAW;IACf,MAAMC,OAAO;YACIC;QAAf,MAAMC,SAAS,QAAAD,CAAAA,qBAAAA,mBAAkB,IAAlBA,KAAAA,IAAAA,mBAAqB,MAAM;QAC1C,MAAME,SAAS,CAACC;YACd,IAAIL,UAAU;YACdA,WAAW;YACXD,SAASM;YACTF,QAAAA,UAAAA,OAAQ,KAAK;QACf;QACA,OAAOL,KAAK;YAAE,MAAM,CAACQ,IAAMF,OAAOE;YAAI,QAAQ,IAAMF,OAAO;QAAM;IACnE;IACA,MAAMD,SAASN,OAAO,IAAI,CAAC,KAAOI,QAAS;QACzC,GAAGM,0BAA0B;QAC7B,uBAAuB;QACvB,iBAAiB;IACnB;IACA,IAAI,CAACJ,QAAQ,OAAO;IACpB,MAAMA,OAAO,MAAM;IACnB,OAAOJ;AACT;AAGO,SAASS,kBAAkBC,KAIjC;IACC,MAAMC,UAAUC;IAChB,MAAMC,YAAYC;IAClB,MAAMC,SAASC,WAAWN,MAAM,QAAQ,EAAE;QAAE,QAAQ;QAAiB,SAAS;IAAE;IAChF,MAAMO,OAAOD,WAAWN,MAAM,MAAM,EAAE;QAAE,QAAQ;QAAiB,SAAS;IAAE;IAC5E,QACGQ,KAAK,UAAU,0BAA0B,OAAOC,WAAWN,YAAY;MACtE,CAACK,KACC,UAAU,kDACV,uBAAuB,MACvB,qBAAqB,SACrB,SAASH,QACV;QACC,CAACK,KAAK,UAAU,gCAAgCT,QAAQ,GAAG,CAACU,YAAY,MAAM,IAAID,KAAK;MACzF,EAAEF,KAAK;MACP,CAACE,KAAK,UAAU,yBAAyB,aAAa,IAAI;QACxD,CAACV,MAAM,KAAK,CAAC;MACf,EAAEU,KAAK;MACP,CAACF,KACC,UAAU,gDACV,uBAAuB,MACvB,qBAAqB,SACrB,SAASD,MACV;QACC,CAACG,KAAK,UAAU,kEAAkE;UAChF,CAACT,QAAQ,GAAG,CAACU,YAAY,IAAI,EAAE;QACjC,EAAED,KAAK;MACT,EAAEF,KAAK;IACT,EAAEA;AAEN"}
@@ -0,0 +1,32 @@
1
+ import './pickers.css';
2
+ import { type ReactNode } from '@lynx-js/react';
3
+ import { type G9SelectionItem } from '../base/selection-item.js';
4
+ import { type G9PickerFieldProps } from './trigger.js';
5
+ /** Props of {@link G9Picker}. */
6
+ export interface G9PickerProps<T extends G9SelectionItem = G9SelectionItem> extends G9PickerFieldProps {
7
+ /** The rows of the sheet (MAUI `ItemsSource`). Disabled items are left out except the selected one. */
8
+ readonly items: ReadonlyArray<T>;
9
+ /** Selected item key (`selectionKey`: key, else text); `null` = none. Controlled with `onValueChange`. */
10
+ readonly value?: string | null;
11
+ readonly defaultValue?: string | null;
12
+ /** The selection changed: by a pick, or by `restoreOnCancel` putting back the opening value. */
13
+ readonly onValueChange?: (key: string | null, item: T | null) => void;
14
+ /** Sheet title; default the label, else the placeholder (MAUI `SheetTitle`). */
15
+ readonly sheetTitle?: string | null;
16
+ /**
17
+ * Default true (MAUI `RestoreOnCancel`): a dismissed sheet puts back the value the picker had when it opened (if it
18
+ * changed meanwhile) and reports `onSelectionCancelled`. False leaves the current value and reports nothing.
19
+ */
20
+ readonly restoreOnCancel?: boolean;
21
+ /** A row was picked (MAUI `ItemSelected` + `SelectionAcceptedCommand`); only for a pick, never for a dismissal. */
22
+ readonly onItemSelected?: (item: T) => void;
23
+ /** The sheet was dismissed without a pick (MAUI `SelectionCancelled` + `SelectionCancelledCommand`). */
24
+ readonly onSelectionCancelled?: () => void;
25
+ }
26
+ /**
27
+ * Single selection from a list in an outlined box (MAUI `G9Picker`): a tap opens the selection sheet (no search; a
28
+ * pick closes it), the box shows the item's icon or swatch and text, the trailing chevron hints at the sheet. Must
29
+ * be inside a `G9Host` (the sheet).
30
+ */
31
+ export declare function G9Picker<T extends G9SelectionItem = G9SelectionItem>(props: G9PickerProps<T>): ReactNode;
32
+ //# sourceMappingURL=picker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"picker.d.ts","sourceRoot":"","sources":["../../src/pickers/picker.tsx"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,KAAK,SAAS,EAAU,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,KAAK,eAAe,EAAgB,MAAM,wBAAwB,CAAC;AAK5E,OAAO,EAAE,KAAK,kBAAkB,EAAkD,MAAM,WAAW,CAAC;AAEpG,iCAAiC;AACjC,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,eAAe,GAAG,eAAe,CAAE,SAAQ,kBAAkB;IACpG,uGAAuG;IACvG,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IACjC,0GAA0G;IAC1G,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,gGAAgG;IAChG,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC;IACtE,gFAAgF;IAChF,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC;;;OAGG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,mHAAmH;IACnH,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;IAC5C,wGAAwG;IACxG,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,IAAI,CAAC;CAC5C;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,eAAe,GAAG,eAAe,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,SAAS,CAiDxG"}
@@ -0,0 +1,72 @@
1
+ import "./pickers.css";
2
+ import { useRef } from "@lynx-js/react";
3
+ import { selectionKey } from "../base/selection-item.jsx";
4
+ import { useControllableState } from "../base/use-controllable-state.jsx";
5
+ import { useG9Settings } from "../provider/hooks.jsx";
6
+ import { showSelectionSheet } from "../selection/selection-sheet.jsx";
7
+ import { useG9Sheets } from "../sheet/service.jsx";
8
+ import { PickerField, SelectionValueIcon, usePickerOpen } from "./trigger.jsx";
9
+ function G9Picker(props) {
10
+ var _props_defaultValue, _props_placeholder;
11
+ const sheets = useG9Sheets();
12
+ const glyphs = useG9Settings().glyphs;
13
+ const open = usePickerOpen();
14
+ const [key, setKey] = useControllableState({
15
+ value: props.value,
16
+ defaultValue: null != (_props_defaultValue = props.defaultValue) ? _props_defaultValue : null,
17
+ onChange: props.onValueChange,
18
+ name: 'G9Picker.value'
19
+ });
20
+ const latest = useRef({
21
+ props,
22
+ key
23
+ });
24
+ latest.current = {
25
+ props,
26
+ key
27
+ };
28
+ const selected = null === key ? void 0 : props.items.find((i)=>selectionKey(i) === key);
29
+ const onOpen = ()=>open(async (isCurrent)=>{
30
+ var _ref, _p_label;
31
+ var _p_sheetTitle;
32
+ const p = latest.current.props;
33
+ const previousKey = latest.current.key;
34
+ const previous = null === previousKey ? void 0 : p.items.find((i)=>selectionKey(i) === previousKey);
35
+ const items = p.items.filter((i)=>false !== i.isEnabled || i === previous);
36
+ if (0 === items.length) return;
37
+ const result = await showSelectionSheet(sheets, {
38
+ title: (null == (_p_sheetTitle = p.sheetTitle) ? void 0 : _p_sheetTitle.trim()) ? p.sheetTitle : null != (_ref = null != (_p_label = p.label) ? _p_label : p.placeholder) ? _ref : '',
39
+ items,
40
+ selectedItems: previous ? [
41
+ previous
42
+ ] : [],
43
+ allowMultiple: false,
44
+ closeOnSingleSelection: true,
45
+ showSearch: false
46
+ });
47
+ if (!isCurrent()) return;
48
+ const next = result.wasAccepted ? result.items[0] : void 0;
49
+ const now = latest.current.props;
50
+ if (next) {
51
+ var _now_onItemSelected;
52
+ setKey(selectionKey(next), next);
53
+ null == (_now_onItemSelected = now.onItemSelected) || _now_onItemSelected.call(now, next);
54
+ } else if (false !== now.restoreOnCancel) {
55
+ var _now_onSelectionCancelled;
56
+ if (latest.current.key !== previousKey) setKey(previousKey, null != previous ? previous : null);
57
+ null == (_now_onSelectionCancelled = now.onSelectionCancelled) || _now_onSelectionCancelled.call(now);
58
+ }
59
+ });
60
+ return <PickerField field={{
61
+ trailingIcon: glyphs.chevron,
62
+ ...props
63
+ }} hasValue={void 0 !== selected} onOpen={onOpen}>
64
+ {selected ? <SelectionValueIcon item={selected}/> : null}
65
+ <text className={`g9-picker__text${selected ? '' : ' g9-picker__text--placeholder'}`} text-maxline="1">
66
+ {selected ? selected.text : props.label ? '' : null != (_props_placeholder = props.placeholder) ? _props_placeholder : ''}
67
+ </text>
68
+ </PickerField>;
69
+ }
70
+ export { G9Picker };
71
+
72
+ //# sourceMappingURL=picker.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pickers/picker.jsx","sources":["../../src/pickers/picker.tsx"],"sourcesContent":["import './pickers.css';\nimport { type ReactNode, useRef } from '@lynx-js/react';\nimport { type G9SelectionItem, selectionKey } from '../base/selection-item';\nimport { useControllableState } from '../base/use-controllable-state';\nimport { useG9Settings } from '../provider/hooks';\nimport { showSelectionSheet } from '../selection/selection-sheet';\nimport { useG9Sheets } from '../sheet/service';\nimport { type G9PickerFieldProps, PickerField, SelectionValueIcon, usePickerOpen } from './trigger';\n\n/** Props of {@link G9Picker}. */\nexport interface G9PickerProps<T extends G9SelectionItem = G9SelectionItem> extends G9PickerFieldProps {\n /** The rows of the sheet (MAUI `ItemsSource`). Disabled items are left out except the selected one. */\n readonly items: ReadonlyArray<T>;\n /** Selected item key (`selectionKey`: key, else text); `null` = none. Controlled with `onValueChange`. */\n readonly value?: string | null;\n readonly defaultValue?: string | null;\n /** The selection changed: by a pick, or by `restoreOnCancel` putting back the opening value. */\n readonly onValueChange?: (key: string | null, item: T | null) => void;\n /** Sheet title; default the label, else the placeholder (MAUI `SheetTitle`). */\n readonly sheetTitle?: string | null;\n /**\n * Default true (MAUI `RestoreOnCancel`): a dismissed sheet puts back the value the picker had when it opened (if it\n * changed meanwhile) and reports `onSelectionCancelled`. False leaves the current value and reports nothing.\n */\n readonly restoreOnCancel?: boolean;\n /** A row was picked (MAUI `ItemSelected` + `SelectionAcceptedCommand`); only for a pick, never for a dismissal. */\n readonly onItemSelected?: (item: T) => void;\n /** The sheet was dismissed without a pick (MAUI `SelectionCancelled` + `SelectionCancelledCommand`). */\n readonly onSelectionCancelled?: () => void;\n}\n\n/**\n * Single selection from a list in an outlined box (MAUI `G9Picker`): a tap opens the selection sheet (no search; a\n * pick closes it), the box shows the item's icon or swatch and text, the trailing chevron hints at the sheet. Must\n * be inside a `G9Host` (the sheet).\n */\nexport function G9Picker<T extends G9SelectionItem = G9SelectionItem>(props: G9PickerProps<T>): ReactNode {\n const sheets = useG9Sheets();\n const glyphs = useG9Settings().glyphs;\n const open = usePickerOpen();\n const [key, setKey] = useControllableState<string | null, [T | null]>({\n value: props.value,\n defaultValue: props.defaultValue ?? null,\n onChange: props.onValueChange,\n name: 'G9Picker.value',\n });\n const latest = useRef({ props, key });\n latest.current = { props, key };\n const selected = key === null ? undefined : props.items.find((i) => selectionKey(i) === key);\n\n const onOpen = () =>\n open(async (isCurrent) => {\n const p = latest.current.props;\n const previousKey = latest.current.key;\n const previous = previousKey === null ? undefined : p.items.find((i) => selectionKey(i) === previousKey);\n const items = p.items.filter((i) => i.isEnabled !== false || i === previous);\n if (items.length === 0) return;\n const result = await showSelectionSheet(sheets, {\n title: p.sheetTitle?.trim() ? p.sheetTitle : (p.label ?? p.placeholder ?? ''),\n items,\n selectedItems: previous ? [previous] : [],\n allowMultiple: false,\n closeOnSingleSelection: true,\n showSearch: false,\n });\n if (!isCurrent()) return;\n const next = result.wasAccepted ? result.items[0] : undefined;\n const now = latest.current.props;\n if (next) {\n setKey(selectionKey(next), next);\n now.onItemSelected?.(next);\n } else if (now.restoreOnCancel !== false) {\n if (latest.current.key !== previousKey) setKey(previousKey, previous ?? null);\n now.onSelectionCancelled?.();\n }\n });\n\n return (\n <PickerField field={{ trailingIcon: glyphs.chevron, ...props }} hasValue={selected !== undefined} onOpen={onOpen}>\n {selected ? <SelectionValueIcon item={selected} /> : null}\n <text className={`g9-picker__text${selected ? '' : ' g9-picker__text--placeholder'}`} text-maxline=\"1\">\n {selected ? selected.text : props.label ? '' : (props.placeholder ?? '')}\n </text>\n </PickerField>\n );\n}\n"],"names":["G9Picker","props","_props_defaultValue","_props_placeholder","sheets","useG9Sheets","glyphs","useG9Settings","open","usePickerOpen","key","setKey","useControllableState","latest","useRef","selected","undefined","i","selectionKey","onOpen","isCurrent","_ref","_p_sheetTitle","p","previousKey","previous","items","result","showSelectionSheet","next","now","PickerField","SelectionValueIcon","text"],"mappings":";;;;;;;;AAoCO,SAASA,SAAsDC,KAAuB;QAM3EC,qBAuCsCC;IA5CtD,MAAMC,SAASC;IACf,MAAMC,SAASC,gBAAgB,MAAM;IACrC,MAAMC,OAAOC;IACb,MAAM,CAACC,KAAKC,OAAO,GAAGC,qBAAgD;QACpE,OAAOX,MAAM,KAAK;QAClB,cAAc,QAAAC,CAAAA,sBAAAA,MAAM,YAAY,AAAD,IAAjBA,sBAAsB;QACpC,UAAUD,MAAM,aAAa;QAC7B,MAAM;IACR;IACA,MAAMY,SAASC,OAAO;QAAEb;QAAOS;IAAI;IACnCG,OAAO,OAAO,GAAG;QAAEZ;QAAOS;IAAI;IAC9B,MAAMK,WAAWL,AAAQ,SAARA,MAAeM,SAAYf,MAAM,KAAK,CAAC,IAAI,CAAC,CAACgB,IAAMC,aAAaD,OAAOP;IAExF,MAAMS,SAAS,IACbX,KAAK,OAAOY;gBAOsCC,MAAAA;gBAAvCC;YANT,MAAMC,IAAIV,OAAO,OAAO,CAAC,KAAK;YAC9B,MAAMW,cAAcX,OAAO,OAAO,CAAC,GAAG;YACtC,MAAMY,WAAWD,AAAgB,SAAhBA,cAAuBR,SAAYO,EAAE,KAAK,CAAC,IAAI,CAAC,CAACN,IAAMC,aAAaD,OAAOO;YAC5F,MAAME,QAAQH,EAAE,KAAK,CAAC,MAAM,CAAC,CAACN,IAAMA,AAAgB,UAAhBA,EAAE,SAAS,IAAcA,MAAMQ;YACnE,IAAIC,AAAiB,MAAjBA,MAAM,MAAM,EAAQ;YACxB,MAAMC,SAAS,MAAMC,mBAAmBxB,QAAQ;gBAC9C,OAAOkB,AAAAA,SAAAA,CAAAA,gBAAAA,EAAE,UAAU,AAAD,IAAXA,KAAAA,IAAAA,cAAc,IAAI,EAAC,IAAIC,EAAE,UAAU,GAAG,QAACF,CAAAA,OAAAA,QAAAA,CAAAA,WAAAA,EAAE,KAAK,AAAD,IAANA,WAAWE,EAAE,WAAW,AAAD,IAAvBF,OAA4B;gBAC1EK;gBACA,eAAeD,WAAW;oBAACA;iBAAS,GAAG,EAAE;gBACzC,eAAe;gBACf,wBAAwB;gBACxB,YAAY;YACd;YACA,IAAI,CAACL,aAAa;YAClB,MAAMS,OAAOF,OAAO,WAAW,GAAGA,OAAO,KAAK,CAAC,EAAE,GAAGX;YACpD,MAAMc,MAAMjB,OAAO,OAAO,CAAC,KAAK;YAChC,IAAIgB,MAAM;oBAERC;gBADAnB,OAAOO,aAAaW,OAAOA;wBAC3BC,CAAAA,sBAAAA,IAAI,cAAc,AAAD,KAAjBA,oBAAAA,IAAAA,CAAAA,KAAqBD;YACvB,OAAO,IAAIC,AAAwB,UAAxBA,IAAI,eAAe,EAAY;oBAExCA;gBADA,IAAIjB,OAAO,OAAO,CAAC,GAAG,KAAKW,aAAab,OAAOa,aAAaC,QAAAA,WAAAA,WAAY;wBACxEK,CAAAA,4BAAAA,IAAI,oBAAoB,AAAD,KAAvBA,0BAAAA,IAAAA,CAAAA;YACF;QACF;IAEF,QACGC,YAAY,OAAO;QAAE,cAAczB,OAAO,OAAO;QAAE,GAAGL,KAAK;IAAC,GAAG,UAAUc,AAAaC,WAAbD,UAAwB,QAAQI,QAAQ;MAChH,CAACJ,YAAYiB,mBAAmB,MAAMjB,cAAe,KAAK;MAC1D,CAACkB,KAAK,WAAW,CAAC,eAAe,EAAElB,WAAW,KAAK,iCAAiC,EAAE,aAAa,IAAI;QACrG,CAACA,WAAWA,SAAS,IAAI,GAAGd,MAAM,KAAK,GAAG,KAAK,QAACE,CAAAA,qBAAAA,MAAM,WAAW,AAAD,IAAhBA,qBAAqB,GAAI;MAC3E,EAAE8B,KAAK;IACT,EAAEF;AAEN"}