@hanzo/ui 8.27.9 → 8.27.11

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 (474) hide show
  1. package/dist/backends/gui/3d-card.cjs +100 -0
  2. package/dist/backends/gui/3d-card.d.ts +59 -0
  3. package/dist/backends/gui/3d-card.d.ts.map +1 -0
  4. package/dist/backends/gui/3d-card.js +92 -0
  5. package/dist/backends/gui/3d-card.js.map +1 -0
  6. package/dist/backends/gui/3d-marquee.cjs +225 -0
  7. package/dist/backends/gui/3d-marquee.d.ts +114 -0
  8. package/dist/backends/gui/3d-marquee.d.ts.map +1 -0
  9. package/dist/backends/gui/3d-marquee.js +190 -0
  10. package/dist/backends/gui/3d-marquee.js.map +1 -0
  11. package/dist/backends/gui/3d-pin.cjs +51 -0
  12. package/dist/backends/gui/3d-pin.d.ts +14 -0
  13. package/dist/backends/gui/3d-pin.d.ts.map +1 -0
  14. package/dist/backends/gui/3d-pin.js +49 -0
  15. package/dist/backends/gui/3d-pin.js.map +1 -0
  16. package/dist/backends/gui/advanced-chart.cjs +61 -0
  17. package/dist/backends/gui/advanced-chart.d.ts +38 -0
  18. package/dist/backends/gui/advanced-chart.d.ts.map +1 -0
  19. package/dist/backends/gui/advanced-chart.js +59 -0
  20. package/dist/backends/gui/advanced-chart.js.map +1 -0
  21. package/dist/backends/gui/alert.cjs +106 -0
  22. package/dist/backends/gui/alert.d.ts +39 -0
  23. package/dist/backends/gui/alert.d.ts.map +1 -0
  24. package/dist/backends/gui/alert.js +102 -0
  25. package/dist/backends/gui/alert.js.map +1 -0
  26. package/dist/backends/gui/android.cjs +52 -0
  27. package/dist/backends/gui/android.d.ts +16 -0
  28. package/dist/backends/gui/android.d.ts.map +1 -0
  29. package/dist/backends/gui/android.js +50 -0
  30. package/dist/backends/gui/android.js.map +1 -0
  31. package/dist/backends/gui/animated-beam.cjs +97 -0
  32. package/dist/backends/gui/animated-beam.d.ts +57 -0
  33. package/dist/backends/gui/animated-beam.d.ts.map +1 -0
  34. package/dist/backends/gui/animated-beam.js +62 -0
  35. package/dist/backends/gui/animated-beam.js.map +1 -0
  36. package/dist/backends/gui/animated-cursor.cjs +183 -0
  37. package/dist/backends/gui/animated-cursor.d.ts +42 -0
  38. package/dist/backends/gui/animated-cursor.d.ts.map +1 -0
  39. package/dist/backends/gui/animated-cursor.js +181 -0
  40. package/dist/backends/gui/animated-cursor.js.map +1 -0
  41. package/dist/backends/gui/animated-testimonials.cjs +109 -0
  42. package/dist/backends/gui/animated-testimonials.d.ts +23 -0
  43. package/dist/backends/gui/animated-testimonials.d.ts.map +1 -0
  44. package/dist/backends/gui/animated-testimonials.js +74 -0
  45. package/dist/backends/gui/animated-testimonials.js.map +1 -0
  46. package/dist/backends/gui/animated-tooltip.cjs +100 -0
  47. package/dist/backends/gui/animated-tooltip.d.ts +15 -0
  48. package/dist/backends/gui/animated-tooltip.d.ts.map +1 -0
  49. package/dist/backends/gui/animated-tooltip.js +65 -0
  50. package/dist/backends/gui/animated-tooltip.js.map +1 -0
  51. package/dist/backends/gui/announcement.cjs +54 -0
  52. package/dist/backends/gui/announcement.d.ts +26 -0
  53. package/dist/backends/gui/announcement.d.ts.map +1 -0
  54. package/dist/backends/gui/announcement.js +52 -0
  55. package/dist/backends/gui/announcement.js.map +1 -0
  56. package/dist/backends/gui/apple-cards-carousel.cjs +198 -0
  57. package/dist/backends/gui/apple-cards-carousel.d.ts +45 -0
  58. package/dist/backends/gui/apple-cards-carousel.d.ts.map +1 -0
  59. package/dist/backends/gui/apple-cards-carousel.js +162 -0
  60. package/dist/backends/gui/apple-cards-carousel.js.map +1 -0
  61. package/dist/backends/gui/apple-hello-effect.cjs +38 -0
  62. package/dist/backends/gui/apple-hello-effect.d.ts +9 -0
  63. package/dist/backends/gui/apple-hello-effect.d.ts.map +1 -0
  64. package/dist/backends/gui/apple-hello-effect.js +36 -0
  65. package/dist/backends/gui/apple-hello-effect.js.map +1 -0
  66. package/dist/backends/gui/banner.cjs +108 -0
  67. package/dist/backends/gui/banner.d.ts +33 -0
  68. package/dist/backends/gui/banner.d.ts.map +1 -0
  69. package/dist/backends/gui/banner.js +106 -0
  70. package/dist/backends/gui/banner.js.map +1 -0
  71. package/dist/backends/gui/calendar.cjs +152 -0
  72. package/dist/backends/gui/calendar.d.ts +41 -0
  73. package/dist/backends/gui/calendar.d.ts.map +1 -0
  74. package/dist/backends/gui/calendar.js +151 -0
  75. package/dist/backends/gui/calendar.js.map +1 -0
  76. package/dist/backends/gui/choicebox.cjs +50 -0
  77. package/dist/backends/gui/choicebox.d.ts +33 -0
  78. package/dist/backends/gui/choicebox.d.ts.map +1 -0
  79. package/dist/backends/gui/choicebox.js +49 -0
  80. package/dist/backends/gui/choicebox.js.map +1 -0
  81. package/dist/backends/gui/code-block.cjs +120 -0
  82. package/dist/backends/gui/code-block.d.ts +22 -0
  83. package/dist/backends/gui/code-block.d.ts.map +1 -0
  84. package/dist/backends/gui/code-block.js +118 -0
  85. package/dist/backends/gui/code-block.js.map +1 -0
  86. package/dist/backends/gui/code-editor.cjs +195 -0
  87. package/dist/backends/gui/code-editor.d.ts +43 -0
  88. package/dist/backends/gui/code-editor.d.ts.map +1 -0
  89. package/dist/backends/gui/code-editor.js +160 -0
  90. package/dist/backends/gui/code-editor.js.map +1 -0
  91. package/dist/backends/gui/code-tabs.cjs +21 -0
  92. package/dist/backends/gui/code-tabs.d.ts +22 -0
  93. package/dist/backends/gui/code-tabs.d.ts.map +1 -0
  94. package/dist/backends/gui/code-tabs.js +19 -0
  95. package/dist/backends/gui/code-tabs.js.map +1 -0
  96. package/dist/backends/gui/color-picker.cjs +141 -0
  97. package/dist/backends/gui/color-picker.d.ts +25 -0
  98. package/dist/backends/gui/color-picker.d.ts.map +1 -0
  99. package/dist/backends/gui/color-picker.js +139 -0
  100. package/dist/backends/gui/color-picker.js.map +1 -0
  101. package/dist/backends/gui/combobox.cjs +42 -0
  102. package/dist/backends/gui/combobox.d.ts +39 -0
  103. package/dist/backends/gui/combobox.d.ts.map +1 -0
  104. package/dist/backends/gui/combobox.js +40 -0
  105. package/dist/backends/gui/combobox.js.map +1 -0
  106. package/dist/backends/gui/company-profile.cjs +43 -0
  107. package/dist/backends/gui/company-profile.d.ts +33 -0
  108. package/dist/backends/gui/company-profile.d.ts.map +1 -0
  109. package/dist/backends/gui/company-profile.js +41 -0
  110. package/dist/backends/gui/company-profile.js.map +1 -0
  111. package/dist/backends/gui/comparison.cjs +39 -0
  112. package/dist/backends/gui/comparison.d.ts +15 -0
  113. package/dist/backends/gui/comparison.d.ts.map +1 -0
  114. package/dist/backends/gui/comparison.js +37 -0
  115. package/dist/backends/gui/comparison.js.map +1 -0
  116. package/dist/backends/gui/credit-card.cjs +80 -0
  117. package/dist/backends/gui/credit-card.d.ts +21 -0
  118. package/dist/backends/gui/credit-card.d.ts.map +1 -0
  119. package/dist/backends/gui/credit-card.js +78 -0
  120. package/dist/backends/gui/credit-card.js.map +1 -0
  121. package/dist/backends/gui/crypto-market.cjs +128 -0
  122. package/dist/backends/gui/crypto-market.d.ts +52 -0
  123. package/dist/backends/gui/crypto-market.d.ts.map +1 -0
  124. package/dist/backends/gui/crypto-market.js +126 -0
  125. package/dist/backends/gui/crypto-market.js.map +1 -0
  126. package/dist/backends/gui/crypto-screener.cjs +45 -0
  127. package/dist/backends/gui/crypto-screener.d.ts +38 -0
  128. package/dist/backends/gui/crypto-screener.d.ts.map +1 -0
  129. package/dist/backends/gui/crypto-screener.js +43 -0
  130. package/dist/backends/gui/crypto-screener.js.map +1 -0
  131. package/dist/backends/gui/cursor.cjs +37 -0
  132. package/dist/backends/gui/cursor.d.ts +17 -0
  133. package/dist/backends/gui/cursor.d.ts.map +1 -0
  134. package/dist/backends/gui/cursor.js +35 -0
  135. package/dist/backends/gui/cursor.js.map +1 -0
  136. package/dist/backends/gui/data-table.cjs +171 -0
  137. package/dist/backends/gui/data-table.d.ts +91 -0
  138. package/dist/backends/gui/data-table.d.ts.map +1 -0
  139. package/dist/backends/gui/data-table.js +169 -0
  140. package/dist/backends/gui/data-table.js.map +1 -0
  141. package/dist/backends/gui/date-picker.cjs +66 -0
  142. package/dist/backends/gui/date-picker.d.ts +29 -0
  143. package/dist/backends/gui/date-picker.d.ts.map +1 -0
  144. package/dist/backends/gui/date-picker.js +64 -0
  145. package/dist/backends/gui/date-picker.js.map +1 -0
  146. package/dist/backends/gui/desktop-spotlight.cjs +46 -0
  147. package/dist/backends/gui/desktop-spotlight.d.ts +34 -0
  148. package/dist/backends/gui/desktop-spotlight.d.ts.map +1 -0
  149. package/dist/backends/gui/desktop-spotlight.js +44 -0
  150. package/dist/backends/gui/desktop-spotlight.js.map +1 -0
  151. package/dist/backends/gui/desktop-window.cjs +180 -0
  152. package/dist/backends/gui/desktop-window.d.ts +51 -0
  153. package/dist/backends/gui/desktop-window.d.ts.map +1 -0
  154. package/dist/backends/gui/desktop-window.js +177 -0
  155. package/dist/backends/gui/desktop-window.js.map +1 -0
  156. package/dist/backends/gui/desktop.cjs +238 -0
  157. package/dist/backends/gui/desktop.d.ts +109 -0
  158. package/dist/backends/gui/desktop.d.ts.map +1 -0
  159. package/dist/backends/gui/desktop.js +199 -0
  160. package/dist/backends/gui/desktop.js.map +1 -0
  161. package/dist/backends/gui/dialog-stack.cjs +26 -0
  162. package/dist/backends/gui/dialog-stack.d.ts +23 -0
  163. package/dist/backends/gui/dialog-stack.d.ts.map +1 -0
  164. package/dist/backends/gui/dialog-stack.js +24 -0
  165. package/dist/backends/gui/dialog-stack.js.map +1 -0
  166. package/dist/backends/gui/dock.cjs +99 -0
  167. package/dist/backends/gui/dock.d.ts +41 -0
  168. package/dist/backends/gui/dock.d.ts.map +1 -0
  169. package/dist/backends/gui/dock.js +96 -0
  170. package/dist/backends/gui/dock.js.map +1 -0
  171. package/dist/backends/gui/dropzone.cjs +142 -0
  172. package/dist/backends/gui/dropzone.d.ts +12 -0
  173. package/dist/backends/gui/dropzone.d.ts.map +1 -0
  174. package/dist/backends/gui/dropzone.js +140 -0
  175. package/dist/backends/gui/dropzone.js.map +1 -0
  176. package/dist/backends/gui/editor.cjs +84 -0
  177. package/dist/backends/gui/editor.d.ts +23 -0
  178. package/dist/backends/gui/editor.d.ts.map +1 -0
  179. package/dist/backends/gui/editor.js +49 -0
  180. package/dist/backends/gui/editor.js.map +1 -0
  181. package/dist/backends/gui/empty.cjs +71 -0
  182. package/dist/backends/gui/empty.d.ts +43 -0
  183. package/dist/backends/gui/empty.d.ts.map +1 -0
  184. package/dist/backends/gui/empty.js +63 -0
  185. package/dist/backends/gui/empty.js.map +1 -0
  186. package/dist/backends/gui/field.cjs +132 -0
  187. package/dist/backends/gui/field.d.ts +74 -0
  188. package/dist/backends/gui/field.d.ts.map +1 -0
  189. package/dist/backends/gui/field.js +121 -0
  190. package/dist/backends/gui/field.js.map +1 -0
  191. package/dist/backends/gui/financials.cjs +45 -0
  192. package/dist/backends/gui/financials.d.ts +36 -0
  193. package/dist/backends/gui/financials.d.ts.map +1 -0
  194. package/dist/backends/gui/financials.js +43 -0
  195. package/dist/backends/gui/financials.js.map +1 -0
  196. package/dist/backends/gui/forex-market.cjs +21 -0
  197. package/dist/backends/gui/forex-market.d.ts +17 -0
  198. package/dist/backends/gui/forex-market.d.ts.map +1 -0
  199. package/dist/backends/gui/forex-market.js +19 -0
  200. package/dist/backends/gui/forex-market.js.map +1 -0
  201. package/dist/backends/gui/forex-screener.cjs +57 -0
  202. package/dist/backends/gui/forex-screener.d.ts +45 -0
  203. package/dist/backends/gui/forex-screener.d.ts.map +1 -0
  204. package/dist/backends/gui/forex-screener.js +55 -0
  205. package/dist/backends/gui/forex-screener.js.map +1 -0
  206. package/dist/backends/gui/gantt.cjs +48 -0
  207. package/dist/backends/gui/gantt.d.ts +18 -0
  208. package/dist/backends/gui/gantt.d.ts.map +1 -0
  209. package/dist/backends/gui/gantt.js +46 -0
  210. package/dist/backends/gui/gantt.js.map +1 -0
  211. package/dist/backends/gui/glimpse.cjs +88 -0
  212. package/dist/backends/gui/glimpse.d.ts +57 -0
  213. package/dist/backends/gui/glimpse.d.ts.map +1 -0
  214. package/dist/backends/gui/glimpse.js +81 -0
  215. package/dist/backends/gui/glimpse.js.map +1 -0
  216. package/dist/backends/gui/grid-pattern.cjs +119 -0
  217. package/dist/backends/gui/grid-pattern.d.ts +96 -0
  218. package/dist/backends/gui/grid-pattern.d.ts.map +1 -0
  219. package/dist/backends/gui/grid-pattern.js +84 -0
  220. package/dist/backends/gui/grid-pattern.js.map +1 -0
  221. package/dist/backends/gui/image-crop.cjs +35 -0
  222. package/dist/backends/gui/image-crop.d.ts +20 -0
  223. package/dist/backends/gui/image-crop.d.ts.map +1 -0
  224. package/dist/backends/gui/image-crop.js +33 -0
  225. package/dist/backends/gui/image-crop.js.map +1 -0
  226. package/dist/backends/gui/image-zoom.cjs +58 -0
  227. package/dist/backends/gui/image-zoom.d.ts +16 -0
  228. package/dist/backends/gui/image-zoom.d.ts.map +1 -0
  229. package/dist/backends/gui/image-zoom.js +56 -0
  230. package/dist/backends/gui/image-zoom.js.map +1 -0
  231. package/dist/backends/gui/index.cjs +266 -1
  232. package/dist/backends/gui/index.d.ts +90 -0
  233. package/dist/backends/gui/index.d.ts.map +1 -1
  234. package/dist/backends/gui/index.js +90 -0
  235. package/dist/backends/gui/index.js.map +1 -1
  236. package/dist/backends/gui/interactive-grid-pattern.cjs +61 -0
  237. package/dist/backends/gui/interactive-grid-pattern.d.ts +28 -0
  238. package/dist/backends/gui/interactive-grid-pattern.d.ts.map +1 -0
  239. package/dist/backends/gui/interactive-grid-pattern.js +26 -0
  240. package/dist/backends/gui/interactive-grid-pattern.js.map +1 -0
  241. package/dist/backends/gui/iphone-15-pro.cjs +83 -0
  242. package/dist/backends/gui/iphone-15-pro.d.ts +16 -0
  243. package/dist/backends/gui/iphone-15-pro.d.ts.map +1 -0
  244. package/dist/backends/gui/iphone-15-pro.js +81 -0
  245. package/dist/backends/gui/iphone-15-pro.js.map +1 -0
  246. package/dist/backends/gui/item.cjs +154 -0
  247. package/dist/backends/gui/item.d.ts +72 -0
  248. package/dist/backends/gui/item.d.ts.map +1 -0
  249. package/dist/backends/gui/item.js +143 -0
  250. package/dist/backends/gui/item.js.map +1 -0
  251. package/dist/backends/gui/kanban.cjs +247 -0
  252. package/dist/backends/gui/kanban.d.ts +37 -0
  253. package/dist/backends/gui/kanban.d.ts.map +1 -0
  254. package/dist/backends/gui/kanban.js +212 -0
  255. package/dist/backends/gui/kanban.js.map +1 -0
  256. package/dist/backends/gui/kbd.cjs +45 -0
  257. package/dist/backends/gui/kbd.d.ts +8 -0
  258. package/dist/backends/gui/kbd.d.ts.map +1 -0
  259. package/dist/backends/gui/kbd.js +42 -0
  260. package/dist/backends/gui/kbd.js.map +1 -0
  261. package/dist/backends/gui/limelight-nav.cjs +201 -0
  262. package/dist/backends/gui/limelight-nav.d.ts +20 -0
  263. package/dist/backends/gui/limelight-nav.d.ts.map +1 -0
  264. package/dist/backends/gui/limelight-nav.js +166 -0
  265. package/dist/backends/gui/limelight-nav.js.map +1 -0
  266. package/dist/backends/gui/list.cjs +26 -0
  267. package/dist/backends/gui/list.d.ts +15 -0
  268. package/dist/backends/gui/list.d.ts.map +1 -0
  269. package/dist/backends/gui/list.js +23 -0
  270. package/dist/backends/gui/list.js.map +1 -0
  271. package/dist/backends/gui/macos-dock.cjs +84 -0
  272. package/dist/backends/gui/macos-dock.d.ts +30 -0
  273. package/dist/backends/gui/macos-dock.d.ts.map +1 -0
  274. package/dist/backends/gui/macos-dock.js +82 -0
  275. package/dist/backends/gui/macos-dock.js.map +1 -0
  276. package/dist/backends/gui/magnetic.cjs +40 -0
  277. package/dist/backends/gui/magnetic.d.ts +12 -0
  278. package/dist/backends/gui/magnetic.d.ts.map +1 -0
  279. package/dist/backends/gui/magnetic.js +38 -0
  280. package/dist/backends/gui/magnetic.js.map +1 -0
  281. package/dist/backends/gui/marquee.cjs +110 -0
  282. package/dist/backends/gui/marquee.d.ts +44 -0
  283. package/dist/backends/gui/marquee.d.ts.map +1 -0
  284. package/dist/backends/gui/marquee.js +75 -0
  285. package/dist/backends/gui/marquee.js.map +1 -0
  286. package/dist/backends/gui/menu-dock.cjs +64 -0
  287. package/dist/backends/gui/menu-dock.d.ts +21 -0
  288. package/dist/backends/gui/menu-dock.d.ts.map +1 -0
  289. package/dist/backends/gui/menu-dock.js +62 -0
  290. package/dist/backends/gui/menu-dock.js.map +1 -0
  291. package/dist/backends/gui/menubar.cjs +227 -0
  292. package/dist/backends/gui/menubar.d.ts +106 -0
  293. package/dist/backends/gui/menubar.d.ts.map +1 -0
  294. package/dist/backends/gui/menubar.js +177 -0
  295. package/dist/backends/gui/menubar.js.map +1 -0
  296. package/dist/backends/gui/message-dock.cjs +111 -0
  297. package/dist/backends/gui/message-dock.d.ts +22 -0
  298. package/dist/backends/gui/message-dock.d.ts.map +1 -0
  299. package/dist/backends/gui/message-dock.js +110 -0
  300. package/dist/backends/gui/message-dock.js.map +1 -0
  301. package/dist/backends/gui/mini-calendar.cjs +25 -0
  302. package/dist/backends/gui/mini-calendar.d.ts +22 -0
  303. package/dist/backends/gui/mini-calendar.d.ts.map +1 -0
  304. package/dist/backends/gui/mini-calendar.js +24 -0
  305. package/dist/backends/gui/mini-calendar.js.map +1 -0
  306. package/dist/backends/gui/minimal-tiptap.cjs +56 -0
  307. package/dist/backends/gui/minimal-tiptap.d.ts +20 -0
  308. package/dist/backends/gui/minimal-tiptap.d.ts.map +1 -0
  309. package/dist/backends/gui/minimal-tiptap.js +21 -0
  310. package/dist/backends/gui/minimal-tiptap.js.map +1 -0
  311. package/dist/backends/gui/motion-highlight.cjs +83 -0
  312. package/dist/backends/gui/motion-highlight.d.ts +27 -0
  313. package/dist/backends/gui/motion-highlight.d.ts.map +1 -0
  314. package/dist/backends/gui/motion-highlight.js +48 -0
  315. package/dist/backends/gui/motion-highlight.js.map +1 -0
  316. package/dist/backends/gui/navigation-bar.cjs +47 -0
  317. package/dist/backends/gui/navigation-bar.d.ts +48 -0
  318. package/dist/backends/gui/navigation-bar.d.ts.map +1 -0
  319. package/dist/backends/gui/navigation-bar.js +45 -0
  320. package/dist/backends/gui/navigation-bar.js.map +1 -0
  321. package/dist/backends/gui/news-timeline.cjs +47 -0
  322. package/dist/backends/gui/news-timeline.d.ts +39 -0
  323. package/dist/backends/gui/news-timeline.d.ts.map +1 -0
  324. package/dist/backends/gui/news-timeline.js +45 -0
  325. package/dist/backends/gui/news-timeline.js.map +1 -0
  326. package/dist/backends/gui/order-entry.cjs +53 -0
  327. package/dist/backends/gui/order-entry.d.ts +21 -0
  328. package/dist/backends/gui/order-entry.d.ts.map +1 -0
  329. package/dist/backends/gui/order-entry.js +52 -0
  330. package/dist/backends/gui/order-entry.js.map +1 -0
  331. package/dist/backends/gui/orders-history.cjs +102 -0
  332. package/dist/backends/gui/orders-history.d.ts +24 -0
  333. package/dist/backends/gui/orders-history.d.ts.map +1 -0
  334. package/dist/backends/gui/orders-history.js +67 -0
  335. package/dist/backends/gui/orders-history.js.map +1 -0
  336. package/dist/backends/gui/pagination.cjs +51 -0
  337. package/dist/backends/gui/pagination.d.ts +52 -0
  338. package/dist/backends/gui/pagination.d.ts.map +1 -0
  339. package/dist/backends/gui/pagination.js +42 -0
  340. package/dist/backends/gui/pagination.js.map +1 -0
  341. package/dist/backends/gui/particles-background.cjs +135 -0
  342. package/dist/backends/gui/particles-background.d.ts +24 -0
  343. package/dist/backends/gui/particles-background.d.ts.map +1 -0
  344. package/dist/backends/gui/particles-background.js +133 -0
  345. package/dist/backends/gui/particles-background.js.map +1 -0
  346. package/dist/backends/gui/particles.cjs +145 -0
  347. package/dist/backends/gui/particles.d.ts +25 -0
  348. package/dist/backends/gui/particles.d.ts.map +1 -0
  349. package/dist/backends/gui/particles.js +143 -0
  350. package/dist/backends/gui/particles.js.map +1 -0
  351. package/dist/backends/gui/pill.cjs +82 -0
  352. package/dist/backends/gui/pill.d.ts +12 -0
  353. package/dist/backends/gui/pill.d.ts.map +1 -0
  354. package/dist/backends/gui/pill.js +78 -0
  355. package/dist/backends/gui/pill.js.map +1 -0
  356. package/dist/backends/gui/pin-list.cjs +82 -0
  357. package/dist/backends/gui/pin-list.d.ts +42 -0
  358. package/dist/backends/gui/pin-list.d.ts.map +1 -0
  359. package/dist/backends/gui/pin-list.js +80 -0
  360. package/dist/backends/gui/pin-list.js.map +1 -0
  361. package/dist/backends/gui/pixel-image.cjs +63 -0
  362. package/dist/backends/gui/pixel-image.d.ts +21 -0
  363. package/dist/backends/gui/pixel-image.d.ts.map +1 -0
  364. package/dist/backends/gui/pixel-image.js +61 -0
  365. package/dist/backends/gui/pixel-image.js.map +1 -0
  366. package/dist/backends/gui/positions-list.cjs +60 -0
  367. package/dist/backends/gui/positions-list.d.ts +14 -0
  368. package/dist/backends/gui/positions-list.d.ts.map +1 -0
  369. package/dist/backends/gui/positions-list.js +58 -0
  370. package/dist/backends/gui/positions-list.js.map +1 -0
  371. package/dist/backends/gui/qr-code.cjs +438 -0
  372. package/dist/backends/gui/qr-code.d.ts +42 -0
  373. package/dist/backends/gui/qr-code.d.ts.map +1 -0
  374. package/dist/backends/gui/qr-code.js +402 -0
  375. package/dist/backends/gui/qr-code.js.map +1 -0
  376. package/dist/backends/gui/relative-time.cjs +167 -0
  377. package/dist/backends/gui/relative-time.d.ts +10 -0
  378. package/dist/backends/gui/relative-time.d.ts.map +1 -0
  379. package/dist/backends/gui/relative-time.js +132 -0
  380. package/dist/backends/gui/relative-time.js.map +1 -0
  381. package/dist/backends/gui/safari.cjs +65 -0
  382. package/dist/backends/gui/safari.d.ts +23 -0
  383. package/dist/backends/gui/safari.d.ts.map +1 -0
  384. package/dist/backends/gui/safari.js +63 -0
  385. package/dist/backends/gui/safari.js.map +1 -0
  386. package/dist/backends/gui/snippet.cjs +144 -0
  387. package/dist/backends/gui/snippet.d.ts +38 -0
  388. package/dist/backends/gui/snippet.d.ts.map +1 -0
  389. package/dist/backends/gui/snippet.js +141 -0
  390. package/dist/backends/gui/snippet.js.map +1 -0
  391. package/dist/backends/gui/stars-scrolling-wheel.cjs +106 -0
  392. package/dist/backends/gui/stars-scrolling-wheel.d.ts +24 -0
  393. package/dist/backends/gui/stars-scrolling-wheel.d.ts.map +1 -0
  394. package/dist/backends/gui/stars-scrolling-wheel.js +104 -0
  395. package/dist/backends/gui/stars-scrolling-wheel.js.map +1 -0
  396. package/dist/backends/gui/status.cjs +79 -0
  397. package/dist/backends/gui/status.d.ts +15 -0
  398. package/dist/backends/gui/status.d.ts.map +1 -0
  399. package/dist/backends/gui/status.js +77 -0
  400. package/dist/backends/gui/status.js.map +1 -0
  401. package/dist/backends/gui/stock-market.cjs +21 -0
  402. package/dist/backends/gui/stock-market.d.ts +17 -0
  403. package/dist/backends/gui/stock-market.d.ts.map +1 -0
  404. package/dist/backends/gui/stock-market.js +19 -0
  405. package/dist/backends/gui/stock-market.js.map +1 -0
  406. package/dist/backends/gui/stock-screener.cjs +55 -0
  407. package/dist/backends/gui/stock-screener.d.ts +41 -0
  408. package/dist/backends/gui/stock-screener.d.ts.map +1 -0
  409. package/dist/backends/gui/stock-screener.js +53 -0
  410. package/dist/backends/gui/stock-screener.js.map +1 -0
  411. package/dist/backends/gui/symbol-info.cjs +46 -0
  412. package/dist/backends/gui/symbol-info.d.ts +36 -0
  413. package/dist/backends/gui/symbol-info.d.ts.map +1 -0
  414. package/dist/backends/gui/symbol-info.js +44 -0
  415. package/dist/backends/gui/symbol-info.js.map +1 -0
  416. package/dist/backends/gui/table.cjs +104 -0
  417. package/dist/backends/gui/table.d.ts +57 -0
  418. package/dist/backends/gui/table.d.ts.map +1 -0
  419. package/dist/backends/gui/table.js +95 -0
  420. package/dist/backends/gui/table.js.map +1 -0
  421. package/dist/backends/gui/tags.cjs +22 -0
  422. package/dist/backends/gui/tags.d.ts +22 -0
  423. package/dist/backends/gui/tags.d.ts.map +1 -0
  424. package/dist/backends/gui/tags.js +20 -0
  425. package/dist/backends/gui/tags.js.map +1 -0
  426. package/dist/backends/gui/technical-analysis.cjs +58 -0
  427. package/dist/backends/gui/technical-analysis.d.ts +41 -0
  428. package/dist/backends/gui/technical-analysis.d.ts.map +1 -0
  429. package/dist/backends/gui/technical-analysis.js +56 -0
  430. package/dist/backends/gui/technical-analysis.js.map +1 -0
  431. package/dist/backends/gui/terminal.cjs +266 -0
  432. package/dist/backends/gui/terminal.d.ts +38 -0
  433. package/dist/backends/gui/terminal.d.ts.map +1 -0
  434. package/dist/backends/gui/terminal.js +231 -0
  435. package/dist/backends/gui/terminal.js.map +1 -0
  436. package/dist/backends/gui/ticker.cjs +79 -0
  437. package/dist/backends/gui/ticker.d.ts +19 -0
  438. package/dist/backends/gui/ticker.d.ts.map +1 -0
  439. package/dist/backends/gui/ticker.js +44 -0
  440. package/dist/backends/gui/ticker.js.map +1 -0
  441. package/dist/backends/gui/timeline.cjs +154 -0
  442. package/dist/backends/gui/timeline.d.ts +42 -0
  443. package/dist/backends/gui/timeline.d.ts.map +1 -0
  444. package/dist/backends/gui/timeline.js +118 -0
  445. package/dist/backends/gui/timeline.js.map +1 -0
  446. package/dist/backends/gui/toggle.cjs +96 -0
  447. package/dist/backends/gui/toggle.d.ts +29 -0
  448. package/dist/backends/gui/toggle.d.ts.map +1 -0
  449. package/dist/backends/gui/toggle.js +95 -0
  450. package/dist/backends/gui/toggle.js.map +1 -0
  451. package/dist/backends/gui/video-player.cjs +383 -0
  452. package/dist/backends/gui/video-player.d.ts +54 -0
  453. package/dist/backends/gui/video-player.d.ts.map +1 -0
  454. package/dist/backends/gui/video-player.js +348 -0
  455. package/dist/backends/gui/video-player.js.map +1 -0
  456. package/dist/chat/Composer.cjs +10 -10
  457. package/dist/chat/Composer.d.ts +16 -17
  458. package/dist/chat/Composer.d.ts.map +1 -1
  459. package/dist/chat/Composer.js +11 -11
  460. package/dist/chat/Composer.js.map +1 -1
  461. package/dist/gallery.cjs +180 -1
  462. package/dist/gallery.d.ts.map +1 -1
  463. package/dist/gallery.html +391 -3
  464. package/dist/gallery.js +181 -2
  465. package/dist/gallery.js.map +1 -1
  466. package/dist/index.cjs +179 -1
  467. package/dist/index.d.ts +1 -0
  468. package/dist/index.d.ts.map +1 -1
  469. package/dist/index.js +3 -0
  470. package/dist/index.js.map +1 -1
  471. package/dist/index.node.cjs +179 -1
  472. package/dist/index.node.js +3 -0
  473. package/dist/styles.css +356 -0
  474. package/package.json +1 -1
@@ -0,0 +1,171 @@
1
+ 'use client';"use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.DataTable = DataTable;
5
+ exports.DataTableColumnHeader = DataTableColumnHeader;
6
+ const jsx_runtime_1 = require("react/jsx-runtime");
7
+ /**
8
+ * DataTable — a sortable, filterable, paginated grid over an array of rows,
9
+ * driven by a column-definition array exactly the way the upstream guide's
10
+ * `ColumnDef[]` is: a column names an `accessorKey`, an optional `header` and
11
+ * `cell` renderer, and whether it can be sorted or hidden. Two ids carry
12
+ * meaning by convention, matched by the reference implementation's own demo —
13
+ * a column `id: 'select'` gets its checkbox for free, everything else (an
14
+ * `id: 'actions'` column included) is rendered by whatever `cell` you give it.
15
+ *
16
+ * There is no TanStack Table here: the workspace does not carry it, and a
17
+ * generic column model over a plain array needs none of what a headless
18
+ * library buys a real backend — grouping, virtualization, server-side
19
+ * pagination. Sorting, filtering, visibility, selection and pagination are
20
+ * ~120 lines of arithmetic over arrays, kept in one `useState` each, matching
21
+ * the guide's own `SortingState`/`ColumnFiltersState`/`VisibilityState` split.
22
+ *
23
+ * The grid is `@hanzo/ui`'s own `Grid`/`Cell` — a real CSS grid, which is the
24
+ * one correct host for a two-dimensional layout — with the WAI-ARIA
25
+ * `table`/`row`/`columnheader`/`cell` roles standing in for the semantics a
26
+ * native `<table>` would otherwise carry.
27
+ */
28
+ const gui_1 = require("@hanzo/gui");
29
+ const lucide_icons_2_1 = require("@hanzogui/lucide-icons-2");
30
+ const react_1 = require("react");
31
+ const grid_1 = require("../../grid.cjs");
32
+ const button_1 = require("./button.cjs");
33
+ const checkbox_1 = require("./checkbox.cjs");
34
+ const dropdown_menu_1 = require("./dropdown-menu.cjs");
35
+ const ink_1 = require("./ink.cjs");
36
+ const input_1 = require("./input.cjs");
37
+ const slot_1 = require("./slot.cjs");
38
+ /**
39
+ * A column's header cell: plain text when the column cannot sort, otherwise a
40
+ * button that toggles ascending/descending and shows which way it is set —
41
+ * the same affordance the reference `data-table-demo.tsx` wires up by hand.
42
+ */
43
+ function DataTableColumnHeader({ column, title, className }) {
44
+ if (!column.getCanSort())
45
+ return ((0, jsx_runtime_1.jsx)(gui_1.SizableText, { size: "$2", fontWeight: "600", color: "$quiet", className: className, children: title }));
46
+ const sorted = column.getIsSorted();
47
+ return ((0, jsx_runtime_1.jsxs)(button_1.Button, { ...(0, slot_1.slot)('data-table-column-header'), variant: "ghost", size: "sm", className: className, onClick: () => column.toggleSorting(sorted === 'asc'), children: [title, sorted === 'desc' ? (0, jsx_runtime_1.jsx)(lucide_icons_2_1.ArrowDown, { size: 14 }) : sorted === 'asc' ? (0, jsx_runtime_1.jsx)(lucide_icons_2_1.ArrowUp, { size: 14 }) : (0, jsx_runtime_1.jsx)(lucide_icons_2_1.ArrowUpDown, { size: 14 })] }));
48
+ }
49
+ const cellValue = (column, row) => column.accessorKey !== undefined ? row[column.accessorKey] : undefined;
50
+ const sortKey = (column, row) => {
51
+ if (column.sortingValue)
52
+ return column.sortingValue(row);
53
+ const v = cellValue(column, row);
54
+ return typeof v === 'number' ? v : String(v ?? '');
55
+ };
56
+ const filterText = (column, row) => column.filterValue ? column.filterValue(row) : String(cellValue(column, row) ?? '');
57
+ const track = (width) => width === undefined ? '1fr' : typeof width === 'number' ? `${width}px` : width;
58
+ const justify = (a) => a === 'right' ? 'flex-end' : a === 'center' ? 'center' : 'flex-start';
59
+ function DataTable({ columns, data, getRowId, filterColumnId, filterPlaceholder = 'Filter…', pageSize = 0, emptyMessage = 'No results.', onRowSelectionChange, }) {
60
+ const [sorting, setSorting] = (0, react_1.useState)(null);
61
+ const [filter, setFilter] = (0, react_1.useState)('');
62
+ const [hidden, setHidden] = (0, react_1.useState)({});
63
+ const [selected, setSelected] = (0, react_1.useState)({});
64
+ const [pageIndex, setPageIndex] = (0, react_1.useState)(0);
65
+ const withIds = (0, react_1.useMemo)(() => data.map((row, i) => ({ row, id: getRowId ? getRowId(row, i) : String(i) })), [data, getRowId]);
66
+ const filterColumn = filterColumnId ? columns.find((c) => c.id === filterColumnId) : undefined;
67
+ const filtered = (0, react_1.useMemo)(() => {
68
+ if (!filterColumn || filter.trim() === '')
69
+ return withIds;
70
+ const needle = filter.toLowerCase();
71
+ return withIds.filter(({ row }) => filterText(filterColumn, row).toLowerCase().includes(needle));
72
+ }, [withIds, filterColumn, filter]);
73
+ const sorted = (0, react_1.useMemo)(() => {
74
+ if (!sorting)
75
+ return filtered;
76
+ const column = columns.find((c) => c.id === sorting.id);
77
+ if (!column)
78
+ return filtered;
79
+ const keyed = filtered.map((entry) => ({ entry, key: sortKey(column, entry.row) }));
80
+ keyed.sort((a, b) => (a.key < b.key ? -1 : a.key > b.key ? 1 : 0));
81
+ if (sorting.desc)
82
+ keyed.reverse();
83
+ return keyed.map((k) => k.entry);
84
+ }, [filtered, columns, sorting]);
85
+ const pageCount = pageSize > 0 ? Math.max(1, Math.ceil(sorted.length / pageSize)) : 1;
86
+ const paged = pageSize > 0 ? sorted.slice(pageIndex * pageSize, pageIndex * pageSize + pageSize) : sorted;
87
+ const visibleColumns = columns.filter((c) => hidden[c.id] !== true);
88
+ const hideable = columns.filter((c) => c.enableHiding !== false);
89
+ const setSelectedFor = (id, value) => {
90
+ const next = { ...selected, [id]: value };
91
+ setSelected(next);
92
+ onRowSelectionChange?.(withIds.filter((e) => next[e.id]).map((e) => e.row));
93
+ };
94
+ const toggleAllPage = (value) => {
95
+ const next = { ...selected };
96
+ for (const entry of paged)
97
+ next[entry.id] = value;
98
+ setSelected(next);
99
+ onRowSelectionChange?.(withIds.filter((e) => next[e.id]).map((e) => e.row));
100
+ };
101
+ const rowApi = (entry) => ({
102
+ id: entry.id,
103
+ original: entry.row,
104
+ getValue: (columnId) => {
105
+ const column = columns.find((c) => c.id === columnId);
106
+ return column ? cellValue(column, entry.row) : undefined;
107
+ },
108
+ getIsSelected: () => selected[entry.id] === true,
109
+ toggleSelected: (value) => setSelectedFor(entry.id, value ?? !selected[entry.id]),
110
+ });
111
+ const columnApi = (column) => ({
112
+ id: column.id,
113
+ getCanSort: () => column.enableSorting !== false,
114
+ getIsSorted: () => (sorting?.id === column.id ? (sorting.desc ? 'desc' : 'asc') : false),
115
+ toggleSorting: (desc = false) => {
116
+ if (column.enableSorting === false)
117
+ return;
118
+ setSorting({ id: column.id, desc });
119
+ },
120
+ getCanHide: () => column.enableHiding !== false,
121
+ getIsVisible: () => hidden[column.id] !== true,
122
+ toggleVisibility: (visible) => setHidden((h) => ({ ...h, [column.id]: visible === undefined ? h[column.id] !== true : !visible })),
123
+ });
124
+ const pageIds = paged.map((e) => e.id);
125
+ const allPageSelected = pageIds.length > 0 && pageIds.every((id) => selected[id]);
126
+ const somePageSelected = pageIds.some((id) => selected[id]);
127
+ const table = {
128
+ getColumn: (id) => {
129
+ const column = columns.find((c) => c.id === id);
130
+ return column ? columnApi(column) : undefined;
131
+ },
132
+ getAllColumns: () => columns.map(columnApi),
133
+ getRowModel: () => ({ rows: paged.map(rowApi) }),
134
+ getFilteredRowModel: () => ({ rows: filtered.map(rowApi) }),
135
+ getFilteredSelectedRowModel: () => ({ rows: filtered.filter((e) => selected[e.id]).map(rowApi) }),
136
+ getIsAllPageRowsSelected: () => allPageSelected,
137
+ getIsSomePageRowsSelected: () => somePageSelected,
138
+ toggleAllPageRowsSelected: (value) => toggleAllPage(value ?? !allPageSelected),
139
+ getCanPreviousPage: () => pageIndex > 0,
140
+ getCanNextPage: () => pageIndex < pageCount - 1,
141
+ previousPage: () => setPageIndex((p) => Math.max(0, p - 1)),
142
+ nextPage: () => setPageIndex((p) => Math.min(pageCount - 1, p + 1)),
143
+ getPageCount: () => pageCount,
144
+ };
145
+ const selectedCount = table.getFilteredSelectedRowModel().rows.length;
146
+ const filteredCount = table.getFilteredRowModel().rows.length;
147
+ const trackList = visibleColumns.map((c) => track(c.width)).join(' ');
148
+ const headerContent = (column) => {
149
+ if (column.id === 'select')
150
+ return ((0, jsx_runtime_1.jsx)(checkbox_1.Checkbox, { "aria-label": "Select all", checked: allPageSelected ? true : somePageSelected ? 'indeterminate' : false, onCheckedChange: (value) => toggleAllPage(!!value) }));
151
+ if (typeof column.header === 'function')
152
+ return column.header({ column: columnApi(column) });
153
+ return (0, ink_1.ink)(column.header ?? column.id, gui_1.SizableText, { size: '$2', fontWeight: '600', color: '$quiet' });
154
+ };
155
+ const cellContent = (column, entry) => {
156
+ if (column.id === 'select')
157
+ return ((0, jsx_runtime_1.jsx)(checkbox_1.Checkbox, { "aria-label": "Select row", checked: selected[entry.id] === true, onCheckedChange: (value) => setSelectedFor(entry.id, !!value) }));
158
+ if (column.cell)
159
+ return column.cell({ row: rowApi(entry) });
160
+ return (0, ink_1.ink)(String(cellValue(column, entry.row) ?? ''), gui_1.SizableText, { size: '$2' });
161
+ };
162
+ const ariaSort = (column) => {
163
+ if (sorting?.id !== column.id)
164
+ return 'none';
165
+ return sorting.desc ? 'descending' : 'ascending';
166
+ };
167
+ return ((0, jsx_runtime_1.jsxs)(gui_1.YStack, { ...(0, slot_1.slot)('data-table'), width: "100%", gap: "$3", children: [(filterColumnId || hideable.length > 0) && ((0, jsx_runtime_1.jsxs)(gui_1.XStack, { ...(0, slot_1.slot)('data-table-toolbar'), items: "center", gap: "$2", children: [filterColumnId && ((0, jsx_runtime_1.jsx)(input_1.Input, { ...(0, slot_1.slot)('data-table-filter'), placeholder: filterPlaceholder, value: filter, onChangeText: setFilter, maxW: 360, width: "100%" })), hideable.length > 0 && ((0, jsx_runtime_1.jsxs)(dropdown_menu_1.DropdownMenu, { children: [(0, jsx_runtime_1.jsx)(dropdown_menu_1.DropdownMenuTrigger, { asChild: true, children: (0, jsx_runtime_1.jsxs)(button_1.Button, { ...(0, slot_1.slot)('data-table-view-options'), variant: "outline", size: "sm", ml: "auto", children: ["Columns", (0, jsx_runtime_1.jsx)(lucide_icons_2_1.ChevronDown, { size: 14 })] }) }), (0, jsx_runtime_1.jsx)(dropdown_menu_1.DropdownMenuContent, { align: "end", children: hideable.map((column) => ((0, jsx_runtime_1.jsx)(dropdown_menu_1.DropdownMenuCheckboxItem, { checked: hidden[column.id] !== true, onCheckedChange: (value) => setHidden((h) => ({ ...h, [column.id]: !value })), children: column.id }, column.id))) })] }))] })), (0, jsx_runtime_1.jsxs)(gui_1.YStack, { ...(0, slot_1.slot)('data-table-grid'), role: "table", rounded: "$3", borderWidth: 1, borderColor: "$borderColor", overflow: "hidden", children: [(0, jsx_runtime_1.jsx)(gui_1.YStack, { borderBottomWidth: 1, borderBottomColor: "$borderColor", bg: "$panel", children: (0, jsx_runtime_1.jsx)(grid_1.Grid, { role: "row", ...(0, slot_1.slot)('data-table-header-row'), columns: trackList, gap: 0, children: visibleColumns.map((column) => ((0, jsx_runtime_1.jsx)(grid_1.Cell, { role: "columnheader", "aria-sort": ariaSort(column), ...(0, slot_1.slot)('data-table-head'), style: { display: 'flex', alignItems: 'center', padding: 12, justifyContent: justify(column.align) }, children: headerContent(column) }, column.id))) }) }), paged.length === 0 ? ((0, jsx_runtime_1.jsx)(gui_1.YStack, { ...(0, slot_1.slot)('data-table-empty'), height: 96, items: "center", justify: "center", children: (0, jsx_runtime_1.jsx)(gui_1.SizableText, { size: "$2", color: "$quiet", children: emptyMessage }) })) : (paged.map((entry) => {
168
+ const isSelected = selected[entry.id] === true;
169
+ return ((0, jsx_runtime_1.jsx)(gui_1.YStack, { "data-state": isSelected ? 'selected' : undefined, borderBottomWidth: 1, borderBottomColor: "$borderColor", bg: isSelected ? '$hover' : undefined, children: (0, jsx_runtime_1.jsx)(grid_1.Grid, { role: "row", ...(0, slot_1.slot)('data-table-row'), "data-state": isSelected ? 'selected' : undefined, columns: trackList, gap: 0, children: visibleColumns.map((column) => ((0, jsx_runtime_1.jsx)(grid_1.Cell, { role: "cell", ...(0, slot_1.slot)('data-table-cell'), style: { display: 'flex', alignItems: 'center', padding: 12, justifyContent: justify(column.align) }, children: cellContent(column, entry) }, column.id))) }) }, entry.id));
170
+ }))] }), (0, jsx_runtime_1.jsxs)(gui_1.XStack, { ...(0, slot_1.slot)('data-table-footer'), items: "center", justify: "space-between", children: [(0, jsx_runtime_1.jsxs)(gui_1.SizableText, { size: "$2", color: "$quiet", children: [selectedCount, " of ", filteredCount, " row(s) selected."] }), pageSize > 0 && ((0, jsx_runtime_1.jsxs)(gui_1.XStack, { ...(0, slot_1.slot)('data-table-pagination'), gap: "$2", children: [(0, jsx_runtime_1.jsx)(button_1.Button, { variant: "outline", size: "sm", disabled: !table.getCanPreviousPage(), "aria-disabled": !table.getCanPreviousPage(), onClick: () => table.previousPage(), children: "Previous" }), (0, jsx_runtime_1.jsx)(button_1.Button, { variant: "outline", size: "sm", disabled: !table.getCanNextPage(), "aria-disabled": !table.getCanNextPage(), onClick: () => table.nextPage(), children: "Next" })] }))] })] }));
171
+ }
@@ -0,0 +1,91 @@
1
+ import { type ReactNode } from 'react';
2
+ export type DataTableAlign = 'left' | 'center' | 'right';
3
+ export type DataTableSortDirection = 'asc' | 'desc' | false;
4
+ /** What a column can be asked and told, independent of any one row. */
5
+ export interface DataTableColumnApi<TData> {
6
+ readonly id: string;
7
+ getCanSort: () => boolean;
8
+ getIsSorted: () => DataTableSortDirection;
9
+ toggleSorting: (desc?: boolean) => void;
10
+ getCanHide: () => boolean;
11
+ getIsVisible: () => boolean;
12
+ toggleVisibility: (visible?: boolean) => void;
13
+ }
14
+ /** One row, and the handful of things a `cell` renderer needs from it. */
15
+ export interface DataTableRow<TData> {
16
+ readonly id: string;
17
+ readonly original: TData;
18
+ getValue: (columnId: string) => unknown;
19
+ getIsSelected: () => boolean;
20
+ toggleSelected: (value?: boolean) => void;
21
+ }
22
+ export interface DataTableColumnDef<TData> {
23
+ id: string;
24
+ /** Read directly off the row when no `cell` is given. */
25
+ accessorKey?: keyof TData;
26
+ header?: ReactNode | ((ctx: {
27
+ column: DataTableColumnApi<TData>;
28
+ }) => ReactNode);
29
+ cell?: (ctx: {
30
+ row: DataTableRow<TData>;
31
+ }) => ReactNode;
32
+ /** A CSS grid track for this column. Defaults to `1fr`. */
33
+ width?: number | string;
34
+ align?: DataTableAlign;
35
+ enableSorting?: boolean;
36
+ enableHiding?: boolean;
37
+ /** The value compared when this column is the active sort. Defaults to `accessorKey`. */
38
+ sortingValue?: (row: TData) => string | number;
39
+ /** The text searched when this column is the active filter. Defaults to `accessorKey`. */
40
+ filterValue?: (row: TData) => string;
41
+ }
42
+ /** The aggregate operations a custom `header`/`cell` can reach for — one
43
+ * object, built fresh each render, mirroring the guide's own `table`. */
44
+ export interface DataTableInstance<TData> {
45
+ getColumn: (id: string) => DataTableColumnApi<TData> | undefined;
46
+ getAllColumns: () => DataTableColumnApi<TData>[];
47
+ getRowModel: () => {
48
+ rows: DataTableRow<TData>[];
49
+ };
50
+ getFilteredRowModel: () => {
51
+ rows: DataTableRow<TData>[];
52
+ };
53
+ getFilteredSelectedRowModel: () => {
54
+ rows: DataTableRow<TData>[];
55
+ };
56
+ getIsAllPageRowsSelected: () => boolean;
57
+ getIsSomePageRowsSelected: () => boolean;
58
+ toggleAllPageRowsSelected: (value?: boolean) => void;
59
+ getCanPreviousPage: () => boolean;
60
+ getCanNextPage: () => boolean;
61
+ previousPage: () => void;
62
+ nextPage: () => void;
63
+ getPageCount: () => number;
64
+ }
65
+ export interface DataTableProps<TData> {
66
+ columns: DataTableColumnDef<TData>[];
67
+ data: TData[];
68
+ /** Identifies a row for selection/sort stability. Defaults to its index. */
69
+ getRowId?: (row: TData, index: number) => string;
70
+ /** The column id the toolbar's text field searches. Omit to hide the field. */
71
+ filterColumnId?: string;
72
+ filterPlaceholder?: string;
73
+ /** Rows per page. `0` (the default) shows every row with no pager. */
74
+ pageSize?: number;
75
+ emptyMessage?: ReactNode;
76
+ onRowSelectionChange?: (rows: TData[]) => void;
77
+ }
78
+ export interface DataTableColumnHeaderProps<TData> {
79
+ column: DataTableColumnApi<TData>;
80
+ title: ReactNode;
81
+ className?: string;
82
+ }
83
+ /**
84
+ * A column's header cell: plain text when the column cannot sort, otherwise a
85
+ * button that toggles ascending/descending and shows which way it is set —
86
+ * the same affordance the reference `data-table-demo.tsx` wires up by hand.
87
+ */
88
+ declare function DataTableColumnHeader<TData>({ column, title, className }: DataTableColumnHeaderProps<TData>): import("react").JSX.Element;
89
+ declare function DataTable<TData>({ columns, data, getRowId, filterColumnId, filterPlaceholder, pageSize, emptyMessage, onRowSelectionChange, }: DataTableProps<TData>): import("react").JSX.Element;
90
+ export { DataTable, DataTableColumnHeader };
91
+ //# sourceMappingURL=data-table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/data-table.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,169 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ /**
4
+ * DataTable — a sortable, filterable, paginated grid over an array of rows,
5
+ * driven by a column-definition array exactly the way the upstream guide's
6
+ * `ColumnDef[]` is: a column names an `accessorKey`, an optional `header` and
7
+ * `cell` renderer, and whether it can be sorted or hidden. Two ids carry
8
+ * meaning by convention, matched by the reference implementation's own demo —
9
+ * a column `id: 'select'` gets its checkbox for free, everything else (an
10
+ * `id: 'actions'` column included) is rendered by whatever `cell` you give it.
11
+ *
12
+ * There is no TanStack Table here: the workspace does not carry it, and a
13
+ * generic column model over a plain array needs none of what a headless
14
+ * library buys a real backend — grouping, virtualization, server-side
15
+ * pagination. Sorting, filtering, visibility, selection and pagination are
16
+ * ~120 lines of arithmetic over arrays, kept in one `useState` each, matching
17
+ * the guide's own `SortingState`/`ColumnFiltersState`/`VisibilityState` split.
18
+ *
19
+ * The grid is `@hanzo/ui`'s own `Grid`/`Cell` — a real CSS grid, which is the
20
+ * one correct host for a two-dimensional layout — with the WAI-ARIA
21
+ * `table`/`row`/`columnheader`/`cell` roles standing in for the semantics a
22
+ * native `<table>` would otherwise carry.
23
+ */
24
+ import { SizableText, XStack, YStack } from '@hanzo/gui';
25
+ import { ArrowDown, ArrowUp, ArrowUpDown, ChevronDown } from '@hanzogui/lucide-icons-2';
26
+ import { useMemo, useState } from 'react';
27
+ import { Cell, Grid } from '../../grid.js';
28
+ import { Button } from './button.js';
29
+ import { Checkbox } from './checkbox.js';
30
+ import { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuTrigger, } from './dropdown-menu.js';
31
+ import { ink } from './ink.js';
32
+ import { Input } from './input.js';
33
+ import { slot } from './slot.js';
34
+ /**
35
+ * A column's header cell: plain text when the column cannot sort, otherwise a
36
+ * button that toggles ascending/descending and shows which way it is set —
37
+ * the same affordance the reference `data-table-demo.tsx` wires up by hand.
38
+ */
39
+ function DataTableColumnHeader({ column, title, className }) {
40
+ if (!column.getCanSort())
41
+ return (_jsx(SizableText, { size: "$2", fontWeight: "600", color: "$quiet", className: className, children: title }));
42
+ const sorted = column.getIsSorted();
43
+ return (_jsxs(Button, { ...slot('data-table-column-header'), variant: "ghost", size: "sm", className: className, onClick: () => column.toggleSorting(sorted === 'asc'), children: [title, sorted === 'desc' ? _jsx(ArrowDown, { size: 14 }) : sorted === 'asc' ? _jsx(ArrowUp, { size: 14 }) : _jsx(ArrowUpDown, { size: 14 })] }));
44
+ }
45
+ const cellValue = (column, row) => column.accessorKey !== undefined ? row[column.accessorKey] : undefined;
46
+ const sortKey = (column, row) => {
47
+ if (column.sortingValue)
48
+ return column.sortingValue(row);
49
+ const v = cellValue(column, row);
50
+ return typeof v === 'number' ? v : String(v ?? '');
51
+ };
52
+ const filterText = (column, row) => column.filterValue ? column.filterValue(row) : String(cellValue(column, row) ?? '');
53
+ const track = (width) => width === undefined ? '1fr' : typeof width === 'number' ? `${width}px` : width;
54
+ const justify = (a) => a === 'right' ? 'flex-end' : a === 'center' ? 'center' : 'flex-start';
55
+ function DataTable({ columns, data, getRowId, filterColumnId, filterPlaceholder = 'Filter…', pageSize = 0, emptyMessage = 'No results.', onRowSelectionChange, }) {
56
+ const [sorting, setSorting] = useState(null);
57
+ const [filter, setFilter] = useState('');
58
+ const [hidden, setHidden] = useState({});
59
+ const [selected, setSelected] = useState({});
60
+ const [pageIndex, setPageIndex] = useState(0);
61
+ const withIds = useMemo(() => data.map((row, i) => ({ row, id: getRowId ? getRowId(row, i) : String(i) })), [data, getRowId]);
62
+ const filterColumn = filterColumnId ? columns.find((c) => c.id === filterColumnId) : undefined;
63
+ const filtered = useMemo(() => {
64
+ if (!filterColumn || filter.trim() === '')
65
+ return withIds;
66
+ const needle = filter.toLowerCase();
67
+ return withIds.filter(({ row }) => filterText(filterColumn, row).toLowerCase().includes(needle));
68
+ }, [withIds, filterColumn, filter]);
69
+ const sorted = useMemo(() => {
70
+ if (!sorting)
71
+ return filtered;
72
+ const column = columns.find((c) => c.id === sorting.id);
73
+ if (!column)
74
+ return filtered;
75
+ const keyed = filtered.map((entry) => ({ entry, key: sortKey(column, entry.row) }));
76
+ keyed.sort((a, b) => (a.key < b.key ? -1 : a.key > b.key ? 1 : 0));
77
+ if (sorting.desc)
78
+ keyed.reverse();
79
+ return keyed.map((k) => k.entry);
80
+ }, [filtered, columns, sorting]);
81
+ const pageCount = pageSize > 0 ? Math.max(1, Math.ceil(sorted.length / pageSize)) : 1;
82
+ const paged = pageSize > 0 ? sorted.slice(pageIndex * pageSize, pageIndex * pageSize + pageSize) : sorted;
83
+ const visibleColumns = columns.filter((c) => hidden[c.id] !== true);
84
+ const hideable = columns.filter((c) => c.enableHiding !== false);
85
+ const setSelectedFor = (id, value) => {
86
+ const next = { ...selected, [id]: value };
87
+ setSelected(next);
88
+ onRowSelectionChange?.(withIds.filter((e) => next[e.id]).map((e) => e.row));
89
+ };
90
+ const toggleAllPage = (value) => {
91
+ const next = { ...selected };
92
+ for (const entry of paged)
93
+ next[entry.id] = value;
94
+ setSelected(next);
95
+ onRowSelectionChange?.(withIds.filter((e) => next[e.id]).map((e) => e.row));
96
+ };
97
+ const rowApi = (entry) => ({
98
+ id: entry.id,
99
+ original: entry.row,
100
+ getValue: (columnId) => {
101
+ const column = columns.find((c) => c.id === columnId);
102
+ return column ? cellValue(column, entry.row) : undefined;
103
+ },
104
+ getIsSelected: () => selected[entry.id] === true,
105
+ toggleSelected: (value) => setSelectedFor(entry.id, value ?? !selected[entry.id]),
106
+ });
107
+ const columnApi = (column) => ({
108
+ id: column.id,
109
+ getCanSort: () => column.enableSorting !== false,
110
+ getIsSorted: () => (sorting?.id === column.id ? (sorting.desc ? 'desc' : 'asc') : false),
111
+ toggleSorting: (desc = false) => {
112
+ if (column.enableSorting === false)
113
+ return;
114
+ setSorting({ id: column.id, desc });
115
+ },
116
+ getCanHide: () => column.enableHiding !== false,
117
+ getIsVisible: () => hidden[column.id] !== true,
118
+ toggleVisibility: (visible) => setHidden((h) => ({ ...h, [column.id]: visible === undefined ? h[column.id] !== true : !visible })),
119
+ });
120
+ const pageIds = paged.map((e) => e.id);
121
+ const allPageSelected = pageIds.length > 0 && pageIds.every((id) => selected[id]);
122
+ const somePageSelected = pageIds.some((id) => selected[id]);
123
+ const table = {
124
+ getColumn: (id) => {
125
+ const column = columns.find((c) => c.id === id);
126
+ return column ? columnApi(column) : undefined;
127
+ },
128
+ getAllColumns: () => columns.map(columnApi),
129
+ getRowModel: () => ({ rows: paged.map(rowApi) }),
130
+ getFilteredRowModel: () => ({ rows: filtered.map(rowApi) }),
131
+ getFilteredSelectedRowModel: () => ({ rows: filtered.filter((e) => selected[e.id]).map(rowApi) }),
132
+ getIsAllPageRowsSelected: () => allPageSelected,
133
+ getIsSomePageRowsSelected: () => somePageSelected,
134
+ toggleAllPageRowsSelected: (value) => toggleAllPage(value ?? !allPageSelected),
135
+ getCanPreviousPage: () => pageIndex > 0,
136
+ getCanNextPage: () => pageIndex < pageCount - 1,
137
+ previousPage: () => setPageIndex((p) => Math.max(0, p - 1)),
138
+ nextPage: () => setPageIndex((p) => Math.min(pageCount - 1, p + 1)),
139
+ getPageCount: () => pageCount,
140
+ };
141
+ const selectedCount = table.getFilteredSelectedRowModel().rows.length;
142
+ const filteredCount = table.getFilteredRowModel().rows.length;
143
+ const trackList = visibleColumns.map((c) => track(c.width)).join(' ');
144
+ const headerContent = (column) => {
145
+ if (column.id === 'select')
146
+ return (_jsx(Checkbox, { "aria-label": "Select all", checked: allPageSelected ? true : somePageSelected ? 'indeterminate' : false, onCheckedChange: (value) => toggleAllPage(!!value) }));
147
+ if (typeof column.header === 'function')
148
+ return column.header({ column: columnApi(column) });
149
+ return ink(column.header ?? column.id, SizableText, { size: '$2', fontWeight: '600', color: '$quiet' });
150
+ };
151
+ const cellContent = (column, entry) => {
152
+ if (column.id === 'select')
153
+ return (_jsx(Checkbox, { "aria-label": "Select row", checked: selected[entry.id] === true, onCheckedChange: (value) => setSelectedFor(entry.id, !!value) }));
154
+ if (column.cell)
155
+ return column.cell({ row: rowApi(entry) });
156
+ return ink(String(cellValue(column, entry.row) ?? ''), SizableText, { size: '$2' });
157
+ };
158
+ const ariaSort = (column) => {
159
+ if (sorting?.id !== column.id)
160
+ return 'none';
161
+ return sorting.desc ? 'descending' : 'ascending';
162
+ };
163
+ return (_jsxs(YStack, { ...slot('data-table'), width: "100%", gap: "$3", children: [(filterColumnId || hideable.length > 0) && (_jsxs(XStack, { ...slot('data-table-toolbar'), items: "center", gap: "$2", children: [filterColumnId && (_jsx(Input, { ...slot('data-table-filter'), placeholder: filterPlaceholder, value: filter, onChangeText: setFilter, maxW: 360, width: "100%" })), hideable.length > 0 && (_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsxs(Button, { ...slot('data-table-view-options'), variant: "outline", size: "sm", ml: "auto", children: ["Columns", _jsx(ChevronDown, { size: 14 })] }) }), _jsx(DropdownMenuContent, { align: "end", children: hideable.map((column) => (_jsx(DropdownMenuCheckboxItem, { checked: hidden[column.id] !== true, onCheckedChange: (value) => setHidden((h) => ({ ...h, [column.id]: !value })), children: column.id }, column.id))) })] }))] })), _jsxs(YStack, { ...slot('data-table-grid'), role: "table", rounded: "$3", borderWidth: 1, borderColor: "$borderColor", overflow: "hidden", children: [_jsx(YStack, { borderBottomWidth: 1, borderBottomColor: "$borderColor", bg: "$panel", children: _jsx(Grid, { role: "row", ...slot('data-table-header-row'), columns: trackList, gap: 0, children: visibleColumns.map((column) => (_jsx(Cell, { role: "columnheader", "aria-sort": ariaSort(column), ...slot('data-table-head'), style: { display: 'flex', alignItems: 'center', padding: 12, justifyContent: justify(column.align) }, children: headerContent(column) }, column.id))) }) }), paged.length === 0 ? (_jsx(YStack, { ...slot('data-table-empty'), height: 96, items: "center", justify: "center", children: _jsx(SizableText, { size: "$2", color: "$quiet", children: emptyMessage }) })) : (paged.map((entry) => {
164
+ const isSelected = selected[entry.id] === true;
165
+ return (_jsx(YStack, { "data-state": isSelected ? 'selected' : undefined, borderBottomWidth: 1, borderBottomColor: "$borderColor", bg: isSelected ? '$hover' : undefined, children: _jsx(Grid, { role: "row", ...slot('data-table-row'), "data-state": isSelected ? 'selected' : undefined, columns: trackList, gap: 0, children: visibleColumns.map((column) => (_jsx(Cell, { role: "cell", ...slot('data-table-cell'), style: { display: 'flex', alignItems: 'center', padding: 12, justifyContent: justify(column.align) }, children: cellContent(column, entry) }, column.id))) }) }, entry.id));
166
+ }))] }), _jsxs(XStack, { ...slot('data-table-footer'), items: "center", justify: "space-between", children: [_jsxs(SizableText, { size: "$2", color: "$quiet", children: [selectedCount, " of ", filteredCount, " row(s) selected."] }), pageSize > 0 && (_jsxs(XStack, { ...slot('data-table-pagination'), gap: "$2", children: [_jsx(Button, { variant: "outline", size: "sm", disabled: !table.getCanPreviousPage(), "aria-disabled": !table.getCanPreviousPage(), onClick: () => table.previousPage(), children: "Previous" }), _jsx(Button, { variant: "outline", size: "sm", disabled: !table.getCanNextPage(), "aria-disabled": !table.getCanNextPage(), onClick: () => table.nextPage(), children: "Next" })] }))] })] }));
167
+ }
168
+ export { DataTable, DataTableColumnHeader };
169
+ //# sourceMappingURL=data-table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table.js","sourceRoot":"","sources":["../../../src/backends/gui/data-table.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ 'use client';"use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.DatePicker = DatePicker;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ /**
7
+ * DatePicker — a button that opens a calendar in a popover, for picking one
8
+ * date (`mode="single"`, the default) or a range (`mode="range"`), with an
9
+ * optional list of quick presets shown above the calendar.
10
+ *
11
+ * The trigger reads the current pick, or `placeholder` while empty. `selected`
12
+ * and `onSelect` name the value the same way `Calendar` does, since this is a
13
+ * `Calendar` with a trigger and a panel in front of it, not a different
14
+ * contract. Picking a single date closes the popover; a range stays open
15
+ * until both ends are set. `disabled` marks days that cannot be picked, same
16
+ * contract as `Calendar`.
17
+ */
18
+ const gui_1 = require("@hanzo/gui");
19
+ const lucide_icons_2_1 = require("@hanzogui/lucide-icons-2");
20
+ const react_1 = require("react");
21
+ const button_1 = require("./button.cjs");
22
+ const calendar_1 = require("./calendar.cjs");
23
+ const popover_1 = require("./popover.cjs");
24
+ const select_1 = require("./select.cjs");
25
+ const slot_1 = require("./slot.cjs");
26
+ const MONTHS = [
27
+ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
28
+ 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec',
29
+ ];
30
+ const format = (d) => `${MONTHS[d.getMonth()]} ${d.getDate()}, ${d.getFullYear()}`;
31
+ const sameDay = (a, b) => a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();
32
+ function DatePicker(props) {
33
+ const { placeholder = 'Pick a date', disabled, className, width = 280 } = props;
34
+ const isRange = props.mode === 'range';
35
+ const [open, setOpen] = (0, react_1.useState)(false);
36
+ const [ownDate, setOwnDate] = (0, react_1.useState)(isRange ? undefined : props.selected);
37
+ const [ownRange, setOwnRange] = (0, react_1.useState)(isRange ? props.selected : undefined);
38
+ const date = !isRange ? (props.selected ?? ownDate) : undefined;
39
+ const range = isRange ? (props.selected ?? ownRange) : undefined;
40
+ const selectDate = (d) => {
41
+ setOwnDate(d);
42
+ props.onSelect?.(d);
43
+ setOpen(false);
44
+ };
45
+ const selectRange = (r) => {
46
+ setOwnRange(r);
47
+ props.onSelect?.(r);
48
+ };
49
+ const label = isRange
50
+ ? range?.from
51
+ ? range.to && !sameDay(range.to, range.from)
52
+ ? `${format(range.from)} - ${format(range.to)}`
53
+ : format(range.from)
54
+ : placeholder
55
+ : date
56
+ ? format(date)
57
+ : placeholder;
58
+ const empty = isRange ? !range?.from : !date;
59
+ const presets = !isRange ? props.presets : undefined;
60
+ return ((0, jsx_runtime_1.jsxs)(popover_1.Popover, { open: open, onOpenChange: setOpen, children: [(0, jsx_runtime_1.jsx)(popover_1.PopoverTrigger, { asChild: true, children: (0, jsx_runtime_1.jsxs)(button_1.Button, { ...(0, slot_1.slot)('date-picker-trigger'), "data-empty": empty || undefined, variant: "outline", width: width, justify: "flex-start", className: className, children: [(0, jsx_runtime_1.jsx)(lucide_icons_2_1.Calendar, { size: 16 }), empty ? (0, jsx_runtime_1.jsx)(gui_1.SizableText, { color: "$quiet", children: label }) : label] }) }), (0, jsx_runtime_1.jsxs)(popover_1.PopoverContent, { ...(0, slot_1.slot)('date-picker-content'), width: "auto", p: 0, align: "start", children: [presets && presets.length > 0 && ((0, jsx_runtime_1.jsx)(gui_1.YStack, { ...(0, slot_1.slot)('date-picker-presets'), p: "$2", borderBottomWidth: 1, borderColor: "$borderColor", children: (0, jsx_runtime_1.jsxs)(select_1.Select, { onValueChange: (value) => {
61
+ const days = Number(value);
62
+ const picked = new Date();
63
+ picked.setDate(picked.getDate() + days);
64
+ selectDate(picked);
65
+ }, children: [(0, jsx_runtime_1.jsx)(select_1.SelectTrigger, { ...(0, slot_1.slot)('date-picker-preset-trigger'), children: (0, jsx_runtime_1.jsx)(select_1.SelectValue, { placeholder: "Select" }) }), (0, jsx_runtime_1.jsx)(select_1.SelectContent, { children: presets.map((preset) => ((0, jsx_runtime_1.jsx)(select_1.SelectItem, { value: String(preset.days), children: preset.label }, preset.days))) })] }) })), isRange ? ((0, jsx_runtime_1.jsx)(calendar_1.Calendar, { mode: "range", selected: range, onSelect: selectRange, defaultMonth: range?.from, numberOfMonths: props.numberOfMonths ?? 2, disabled: disabled, initialFocus: true })) : ((0, jsx_runtime_1.jsx)(calendar_1.Calendar, { mode: "single", selected: date, onSelect: selectDate, disabled: disabled, initialFocus: true }))] })] }));
66
+ }
@@ -0,0 +1,29 @@
1
+ import type { CalendarRange } from './calendar.js';
2
+ /** A quick pick offered above the calendar: `label` shown, `days` from today. */
3
+ export interface DatePickerPreset {
4
+ label: string;
5
+ days: number;
6
+ }
7
+ interface DatePickerSharedProps {
8
+ placeholder?: string;
9
+ disabled?: (date: Date) => boolean;
10
+ className?: string;
11
+ width?: number;
12
+ }
13
+ export interface DatePickerSingleProps extends DatePickerSharedProps {
14
+ mode?: 'single';
15
+ selected?: Date;
16
+ onSelect?: (date: Date | undefined) => void;
17
+ /** Quick picks (e.g. "Today", "In a week") shown above the calendar. Single mode only. */
18
+ presets?: DatePickerPreset[];
19
+ }
20
+ export interface DatePickerRangeProps extends DatePickerSharedProps {
21
+ mode: 'range';
22
+ selected?: CalendarRange;
23
+ onSelect?: (range: CalendarRange | undefined) => void;
24
+ numberOfMonths?: number;
25
+ }
26
+ export type DatePickerProps = DatePickerSingleProps | DatePickerRangeProps;
27
+ export declare function DatePicker(props: DatePickerProps): import("react").JSX.Element;
28
+ export {};
29
+ //# sourceMappingURL=date-picker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-picker.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/date-picker.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAe/C,iFAAiF;AACjF,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;CACb;AAED,UAAU,qBAAqB;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAA;IAClC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,qBAAsB,SAAQ,qBAAqB;IAClE,IAAI,CAAC,EAAE,QAAQ,CAAA;IACf,QAAQ,CAAC,EAAE,IAAI,CAAA;IACf,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,KAAK,IAAI,CAAA;IAC3C,0FAA0F;IAC1F,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAA;CAC7B;AAED,MAAM,WAAW,oBAAqB,SAAQ,qBAAqB;IACjE,IAAI,EAAE,OAAO,CAAA;IACb,QAAQ,CAAC,EAAE,aAAa,CAAA;IACxB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,KAAK,IAAI,CAAA;IACrD,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,MAAM,eAAe,GAAG,qBAAqB,GAAG,oBAAoB,CAAA;AAE1E,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,+BA6FhD"}