@databricks/appkit-ui 0.2.0 → 0.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 (489) hide show
  1. package/CLAUDE.md +121 -1228
  2. package/NOTICE.md +1 -1
  3. package/bin/appkit.js +3 -0
  4. package/dist/cli/commands/docs.js +47 -0
  5. package/dist/cli/commands/docs.js.map +1 -0
  6. package/dist/cli/commands/generate-types.js +38 -0
  7. package/dist/cli/commands/generate-types.js.map +1 -0
  8. package/dist/cli/commands/lint.js +104 -0
  9. package/dist/cli/commands/lint.js.map +1 -0
  10. package/dist/cli/commands/setup.js +121 -0
  11. package/dist/cli/commands/setup.js.map +1 -0
  12. package/dist/cli/index.d.ts +1 -0
  13. package/dist/cli/index.js +24 -0
  14. package/dist/cli/index.js.map +1 -0
  15. package/dist/js/arrow/arrow-client.d.ts +48 -0
  16. package/dist/js/arrow/arrow-client.d.ts.map +1 -1
  17. package/dist/js/arrow/arrow-client.js +51 -3
  18. package/dist/js/arrow/arrow-client.js.map +1 -1
  19. package/dist/react/charts/area/index.d.ts +6 -17
  20. package/dist/react/charts/area/index.d.ts.map +1 -1
  21. package/dist/react/charts/area/index.js +5 -17
  22. package/dist/react/charts/area/index.js.map +1 -1
  23. package/dist/react/charts/bar/index.d.ts +5 -26
  24. package/dist/react/charts/bar/index.d.ts.map +1 -1
  25. package/dist/react/charts/bar/index.js +4 -26
  26. package/dist/react/charts/bar/index.js.map +1 -1
  27. package/dist/react/charts/create-chart.js +1 -2
  28. package/dist/react/charts/create-chart.js.map +1 -1
  29. package/dist/react/charts/heatmap/index.d.ts +7 -22
  30. package/dist/react/charts/heatmap/index.d.ts.map +1 -1
  31. package/dist/react/charts/heatmap/index.js +6 -22
  32. package/dist/react/charts/heatmap/index.js.map +1 -1
  33. package/dist/react/charts/line/index.d.ts +6 -18
  34. package/dist/react/charts/line/index.d.ts.map +1 -1
  35. package/dist/react/charts/line/index.js +5 -18
  36. package/dist/react/charts/line/index.js.map +1 -1
  37. package/dist/react/charts/normalize.js +16 -16
  38. package/dist/react/charts/normalize.js.map +1 -1
  39. package/dist/react/charts/pie/index.d.ts +10 -32
  40. package/dist/react/charts/pie/index.d.ts.map +1 -1
  41. package/dist/react/charts/pie/index.js +9 -32
  42. package/dist/react/charts/pie/index.js.map +1 -1
  43. package/dist/react/charts/radar/index.d.ts +6 -16
  44. package/dist/react/charts/radar/index.d.ts.map +1 -1
  45. package/dist/react/charts/radar/index.js +5 -16
  46. package/dist/react/charts/radar/index.js.map +1 -1
  47. package/dist/react/charts/scatter/index.d.ts +6 -16
  48. package/dist/react/charts/scatter/index.d.ts.map +1 -1
  49. package/dist/react/charts/scatter/index.js +5 -16
  50. package/dist/react/charts/scatter/index.js.map +1 -1
  51. package/dist/react/charts/types.d.ts +0 -5
  52. package/dist/react/charts/types.d.ts.map +1 -1
  53. package/dist/react/charts/types.js.map +1 -1
  54. package/dist/react/charts/wrapper.d.ts +0 -2
  55. package/dist/react/charts/wrapper.d.ts.map +1 -1
  56. package/dist/react/charts/wrapper.js +2 -4
  57. package/dist/react/charts/wrapper.js.map +1 -1
  58. package/dist/react/hooks/types.d.ts +0 -2
  59. package/dist/react/hooks/types.d.ts.map +1 -1
  60. package/dist/react/hooks/use-analytics-query.d.ts +4 -0
  61. package/dist/react/hooks/use-analytics-query.d.ts.map +1 -1
  62. package/dist/react/hooks/use-analytics-query.js +17 -14
  63. package/dist/react/hooks/use-analytics-query.js.map +1 -1
  64. package/dist/react/hooks/use-chart-data.d.ts +0 -2
  65. package/dist/react/hooks/use-chart-data.d.ts.map +1 -1
  66. package/dist/react/hooks/use-chart-data.js +2 -3
  67. package/dist/react/hooks/use-chart-data.js.map +1 -1
  68. package/dist/react/table/data-table.d.ts +4 -1
  69. package/dist/react/table/data-table.d.ts.map +1 -1
  70. package/dist/react/table/data-table.js +4 -1
  71. package/dist/react/table/data-table.js.map +1 -1
  72. package/dist/react/table/table-wrapper.js +5 -6
  73. package/dist/react/table/table-wrapper.js.map +1 -1
  74. package/dist/react/table/types.d.ts.map +1 -1
  75. package/dist/react/ui/accordion.d.ts +9 -5
  76. package/dist/react/ui/accordion.d.ts.map +1 -1
  77. package/dist/react/ui/accordion.js +4 -0
  78. package/dist/react/ui/accordion.js.map +1 -1
  79. package/dist/react/ui/alert-dialog.d.ts +23 -12
  80. package/dist/react/ui/alert-dialog.d.ts.map +1 -1
  81. package/dist/react/ui/alert-dialog.js +11 -0
  82. package/dist/react/ui/alert-dialog.js.map +1 -1
  83. package/dist/react/ui/alert.d.ts +7 -4
  84. package/dist/react/ui/alert.d.ts.map +1 -1
  85. package/dist/react/ui/alert.js +3 -0
  86. package/dist/react/ui/alert.js.map +1 -1
  87. package/dist/react/ui/aspect-ratio.d.ts +3 -2
  88. package/dist/react/ui/aspect-ratio.d.ts.map +1 -1
  89. package/dist/react/ui/aspect-ratio.js +1 -0
  90. package/dist/react/ui/aspect-ratio.js.map +1 -1
  91. package/dist/react/ui/avatar.d.ts +7 -4
  92. package/dist/react/ui/avatar.d.ts.map +1 -1
  93. package/dist/react/ui/avatar.js +3 -0
  94. package/dist/react/ui/avatar.js.map +1 -1
  95. package/dist/react/ui/badge.d.ts +5 -4
  96. package/dist/react/ui/badge.d.ts.map +1 -1
  97. package/dist/react/ui/badge.js +1 -0
  98. package/dist/react/ui/badge.js.map +1 -1
  99. package/dist/react/ui/breadcrumb.d.ts +15 -8
  100. package/dist/react/ui/breadcrumb.d.ts.map +1 -1
  101. package/dist/react/ui/breadcrumb.js +7 -0
  102. package/dist/react/ui/breadcrumb.js.map +1 -1
  103. package/dist/react/ui/button-group.d.ts +9 -6
  104. package/dist/react/ui/button-group.d.ts.map +1 -1
  105. package/dist/react/ui/button-group.js +3 -0
  106. package/dist/react/ui/button-group.js.map +1 -1
  107. package/dist/react/ui/button.d.ts +5 -4
  108. package/dist/react/ui/button.d.ts.map +1 -1
  109. package/dist/react/ui/button.js +1 -0
  110. package/dist/react/ui/button.js.map +1 -1
  111. package/dist/react/ui/calendar.d.ts +5 -3
  112. package/dist/react/ui/calendar.d.ts.map +1 -1
  113. package/dist/react/ui/calendar.js +14 -12
  114. package/dist/react/ui/calendar.js.map +1 -1
  115. package/dist/react/ui/card.d.ts +15 -8
  116. package/dist/react/ui/card.d.ts.map +1 -1
  117. package/dist/react/ui/card.js +7 -0
  118. package/dist/react/ui/card.js.map +1 -1
  119. package/dist/react/ui/carousel.d.ts +11 -6
  120. package/dist/react/ui/carousel.d.ts.map +1 -1
  121. package/dist/react/ui/carousel.js +9 -4
  122. package/dist/react/ui/carousel.js.map +1 -1
  123. package/dist/react/ui/chart.d.ts +6 -5
  124. package/dist/react/ui/chart.d.ts.map +1 -1
  125. package/dist/react/ui/chart.js +2 -1
  126. package/dist/react/ui/chart.js.map +1 -1
  127. package/dist/react/ui/checkbox.d.ts +3 -2
  128. package/dist/react/ui/checkbox.d.ts.map +1 -1
  129. package/dist/react/ui/checkbox.js +1 -0
  130. package/dist/react/ui/checkbox.js.map +1 -1
  131. package/dist/react/ui/collapsible.d.ts +7 -4
  132. package/dist/react/ui/collapsible.d.ts.map +1 -1
  133. package/dist/react/ui/collapsible.js +3 -0
  134. package/dist/react/ui/collapsible.js.map +1 -1
  135. package/dist/react/ui/command.d.ts +19 -10
  136. package/dist/react/ui/command.d.ts.map +1 -1
  137. package/dist/react/ui/command.js +9 -0
  138. package/dist/react/ui/command.js.map +1 -1
  139. package/dist/react/ui/context-menu.d.ts +17 -16
  140. package/dist/react/ui/context-menu.d.ts.map +1 -1
  141. package/dist/react/ui/context-menu.js +1 -0
  142. package/dist/react/ui/context-menu.js.map +1 -1
  143. package/dist/react/ui/dialog.d.ts +21 -11
  144. package/dist/react/ui/dialog.d.ts.map +1 -1
  145. package/dist/react/ui/dialog.js +10 -0
  146. package/dist/react/ui/dialog.js.map +1 -1
  147. package/dist/react/ui/drawer.d.ts +21 -11
  148. package/dist/react/ui/drawer.d.ts.map +1 -1
  149. package/dist/react/ui/drawer.js +10 -0
  150. package/dist/react/ui/drawer.js.map +1 -1
  151. package/dist/react/ui/dropdown-menu.d.ts +17 -16
  152. package/dist/react/ui/dropdown-menu.d.ts.map +1 -1
  153. package/dist/react/ui/dropdown-menu.js +1 -0
  154. package/dist/react/ui/dropdown-menu.js.map +1 -1
  155. package/dist/react/ui/empty.d.ts +8 -7
  156. package/dist/react/ui/empty.d.ts.map +1 -1
  157. package/dist/react/ui/empty.js +1 -0
  158. package/dist/react/ui/empty.js.map +1 -1
  159. package/dist/react/ui/field.d.ts +21 -11
  160. package/dist/react/ui/field.d.ts.map +1 -1
  161. package/dist/react/ui/field.js +10 -0
  162. package/dist/react/ui/field.js.map +1 -1
  163. package/dist/react/ui/form.d.ts +14 -7
  164. package/dist/react/ui/form.d.ts.map +1 -1
  165. package/dist/react/ui/form.js +7 -0
  166. package/dist/react/ui/form.js.map +1 -1
  167. package/dist/react/ui/hover-card.d.ts +5 -4
  168. package/dist/react/ui/hover-card.d.ts.map +1 -1
  169. package/dist/react/ui/hover-card.js +1 -0
  170. package/dist/react/ui/hover-card.js.map +1 -1
  171. package/dist/react/ui/input-group.d.ts +16 -10
  172. package/dist/react/ui/input-group.d.ts.map +1 -1
  173. package/dist/react/ui/input-group.js +6 -0
  174. package/dist/react/ui/input-group.js.map +1 -1
  175. package/dist/react/ui/input-otp.d.ts +9 -5
  176. package/dist/react/ui/input-otp.d.ts.map +1 -1
  177. package/dist/react/ui/input-otp.js +4 -0
  178. package/dist/react/ui/input-otp.js.map +1 -1
  179. package/dist/react/ui/input.d.ts +3 -2
  180. package/dist/react/ui/input.d.ts.map +1 -1
  181. package/dist/react/ui/input.js +1 -0
  182. package/dist/react/ui/input.js.map +1 -1
  183. package/dist/react/ui/item.d.ts +15 -14
  184. package/dist/react/ui/item.d.ts.map +1 -1
  185. package/dist/react/ui/item.js +1 -0
  186. package/dist/react/ui/item.js.map +1 -1
  187. package/dist/react/ui/kbd.d.ts +1 -0
  188. package/dist/react/ui/kbd.d.ts.map +1 -1
  189. package/dist/react/ui/kbd.js +1 -0
  190. package/dist/react/ui/kbd.js.map +1 -1
  191. package/dist/react/ui/label.d.ts +1 -0
  192. package/dist/react/ui/label.d.ts.map +1 -1
  193. package/dist/react/ui/label.js +1 -0
  194. package/dist/react/ui/label.js.map +1 -1
  195. package/dist/react/ui/menubar.d.ts +1 -0
  196. package/dist/react/ui/menubar.d.ts.map +1 -1
  197. package/dist/react/ui/menubar.js +1 -0
  198. package/dist/react/ui/menubar.js.map +1 -1
  199. package/dist/react/ui/navigation-menu.d.ts +8 -0
  200. package/dist/react/ui/navigation-menu.d.ts.map +1 -1
  201. package/dist/react/ui/navigation-menu.js +8 -0
  202. package/dist/react/ui/navigation-menu.js.map +1 -1
  203. package/dist/react/ui/pagination.d.ts +7 -0
  204. package/dist/react/ui/pagination.d.ts.map +1 -1
  205. package/dist/react/ui/pagination.js +7 -0
  206. package/dist/react/ui/pagination.js.map +1 -1
  207. package/dist/react/ui/popover.d.ts +6 -5
  208. package/dist/react/ui/popover.d.ts.map +1 -1
  209. package/dist/react/ui/popover.js +1 -0
  210. package/dist/react/ui/popover.js.map +1 -1
  211. package/dist/react/ui/progress.d.ts +3 -2
  212. package/dist/react/ui/progress.d.ts.map +1 -1
  213. package/dist/react/ui/progress.js +1 -0
  214. package/dist/react/ui/progress.js.map +1 -1
  215. package/dist/react/ui/radio-group.d.ts +4 -3
  216. package/dist/react/ui/radio-group.d.ts.map +1 -1
  217. package/dist/react/ui/radio-group.js +1 -0
  218. package/dist/react/ui/radio-group.js.map +1 -1
  219. package/dist/react/ui/resizable.d.ts +7 -4
  220. package/dist/react/ui/resizable.d.ts.map +1 -1
  221. package/dist/react/ui/resizable.js +3 -0
  222. package/dist/react/ui/resizable.js.map +1 -1
  223. package/dist/react/ui/scroll-area.d.ts +5 -3
  224. package/dist/react/ui/scroll-area.d.ts.map +1 -1
  225. package/dist/react/ui/scroll-area.js +2 -0
  226. package/dist/react/ui/scroll-area.js.map +1 -1
  227. package/dist/react/ui/select.d.ts +23 -11
  228. package/dist/react/ui/select.d.ts.map +1 -1
  229. package/dist/react/ui/select.js +12 -0
  230. package/dist/react/ui/select.js.map +1 -1
  231. package/dist/react/ui/separator.d.ts +3 -2
  232. package/dist/react/ui/separator.d.ts.map +1 -1
  233. package/dist/react/ui/separator.js +1 -0
  234. package/dist/react/ui/separator.js.map +1 -1
  235. package/dist/react/ui/sheet.d.ts +17 -9
  236. package/dist/react/ui/sheet.d.ts.map +1 -1
  237. package/dist/react/ui/sheet.js +10 -0
  238. package/dist/react/ui/sheet.js.map +1 -1
  239. package/dist/react/ui/sidebar.d.ts +46 -24
  240. package/dist/react/ui/sidebar.d.ts.map +1 -1
  241. package/dist/react/ui/sidebar.js +23 -1
  242. package/dist/react/ui/sidebar.js.map +1 -1
  243. package/dist/react/ui/skeleton.d.ts +3 -2
  244. package/dist/react/ui/skeleton.d.ts.map +1 -1
  245. package/dist/react/ui/skeleton.js +1 -0
  246. package/dist/react/ui/skeleton.js.map +1 -1
  247. package/dist/react/ui/slider.d.ts +3 -2
  248. package/dist/react/ui/slider.d.ts.map +1 -1
  249. package/dist/react/ui/slider.js +1 -0
  250. package/dist/react/ui/slider.js.map +1 -1
  251. package/dist/react/ui/sonner.d.ts +3 -2
  252. package/dist/react/ui/sonner.d.ts.map +1 -1
  253. package/dist/react/ui/sonner.js +1 -0
  254. package/dist/react/ui/sonner.js.map +1 -1
  255. package/dist/react/ui/spinner.d.ts +3 -2
  256. package/dist/react/ui/spinner.d.ts.map +1 -1
  257. package/dist/react/ui/spinner.js +1 -0
  258. package/dist/react/ui/spinner.js.map +1 -1
  259. package/dist/react/ui/switch.d.ts +3 -2
  260. package/dist/react/ui/switch.d.ts.map +1 -1
  261. package/dist/react/ui/switch.js +1 -0
  262. package/dist/react/ui/switch.js.map +1 -1
  263. package/dist/react/ui/table.d.ts +1 -0
  264. package/dist/react/ui/table.d.ts.map +1 -1
  265. package/dist/react/ui/table.js +1 -0
  266. package/dist/react/ui/table.js.map +1 -1
  267. package/dist/react/ui/tabs.d.ts +9 -5
  268. package/dist/react/ui/tabs.d.ts.map +1 -1
  269. package/dist/react/ui/tabs.js +4 -0
  270. package/dist/react/ui/tabs.js.map +1 -1
  271. package/dist/react/ui/textarea.d.ts +3 -2
  272. package/dist/react/ui/textarea.d.ts.map +1 -1
  273. package/dist/react/ui/textarea.js +1 -0
  274. package/dist/react/ui/textarea.js.map +1 -1
  275. package/dist/react/ui/toggle-group.d.ts +4 -3
  276. package/dist/react/ui/toggle-group.d.ts.map +1 -1
  277. package/dist/react/ui/toggle-group.js +1 -0
  278. package/dist/react/ui/toggle-group.js.map +1 -1
  279. package/dist/react/ui/toggle.d.ts +3 -2
  280. package/dist/react/ui/toggle.d.ts.map +1 -1
  281. package/dist/react/ui/toggle.js +1 -0
  282. package/dist/react/ui/toggle.js.map +1 -1
  283. package/dist/react/ui/tooltip.d.ts +7 -5
  284. package/dist/react/ui/tooltip.d.ts.map +1 -1
  285. package/dist/react/ui/tooltip.js +2 -0
  286. package/dist/react/ui/tooltip.js.map +1 -1
  287. package/docs/docs/api/appkit/Class.AppKitError/index.html +77 -0
  288. package/docs/docs/api/appkit/Class.AppKitError.md +154 -0
  289. package/docs/docs/api/appkit/Class.AuthenticationError/index.html +110 -0
  290. package/docs/docs/api/appkit/Class.AuthenticationError.md +236 -0
  291. package/docs/docs/api/appkit/Class.ConfigurationError/index.html +112 -0
  292. package/docs/docs/api/appkit/Class.ConfigurationError.md +243 -0
  293. package/docs/docs/api/appkit/Class.ConnectionError/index.html +120 -0
  294. package/docs/docs/api/appkit/Class.ConnectionError.md +265 -0
  295. package/docs/docs/api/appkit/Class.ExecutionError/index.html +116 -0
  296. package/docs/docs/api/appkit/Class.ExecutionError.md +250 -0
  297. package/docs/docs/api/appkit/Class.InitializationError/index.html +104 -0
  298. package/docs/docs/api/appkit/Class.InitializationError.md +222 -0
  299. package/docs/docs/api/appkit/Class.Plugin/index.html +149 -0
  300. package/docs/docs/api/appkit/Class.Plugin.md +392 -0
  301. package/docs/docs/api/appkit/Class.ServerError/index.html +108 -0
  302. package/docs/docs/api/appkit/Class.ServerError.md +229 -0
  303. package/docs/docs/api/appkit/Class.TunnelError/index.html +108 -0
  304. package/docs/docs/api/appkit/Class.TunnelError.md +231 -0
  305. package/docs/docs/api/appkit/Class.ValidationError/index.html +106 -0
  306. package/docs/docs/api/appkit/Class.ValidationError.md +225 -0
  307. package/docs/docs/api/appkit/Function.appKitTypesPlugin/index.html +24 -0
  308. package/docs/docs/api/appkit/Function.appKitTypesPlugin.md +20 -0
  309. package/docs/docs/api/appkit/Function.createApp/index.html +24 -0
  310. package/docs/docs/api/appkit/Function.createApp.md +31 -0
  311. package/docs/docs/api/appkit/Function.isSQLTypeMarker/index.html +25 -0
  312. package/docs/docs/api/appkit/Function.isSQLTypeMarker.md +32 -0
  313. package/docs/docs/api/appkit/Interface.BasePluginConfig/index.html +28 -0
  314. package/docs/docs/api/appkit/Interface.BasePluginConfig.md +37 -0
  315. package/docs/docs/api/appkit/Interface.CacheConfig/index.html +63 -0
  316. package/docs/docs/api/appkit/Interface.CacheConfig.md +131 -0
  317. package/docs/docs/api/appkit/Interface.ITelemetry/index.html +73 -0
  318. package/docs/docs/api/appkit/Interface.ITelemetry.md +144 -0
  319. package/docs/docs/api/appkit/Interface.StreamExecutionSettings/index.html +26 -0
  320. package/docs/docs/api/appkit/Interface.StreamExecutionSettings.md +30 -0
  321. package/docs/docs/api/appkit/Interface.TelemetryConfig/index.html +32 -0
  322. package/docs/docs/api/appkit/Interface.TelemetryConfig.md +48 -0
  323. package/docs/docs/api/appkit/TypeAlias.IAppRouter/index.html +18 -0
  324. package/docs/docs/api/appkit/TypeAlias.IAppRouter.md +8 -0
  325. package/docs/docs/api/appkit/Variable.sql/index.html +98 -0
  326. package/docs/docs/api/appkit/Variable.sql.md +260 -0
  327. package/docs/docs/api/appkit/index.html +28 -0
  328. package/docs/docs/api/appkit-ui/data/AreaChart/index.html +29 -0
  329. package/docs/docs/api/appkit-ui/data/AreaChart.md +79 -0
  330. package/docs/docs/api/appkit-ui/data/BarChart/index.html +29 -0
  331. package/docs/docs/api/appkit-ui/data/BarChart.md +74 -0
  332. package/docs/docs/api/appkit-ui/data/DataTable/index.html +36 -0
  333. package/docs/docs/api/appkit-ui/data/DataTable.md +69 -0
  334. package/docs/docs/api/appkit-ui/data/DonutChart/index.html +29 -0
  335. package/docs/docs/api/appkit-ui/data/DonutChart.md +72 -0
  336. package/docs/docs/api/appkit-ui/data/HeatmapChart/index.html +35 -0
  337. package/docs/docs/api/appkit-ui/data/HeatmapChart.md +91 -0
  338. package/docs/docs/api/appkit-ui/data/LineChart/index.html +29 -0
  339. package/docs/docs/api/appkit-ui/data/LineChart.md +77 -0
  340. package/docs/docs/api/appkit-ui/data/PieChart/index.html +29 -0
  341. package/docs/docs/api/appkit-ui/data/PieChart.md +72 -0
  342. package/docs/docs/api/appkit-ui/data/RadarChart/index.html +29 -0
  343. package/docs/docs/api/appkit-ui/data/RadarChart.md +74 -0
  344. package/docs/docs/api/appkit-ui/data/ScatterChart/index.html +29 -0
  345. package/docs/docs/api/appkit-ui/data/ScatterChart.md +76 -0
  346. package/docs/docs/api/appkit-ui/index.html +23 -0
  347. package/docs/docs/api/appkit-ui/styling/index.html +74 -0
  348. package/docs/docs/api/appkit-ui/styling.md +81 -0
  349. package/docs/docs/api/appkit-ui/ui/Accordion/index.html +48 -0
  350. package/docs/docs/api/appkit-ui/ui/Accordion.md +139 -0
  351. package/docs/docs/api/appkit-ui/ui/Alert/index.html +41 -0
  352. package/docs/docs/api/appkit-ui/ui/Alert.md +89 -0
  353. package/docs/docs/api/appkit-ui/ui/AlertDialog/index.html +97 -0
  354. package/docs/docs/api/appkit-ui/ui/AlertDialog.md +282 -0
  355. package/docs/docs/api/appkit-ui/ui/AspectRatio/index.html +27 -0
  356. package/docs/docs/api/appkit-ui/ui/AspectRatio.md +46 -0
  357. package/docs/docs/api/appkit-ui/ui/Avatar/index.html +41 -0
  358. package/docs/docs/api/appkit-ui/ui/Avatar.md +90 -0
  359. package/docs/docs/api/appkit-ui/ui/Badge/index.html +27 -0
  360. package/docs/docs/api/appkit-ui/ui/Badge.md +38 -0
  361. package/docs/docs/api/appkit-ui/ui/Breadcrumb/index.html +69 -0
  362. package/docs/docs/api/appkit-ui/ui/Breadcrumb.md +193 -0
  363. package/docs/docs/api/appkit-ui/ui/Button/index.html +27 -0
  364. package/docs/docs/api/appkit-ui/ui/Button.md +39 -0
  365. package/docs/docs/api/appkit-ui/ui/ButtonGroup/index.html +38 -0
  366. package/docs/docs/api/appkit-ui/ui/ButtonGroup.md +68 -0
  367. package/docs/docs/api/appkit-ui/ui/Calendar/index.html +34 -0
  368. package/docs/docs/api/appkit-ui/ui/Calendar.md +154 -0
  369. package/docs/docs/api/appkit-ui/ui/Card/index.html +69 -0
  370. package/docs/docs/api/appkit-ui/ui/Card.md +222 -0
  371. package/docs/docs/api/appkit-ui/ui/Carousel/index.html +55 -0
  372. package/docs/docs/api/appkit-ui/ui/Carousel.md +152 -0
  373. package/docs/docs/api/appkit-ui/ui/ChartContainer/index.html +58 -0
  374. package/docs/docs/api/appkit-ui/ui/ChartContainer.md +343 -0
  375. package/docs/docs/api/appkit-ui/ui/Checkbox/index.html +27 -0
  376. package/docs/docs/api/appkit-ui/ui/Checkbox.md +53 -0
  377. package/docs/docs/api/appkit-ui/ui/Collapsible/index.html +41 -0
  378. package/docs/docs/api/appkit-ui/ui/Collapsible.md +125 -0
  379. package/docs/docs/api/appkit-ui/ui/Command/index.html +83 -0
  380. package/docs/docs/api/appkit-ui/ui/Command.md +287 -0
  381. package/docs/docs/api/appkit-ui/ui/ContextMenu/index.html +111 -0
  382. package/docs/docs/api/appkit-ui/ui/ContextMenu.md +419 -0
  383. package/docs/docs/api/appkit-ui/ui/Dialog/index.html +90 -0
  384. package/docs/docs/api/appkit-ui/ui/Dialog.md +285 -0
  385. package/docs/docs/api/appkit-ui/ui/Drawer/index.html +90 -0
  386. package/docs/docs/api/appkit-ui/ui/Drawer.md +387 -0
  387. package/docs/docs/api/appkit-ui/ui/DropdownMenu/index.html +111 -0
  388. package/docs/docs/api/appkit-ui/ui/DropdownMenu.md +478 -0
  389. package/docs/docs/api/appkit-ui/ui/Empty/index.html +54 -0
  390. package/docs/docs/api/appkit-ui/ui/Empty.md +109 -0
  391. package/docs/docs/api/appkit-ui/ui/Field/index.html +87 -0
  392. package/docs/docs/api/appkit-ui/ui/Field.md +201 -0
  393. package/docs/docs/api/appkit-ui/ui/FormControl/index.html +59 -0
  394. package/docs/docs/api/appkit-ui/ui/FormControl.md +128 -0
  395. package/docs/docs/api/appkit-ui/ui/HoverCard/index.html +39 -0
  396. package/docs/docs/api/appkit-ui/ui/HoverCard.md +131 -0
  397. package/docs/docs/api/appkit-ui/ui/Input/index.html +27 -0
  398. package/docs/docs/api/appkit-ui/ui/Input.md +35 -0
  399. package/docs/docs/api/appkit-ui/ui/InputGroup/index.html +59 -0
  400. package/docs/docs/api/appkit-ui/ui/InputGroup.md +123 -0
  401. package/docs/docs/api/appkit-ui/ui/InputOTP/index.html +48 -0
  402. package/docs/docs/api/appkit-ui/ui/InputOTP.md +124 -0
  403. package/docs/docs/api/appkit-ui/ui/Item/index.html +78 -0
  404. package/docs/docs/api/appkit-ui/ui/Item.md +185 -0
  405. package/docs/docs/api/appkit-ui/ui/Kbd/index.html +30 -0
  406. package/docs/docs/api/appkit-ui/ui/Kbd.md +39 -0
  407. package/docs/docs/api/appkit-ui/ui/Label/index.html +27 -0
  408. package/docs/docs/api/appkit-ui/ui/Label.md +44 -0
  409. package/docs/docs/api/appkit-ui/ui/Menubar/index.html +117 -0
  410. package/docs/docs/api/appkit-ui/ui/Menubar.md +484 -0
  411. package/docs/docs/api/appkit-ui/ui/NavigationMenu/index.html +76 -0
  412. package/docs/docs/api/appkit-ui/ui/NavigationMenu.md +338 -0
  413. package/docs/docs/api/appkit-ui/ui/Pagination/index.html +69 -0
  414. package/docs/docs/api/appkit-ui/ui/Pagination.md +191 -0
  415. package/docs/docs/api/appkit-ui/ui/Popover/index.html +45 -0
  416. package/docs/docs/api/appkit-ui/ui/Popover.md +173 -0
  417. package/docs/docs/api/appkit-ui/ui/Progress/index.html +27 -0
  418. package/docs/docs/api/appkit-ui/ui/Progress.md +51 -0
  419. package/docs/docs/api/appkit-ui/ui/RadioGroup/index.html +33 -0
  420. package/docs/docs/api/appkit-ui/ui/RadioGroup.md +83 -0
  421. package/docs/docs/api/appkit-ui/ui/ResizableHandle/index.html +41 -0
  422. package/docs/docs/api/appkit-ui/ui/ResizableHandle.md +136 -0
  423. package/docs/docs/api/appkit-ui/ui/ScrollArea/index.html +34 -0
  424. package/docs/docs/api/appkit-ui/ui/ScrollArea.md +83 -0
  425. package/docs/docs/api/appkit-ui/ui/Select/index.html +82 -0
  426. package/docs/docs/api/appkit-ui/ui/Select.md +267 -0
  427. package/docs/docs/api/appkit-ui/ui/Separator/index.html +27 -0
  428. package/docs/docs/api/appkit-ui/ui/Separator.md +56 -0
  429. package/docs/docs/api/appkit-ui/ui/Sheet/index.html +76 -0
  430. package/docs/docs/api/appkit-ui/ui/Sheet.md +236 -0
  431. package/docs/docs/api/appkit-ui/ui/Sidebar/index.html +183 -0
  432. package/docs/docs/api/appkit-ui/ui/Sidebar.md +490 -0
  433. package/docs/docs/api/appkit-ui/ui/Skeleton/index.html +27 -0
  434. package/docs/docs/api/appkit-ui/ui/Skeleton.md +43 -0
  435. package/docs/docs/api/appkit-ui/ui/Slider/index.html +27 -0
  436. package/docs/docs/api/appkit-ui/ui/Slider.md +61 -0
  437. package/docs/docs/api/appkit-ui/ui/Spinner/index.html +24 -0
  438. package/docs/docs/api/appkit-ui/ui/Spinner.md +22 -0
  439. package/docs/docs/api/appkit-ui/ui/Switch/index.html +27 -0
  440. package/docs/docs/api/appkit-ui/ui/Switch.md +46 -0
  441. package/docs/docs/api/appkit-ui/ui/Table/index.html +69 -0
  442. package/docs/docs/api/appkit-ui/ui/Table.md +236 -0
  443. package/docs/docs/api/appkit-ui/ui/Tabs/index.html +48 -0
  444. package/docs/docs/api/appkit-ui/ui/Tabs.md +177 -0
  445. package/docs/docs/api/appkit-ui/ui/Textarea/index.html +27 -0
  446. package/docs/docs/api/appkit-ui/ui/Textarea.md +35 -0
  447. package/docs/docs/api/appkit-ui/ui/Toaster/index.html +27 -0
  448. package/docs/docs/api/appkit-ui/ui/Toaster.md +75 -0
  449. package/docs/docs/api/appkit-ui/ui/Toggle/index.html +27 -0
  450. package/docs/docs/api/appkit-ui/ui/Toggle.md +48 -0
  451. package/docs/docs/api/appkit-ui/ui/ToggleGroup/index.html +33 -0
  452. package/docs/docs/api/appkit-ui/ui/ToggleGroup.md +88 -0
  453. package/docs/docs/api/appkit-ui/ui/Tooltip/index.html +46 -0
  454. package/docs/docs/api/appkit-ui/ui/Tooltip.md +134 -0
  455. package/docs/docs/api/appkit-ui.md +15 -0
  456. package/docs/docs/api/appkit.md +48 -0
  457. package/docs/docs/api/index.html +28 -0
  458. package/docs/docs/api.md +24 -0
  459. package/docs/docs/app-management/index.html +106 -0
  460. package/docs/docs/app-management.md +171 -0
  461. package/docs/docs/architecture/index.html +71 -0
  462. package/docs/docs/architecture.md +69 -0
  463. package/docs/docs/category/development/index.html +16 -0
  464. package/docs/docs/category/development.md +3 -0
  465. package/docs/docs/configuration/index.html +66 -0
  466. package/docs/docs/configuration.md +150 -0
  467. package/docs/docs/core-principles/index.html +38 -0
  468. package/docs/docs/core-principles.md +31 -0
  469. package/docs/docs/development/index.html +34 -0
  470. package/docs/docs/development/llm-guide/index.html +74 -0
  471. package/docs/docs/development/llm-guide.md +74 -0
  472. package/docs/docs/development/local-development/index.html +27 -0
  473. package/docs/docs/development/local-development.md +20 -0
  474. package/docs/docs/development/project-setup/index.html +69 -0
  475. package/docs/docs/development/project-setup.md +246 -0
  476. package/docs/docs/development/remote-bridge/index.html +76 -0
  477. package/docs/docs/development/remote-bridge.md +80 -0
  478. package/docs/docs/development/type-generation/index.html +65 -0
  479. package/docs/docs/development/type-generation.md +110 -0
  480. package/docs/docs/development.md +21 -0
  481. package/docs/docs/index.html +58 -0
  482. package/docs/docs/plugins/index.html +151 -0
  483. package/docs/docs/plugins.md +313 -0
  484. package/docs/docs.md +64 -0
  485. package/llms.txt +121 -1228
  486. package/package.json +7 -5
  487. package/scripts/postinstall.js +1 -1
  488. package/AGENTS.md +0 -1231
  489. package/bin/setup-claude.js +0 -190
package/NOTICE.md CHANGED
@@ -55,12 +55,12 @@ This Software contains code from the following open source projects:
55
55
  | [class-variance-authority](https://www.npmjs.com/package/class-variance-authority) | 0.7.1 | Apache-2.0 | https://github.com/joe-bell/cva#readme |
56
56
  | [clsx](https://www.npmjs.com/package/clsx) | 2.1.1 | MIT | https://github.com/lukeed/clsx#readme |
57
57
  | [cmdk](https://www.npmjs.com/package/cmdk) | 1.1.1 | MIT | https://github.com/pacocoursey/cmdk#readme |
58
+ | [commander](https://www.npmjs.com/package/commander) | 2.20.3, 5.1.0, 7.2.0, 8.3.0, 10.0.1, 12.1.0 | MIT | https://github.com/tj/commander.js#readme |
58
59
  | [date-fns](https://www.npmjs.com/package/date-fns) | 4.1.0 | MIT | https://github.com/date-fns/date-fns#readme |
59
60
  | [dotenv](https://www.npmjs.com/package/dotenv) | 16.6.1 | BSD-2-Clause | https://github.com/motdotla/dotenv#readme |
60
61
  | [echarts-for-react](https://www.npmjs.com/package/echarts-for-react) | 3.0.5 | MIT | https://github.com/hustcc/echarts-for-react |
61
62
  | [embla-carousel-react](https://www.npmjs.com/package/embla-carousel-react) | 8.6.0 | MIT | https://www.embla-carousel.com |
62
63
  | [express](https://www.npmjs.com/package/express) | 4.22.0 | MIT | http://expressjs.com/ |
63
- | [fast-glob](https://www.npmjs.com/package/fast-glob) | 3.3.3 | MIT | https://github.com/mrmlnc/fast-glob#readme |
64
64
  | [input-otp](https://www.npmjs.com/package/input-otp) | 1.4.2 | MIT | https://input-otp.rodz.dev/ |
65
65
  | [lucide-react](https://www.npmjs.com/package/lucide-react) | 0.554.0 | ISC | https://lucide.dev |
66
66
  | [next-themes](https://www.npmjs.com/package/next-themes) | 0.4.6 | MIT | https://github.com/pacocoursey/next-themes#readme |
package/bin/appkit.js ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+
3
+ import "../dist/cli/index.js";
@@ -0,0 +1,47 @@
1
+ import fs from "node:fs";
2
+ import { fileURLToPath } from "node:url";
3
+ import path from "node:path";
4
+ import { Command } from "commander";
5
+
6
+ //#region src/cli/commands/docs.ts
7
+ const __filename = fileURLToPath(import.meta.url);
8
+ const __dirname = path.dirname(__filename);
9
+ function findPackageRoot() {
10
+ let dir = __dirname;
11
+ while (dir !== path.parse(dir).root) {
12
+ if (fs.existsSync(path.join(dir, "package.json"))) return dir;
13
+ dir = path.dirname(dir);
14
+ }
15
+ throw new Error("Could not find package root");
16
+ }
17
+ function runDocs(docPath) {
18
+ const packageRoot = findPackageRoot();
19
+ if (!docPath) {
20
+ const llmsPath = path.join(packageRoot, "llms.txt");
21
+ if (!fs.existsSync(llmsPath)) {
22
+ console.error("Error: llms.txt not found in package");
23
+ process.exit(1);
24
+ }
25
+ const content = fs.readFileSync(llmsPath, "utf-8");
26
+ console.log(content);
27
+ return;
28
+ }
29
+ let normalizedPath = docPath;
30
+ normalizedPath = normalizedPath.replace(/^\.\//, "");
31
+ normalizedPath = normalizedPath.replace(/^\//, "");
32
+ normalizedPath = normalizedPath.replace(/^appkit\/docs\//, "");
33
+ normalizedPath = normalizedPath.replace(/^docs\//, "");
34
+ const fullPath = path.join(packageRoot, "docs", normalizedPath);
35
+ if (!fs.existsSync(fullPath)) {
36
+ console.error(`Error: Documentation file not found: ${docPath}`);
37
+ console.error(`Tried: ${fullPath}`);
38
+ process.exit(1);
39
+ }
40
+ const content = fs.readFileSync(fullPath, "utf-8");
41
+ console.log(content);
42
+ }
43
+ const docsCommand = new Command("docs").description("Display embedded documentation").argument("[path]", "Path to specific documentation file (e.g., /appkit/docs/api/appkit-ui/components/Sidebar.md)").action(runDocs);
44
+
45
+ //#endregion
46
+ export { docsCommand };
47
+ //# sourceMappingURL=docs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs.js","names":[],"sources":["../../../src/cli/commands/docs.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\nfunction findPackageRoot(): string {\n let dir = __dirname;\n while (dir !== path.parse(dir).root) {\n if (fs.existsSync(path.join(dir, \"package.json\"))) {\n return dir;\n }\n dir = path.dirname(dir);\n }\n throw new Error(\"Could not find package root\");\n}\n\nfunction runDocs(docPath?: string) {\n const packageRoot = findPackageRoot();\n\n if (!docPath) {\n // Display llms.txt by default\n const llmsPath = path.join(packageRoot, \"llms.txt\");\n\n if (!fs.existsSync(llmsPath)) {\n console.error(\"Error: llms.txt not found in package\");\n process.exit(1);\n }\n\n const content = fs.readFileSync(llmsPath, \"utf-8\");\n console.log(content);\n return;\n }\n\n // Handle path - remove leading ./ and / first, then strip prefixes\n let normalizedPath = docPath;\n\n // Strip leading ./ or /\n normalizedPath = normalizedPath.replace(/^\\.\\//, \"\");\n normalizedPath = normalizedPath.replace(/^\\//, \"\");\n\n // Remove /appkit/docs/ or docs/ prefix since files are in packageRoot/docs/\n normalizedPath = normalizedPath.replace(/^appkit\\/docs\\//, \"\");\n normalizedPath = normalizedPath.replace(/^docs\\//, \"\");\n\n const fullPath = path.join(packageRoot, \"docs\", normalizedPath);\n\n if (!fs.existsSync(fullPath)) {\n console.error(`Error: Documentation file not found: ${docPath}`);\n console.error(`Tried: ${fullPath}`);\n process.exit(1);\n }\n\n const content = fs.readFileSync(fullPath, \"utf-8\");\n console.log(content);\n}\n\nexport const docsCommand = new Command(\"docs\")\n .description(\"Display embedded documentation\")\n .argument(\n \"[path]\",\n \"Path to specific documentation file (e.g., /appkit/docs/api/appkit-ui/components/Sidebar.md)\",\n )\n .action(runDocs);\n"],"mappings":";;;;;;AAKA,MAAM,aAAa,cAAc,OAAO,KAAK,IAAI;AACjD,MAAM,YAAY,KAAK,QAAQ,WAAW;AAE1C,SAAS,kBAA0B;CACjC,IAAI,MAAM;AACV,QAAO,QAAQ,KAAK,MAAM,IAAI,CAAC,MAAM;AACnC,MAAI,GAAG,WAAW,KAAK,KAAK,KAAK,eAAe,CAAC,CAC/C,QAAO;AAET,QAAM,KAAK,QAAQ,IAAI;;AAEzB,OAAM,IAAI,MAAM,8BAA8B;;AAGhD,SAAS,QAAQ,SAAkB;CACjC,MAAM,cAAc,iBAAiB;AAErC,KAAI,CAAC,SAAS;EAEZ,MAAM,WAAW,KAAK,KAAK,aAAa,WAAW;AAEnD,MAAI,CAAC,GAAG,WAAW,SAAS,EAAE;AAC5B,WAAQ,MAAM,uCAAuC;AACrD,WAAQ,KAAK,EAAE;;EAGjB,MAAM,UAAU,GAAG,aAAa,UAAU,QAAQ;AAClD,UAAQ,IAAI,QAAQ;AACpB;;CAIF,IAAI,iBAAiB;AAGrB,kBAAiB,eAAe,QAAQ,SAAS,GAAG;AACpD,kBAAiB,eAAe,QAAQ,OAAO,GAAG;AAGlD,kBAAiB,eAAe,QAAQ,mBAAmB,GAAG;AAC9D,kBAAiB,eAAe,QAAQ,WAAW,GAAG;CAEtD,MAAM,WAAW,KAAK,KAAK,aAAa,QAAQ,eAAe;AAE/D,KAAI,CAAC,GAAG,WAAW,SAAS,EAAE;AAC5B,UAAQ,MAAM,wCAAwC,UAAU;AAChE,UAAQ,MAAM,UAAU,WAAW;AACnC,UAAQ,KAAK,EAAE;;CAGjB,MAAM,UAAU,GAAG,aAAa,UAAU,QAAQ;AAClD,SAAQ,IAAI,QAAQ;;AAGtB,MAAa,cAAc,IAAI,QAAQ,OAAO,CAC3C,YAAY,iCAAiC,CAC7C,SACC,UACA,+FACD,CACA,OAAO,QAAQ"}
@@ -0,0 +1,38 @@
1
+ import path from "node:path";
2
+ import { Command } from "commander";
3
+
4
+ //#region src/cli/commands/generate-types.ts
5
+ /**
6
+ * Generate types command implementation
7
+ */
8
+ async function runGenerateTypes(rootDir, outFile, warehouseId, options) {
9
+ try {
10
+ const { generateFromEntryPoint } = await import("@databricks/appkit/type-generator");
11
+ const resolvedRootDir = rootDir || process.cwd();
12
+ const resolvedOutFile = outFile || path.join(process.cwd(), "client/src/appKitTypes.d.ts");
13
+ const queryFolder = path.join(resolvedRootDir, "config/queries");
14
+ const resolvedWarehouseId = warehouseId || process.env.DATABRICKS_WAREHOUSE_ID;
15
+ if (!resolvedWarehouseId) {
16
+ console.error("Error: DATABRICKS_WAREHOUSE_ID is not set. Please provide it as an argument or environment variable.");
17
+ process.exit(1);
18
+ }
19
+ await generateFromEntryPoint({
20
+ queryFolder,
21
+ outFile: resolvedOutFile,
22
+ warehouseId: resolvedWarehouseId,
23
+ noCache: options?.noCache || false
24
+ });
25
+ } catch (error) {
26
+ if (error instanceof Error && error.message.includes("Cannot find module")) {
27
+ console.error("Error: The 'generate-types' command is only available in @databricks/appkit.");
28
+ console.error("Please install @databricks/appkit to use this command.");
29
+ process.exit(1);
30
+ }
31
+ throw error;
32
+ }
33
+ }
34
+ const generateTypesCommand = new Command("generate-types").description("Generate TypeScript types from SQL queries").argument("[rootDir]", "Root directory of the project", process.cwd()).argument("[outFile]", "Output file path", path.join(process.cwd(), "client/src/appKitTypes.d.ts")).argument("[warehouseId]", "Databricks warehouse ID").option("--no-cache", "Disable caching for type generation").action(runGenerateTypes);
35
+
36
+ //#endregion
37
+ export { generateTypesCommand };
38
+ //# sourceMappingURL=generate-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-types.js","names":[],"sources":["../../../src/cli/commands/generate-types.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport path from \"node:path\";\n\n/**\n * Generate types command implementation\n */\nasync function runGenerateTypes(\n rootDir?: string,\n outFile?: string,\n warehouseId?: string,\n options?: { noCache?: boolean },\n) {\n try {\n // Try to import the type generator from @databricks/appkit\n const { generateFromEntryPoint } = await import(\n \"@databricks/appkit/type-generator\"\n );\n\n const resolvedRootDir = rootDir || process.cwd();\n const resolvedOutFile =\n outFile || path.join(process.cwd(), \"client/src/appKitTypes.d.ts\");\n\n const queryFolder = path.join(resolvedRootDir, \"config/queries\");\n\n const resolvedWarehouseId =\n warehouseId || process.env.DATABRICKS_WAREHOUSE_ID;\n if (!resolvedWarehouseId) {\n console.error(\n \"Error: DATABRICKS_WAREHOUSE_ID is not set. Please provide it as an argument or environment variable.\",\n );\n process.exit(1);\n }\n\n await generateFromEntryPoint({\n queryFolder,\n outFile: resolvedOutFile,\n warehouseId: resolvedWarehouseId,\n noCache: options?.noCache || false,\n });\n } catch (error) {\n if (\n error instanceof Error &&\n error.message.includes(\"Cannot find module\")\n ) {\n console.error(\n \"Error: The 'generate-types' command is only available in @databricks/appkit.\",\n );\n console.error(\"Please install @databricks/appkit to use this command.\");\n process.exit(1);\n }\n throw error;\n }\n}\n\nexport const generateTypesCommand = new Command(\"generate-types\")\n .description(\"Generate TypeScript types from SQL queries\")\n .argument(\"[rootDir]\", \"Root directory of the project\", process.cwd())\n .argument(\n \"[outFile]\",\n \"Output file path\",\n path.join(process.cwd(), \"client/src/appKitTypes.d.ts\"),\n )\n .argument(\"[warehouseId]\", \"Databricks warehouse ID\")\n .option(\"--no-cache\", \"Disable caching for type generation\")\n .action(runGenerateTypes);\n"],"mappings":";;;;;;;AAMA,eAAe,iBACb,SACA,SACA,aACA,SACA;AACA,KAAI;EAEF,MAAM,EAAE,2BAA2B,MAAM,OACvC;EAGF,MAAM,kBAAkB,WAAW,QAAQ,KAAK;EAChD,MAAM,kBACJ,WAAW,KAAK,KAAK,QAAQ,KAAK,EAAE,8BAA8B;EAEpE,MAAM,cAAc,KAAK,KAAK,iBAAiB,iBAAiB;EAEhE,MAAM,sBACJ,eAAe,QAAQ,IAAI;AAC7B,MAAI,CAAC,qBAAqB;AACxB,WAAQ,MACN,uGACD;AACD,WAAQ,KAAK,EAAE;;AAGjB,QAAM,uBAAuB;GAC3B;GACA,SAAS;GACT,aAAa;GACb,SAAS,SAAS,WAAW;GAC9B,CAAC;UACK,OAAO;AACd,MACE,iBAAiB,SACjB,MAAM,QAAQ,SAAS,qBAAqB,EAC5C;AACA,WAAQ,MACN,+EACD;AACD,WAAQ,MAAM,yDAAyD;AACvE,WAAQ,KAAK,EAAE;;AAEjB,QAAM;;;AAIV,MAAa,uBAAuB,IAAI,QAAQ,iBAAiB,CAC9D,YAAY,6CAA6C,CACzD,SAAS,aAAa,iCAAiC,QAAQ,KAAK,CAAC,CACrE,SACC,aACA,oBACA,KAAK,KAAK,QAAQ,KAAK,EAAE,8BAA8B,CACxD,CACA,SAAS,iBAAiB,0BAA0B,CACpD,OAAO,cAAc,sCAAsC,CAC3D,OAAO,iBAAiB"}
@@ -0,0 +1,104 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { Command } from "commander";
4
+ import { Lang, parse } from "@ast-grep/napi";
5
+
6
+ //#region src/cli/commands/lint.ts
7
+ const rules = [
8
+ {
9
+ id: "no-double-type-assertion",
10
+ pattern: "$X as unknown as $Y",
11
+ message: "Avoid double type assertion (as unknown as). Use proper type guards or fix the source type."
12
+ },
13
+ {
14
+ id: "no-as-any",
15
+ pattern: "$X as any",
16
+ message: "Avoid \"as any\" type assertion. Use proper typing or unknown with type guards.",
17
+ includeTests: false
18
+ },
19
+ {
20
+ id: "no-array-index-key",
21
+ pattern: "key={$IDX}",
22
+ message: "Avoid using array index as React key. Use a stable unique identifier.",
23
+ filter: (code) => /key=\{(idx|index|i)\}/.test(code)
24
+ },
25
+ {
26
+ id: "no-parse-float-without-validation",
27
+ pattern: "parseFloat($X).toFixed($Y)",
28
+ message: "parseFloat can return NaN. Validate input or use toNumber() helper from shared/types.ts."
29
+ }
30
+ ];
31
+ function isTestFile(filePath) {
32
+ return /\.(test|spec)\.(ts|tsx)$/.test(filePath) || filePath.includes("/tests/");
33
+ }
34
+ function findTsFiles(dir, files = []) {
35
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
36
+ for (const entry of entries) {
37
+ const fullPath = path.join(dir, entry.name);
38
+ if (entry.isDirectory()) {
39
+ if ([
40
+ "node_modules",
41
+ "dist",
42
+ "build",
43
+ ".git"
44
+ ].includes(entry.name)) continue;
45
+ findTsFiles(fullPath, files);
46
+ } else if (entry.isFile() && /\.(ts|tsx)$/.test(entry.name)) files.push(fullPath);
47
+ }
48
+ return files;
49
+ }
50
+ function lintFile(filePath, rules) {
51
+ const violations = [];
52
+ const content = fs.readFileSync(filePath, "utf-8");
53
+ const lang = filePath.endsWith(".tsx") ? Lang.Tsx : Lang.TypeScript;
54
+ const testFile = isTestFile(filePath);
55
+ const root = parse(lang, content).root();
56
+ for (const rule of rules) {
57
+ if (testFile && rule.includeTests === false) continue;
58
+ const matches = root.findAll(rule.pattern);
59
+ for (const match of matches) {
60
+ const code = match.text();
61
+ if (rule.filter && !rule.filter(code)) continue;
62
+ const range = match.range();
63
+ violations.push({
64
+ file: filePath,
65
+ line: range.start.line + 1,
66
+ column: range.start.column + 1,
67
+ rule: rule.id,
68
+ message: rule.message,
69
+ code: code.length > 80 ? `${code.slice(0, 77)}...` : code
70
+ });
71
+ }
72
+ }
73
+ return violations;
74
+ }
75
+ /**
76
+ * Lint command implementation
77
+ */
78
+ function runLint() {
79
+ const rootDir = process.cwd();
80
+ const files = findTsFiles(rootDir);
81
+ console.log(`Scanning ${files.length} TypeScript files...\n`);
82
+ const allViolations = [];
83
+ for (const file of files) {
84
+ const violations = lintFile(file, rules);
85
+ allViolations.push(...violations);
86
+ }
87
+ if (allViolations.length === 0) {
88
+ console.log("No ast-grep lint violations found.");
89
+ process.exit(0);
90
+ }
91
+ console.log(`Found ${allViolations.length} violation(s):\n`);
92
+ for (const v of allViolations) {
93
+ const relPath = path.relative(rootDir, v.file);
94
+ console.log(`${relPath}:${v.line}:${v.column}`);
95
+ console.log(` ${v.rule}: ${v.message}`);
96
+ console.log(` > ${v.code}\n`);
97
+ }
98
+ process.exit(1);
99
+ }
100
+ const lintCommand = new Command("lint").description("Run AST-based linting on TypeScript files").action(runLint);
101
+
102
+ //#endregion
103
+ export { lintCommand };
104
+ //# sourceMappingURL=lint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lint.js","names":[],"sources":["../../../src/cli/commands/lint.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport { parse, Lang } from \"@ast-grep/napi\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\n\ninterface Rule {\n id: string;\n pattern: string;\n message: string;\n includeTests?: boolean;\n filter?: (code: string) => boolean;\n}\n\nconst rules: Rule[] = [\n {\n id: \"no-double-type-assertion\",\n pattern: \"$X as unknown as $Y\",\n message:\n \"Avoid double type assertion (as unknown as). Use proper type guards or fix the source type.\",\n },\n {\n id: \"no-as-any\",\n pattern: \"$X as any\",\n message:\n 'Avoid \"as any\" type assertion. Use proper typing or unknown with type guards.',\n includeTests: false, // acceptable in test mocks\n },\n {\n id: \"no-array-index-key\",\n pattern: \"key={$IDX}\",\n message:\n \"Avoid using array index as React key. Use a stable unique identifier.\",\n filter: (code) => /key=\\{(idx|index|i)\\}/.test(code),\n },\n {\n id: \"no-parse-float-without-validation\",\n pattern: \"parseFloat($X).toFixed($Y)\",\n message:\n \"parseFloat can return NaN. Validate input or use toNumber() helper from shared/types.ts.\",\n },\n];\n\nfunction isTestFile(filePath: string): boolean {\n return (\n /\\.(test|spec)\\.(ts|tsx)$/.test(filePath) || filePath.includes(\"/tests/\")\n );\n}\n\nfunction findTsFiles(dir: string, files: string[] = []): string[] {\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n\n if (entry.isDirectory()) {\n if ([\"node_modules\", \"dist\", \"build\", \".git\"].includes(entry.name))\n continue;\n findTsFiles(fullPath, files);\n } else if (entry.isFile() && /\\.(ts|tsx)$/.test(entry.name)) {\n files.push(fullPath);\n }\n }\n\n return files;\n}\n\ninterface Violation {\n file: string;\n line: number;\n column: number;\n rule: string;\n message: string;\n code: string;\n}\n\nfunction lintFile(filePath: string, rules: Rule[]): Violation[] {\n const violations: Violation[] = [];\n const content = fs.readFileSync(filePath, \"utf-8\");\n const lang = filePath.endsWith(\".tsx\") ? Lang.Tsx : Lang.TypeScript;\n const testFile = isTestFile(filePath);\n\n const ast = parse(lang, content);\n const root = ast.root();\n\n for (const rule of rules) {\n // skip rules that don't apply to test files\n if (testFile && rule.includeTests === false) continue;\n\n const matches = root.findAll(rule.pattern);\n\n for (const match of matches) {\n const code = match.text();\n\n if (rule.filter && !rule.filter(code)) continue;\n\n const range = match.range();\n violations.push({\n file: filePath,\n line: range.start.line + 1,\n column: range.start.column + 1,\n rule: rule.id,\n message: rule.message,\n code: code.length > 80 ? `${code.slice(0, 77)}...` : code,\n });\n }\n }\n\n return violations;\n}\n\n/**\n * Lint command implementation\n */\nfunction runLint() {\n const rootDir = process.cwd();\n const files = findTsFiles(rootDir);\n\n console.log(`Scanning ${files.length} TypeScript files...\\n`);\n\n const allViolations: Violation[] = [];\n\n for (const file of files) {\n const violations = lintFile(file, rules);\n allViolations.push(...violations);\n }\n\n if (allViolations.length === 0) {\n console.log(\"No ast-grep lint violations found.\");\n process.exit(0);\n }\n\n console.log(`Found ${allViolations.length} violation(s):\\n`);\n\n for (const v of allViolations) {\n const relPath = path.relative(rootDir, v.file);\n console.log(`${relPath}:${v.line}:${v.column}`);\n console.log(` ${v.rule}: ${v.message}`);\n console.log(` > ${v.code}\\n`);\n }\n\n process.exit(1);\n}\n\nexport const lintCommand = new Command(\"lint\")\n .description(\"Run AST-based linting on TypeScript files\")\n .action(runLint);\n"],"mappings":";;;;;;AAaA,MAAM,QAAgB;CACpB;EACE,IAAI;EACJ,SAAS;EACT,SACE;EACH;CACD;EACE,IAAI;EACJ,SAAS;EACT,SACE;EACF,cAAc;EACf;CACD;EACE,IAAI;EACJ,SAAS;EACT,SACE;EACF,SAAS,SAAS,wBAAwB,KAAK,KAAK;EACrD;CACD;EACE,IAAI;EACJ,SAAS;EACT,SACE;EACH;CACF;AAED,SAAS,WAAW,UAA2B;AAC7C,QACE,2BAA2B,KAAK,SAAS,IAAI,SAAS,SAAS,UAAU;;AAI7E,SAAS,YAAY,KAAa,QAAkB,EAAE,EAAY;CAChE,MAAM,UAAU,GAAG,YAAY,KAAK,EAAE,eAAe,MAAM,CAAC;AAE5D,MAAK,MAAM,SAAS,SAAS;EAC3B,MAAM,WAAW,KAAK,KAAK,KAAK,MAAM,KAAK;AAE3C,MAAI,MAAM,aAAa,EAAE;AACvB,OAAI;IAAC;IAAgB;IAAQ;IAAS;IAAO,CAAC,SAAS,MAAM,KAAK,CAChE;AACF,eAAY,UAAU,MAAM;aACnB,MAAM,QAAQ,IAAI,cAAc,KAAK,MAAM,KAAK,CACzD,OAAM,KAAK,SAAS;;AAIxB,QAAO;;AAYT,SAAS,SAAS,UAAkB,OAA4B;CAC9D,MAAM,aAA0B,EAAE;CAClC,MAAM,UAAU,GAAG,aAAa,UAAU,QAAQ;CAClD,MAAM,OAAO,SAAS,SAAS,OAAO,GAAG,KAAK,MAAM,KAAK;CACzD,MAAM,WAAW,WAAW,SAAS;CAGrC,MAAM,OADM,MAAM,MAAM,QAAQ,CACf,MAAM;AAEvB,MAAK,MAAM,QAAQ,OAAO;AAExB,MAAI,YAAY,KAAK,iBAAiB,MAAO;EAE7C,MAAM,UAAU,KAAK,QAAQ,KAAK,QAAQ;AAE1C,OAAK,MAAM,SAAS,SAAS;GAC3B,MAAM,OAAO,MAAM,MAAM;AAEzB,OAAI,KAAK,UAAU,CAAC,KAAK,OAAO,KAAK,CAAE;GAEvC,MAAM,QAAQ,MAAM,OAAO;AAC3B,cAAW,KAAK;IACd,MAAM;IACN,MAAM,MAAM,MAAM,OAAO;IACzB,QAAQ,MAAM,MAAM,SAAS;IAC7B,MAAM,KAAK;IACX,SAAS,KAAK;IACd,MAAM,KAAK,SAAS,KAAK,GAAG,KAAK,MAAM,GAAG,GAAG,CAAC,OAAO;IACtD,CAAC;;;AAIN,QAAO;;;;;AAMT,SAAS,UAAU;CACjB,MAAM,UAAU,QAAQ,KAAK;CAC7B,MAAM,QAAQ,YAAY,QAAQ;AAElC,SAAQ,IAAI,YAAY,MAAM,OAAO,wBAAwB;CAE7D,MAAM,gBAA6B,EAAE;AAErC,MAAK,MAAM,QAAQ,OAAO;EACxB,MAAM,aAAa,SAAS,MAAM,MAAM;AACxC,gBAAc,KAAK,GAAG,WAAW;;AAGnC,KAAI,cAAc,WAAW,GAAG;AAC9B,UAAQ,IAAI,qCAAqC;AACjD,UAAQ,KAAK,EAAE;;AAGjB,SAAQ,IAAI,SAAS,cAAc,OAAO,kBAAkB;AAE5D,MAAK,MAAM,KAAK,eAAe;EAC7B,MAAM,UAAU,KAAK,SAAS,SAAS,EAAE,KAAK;AAC9C,UAAQ,IAAI,GAAG,QAAQ,GAAG,EAAE,KAAK,GAAG,EAAE,SAAS;AAC/C,UAAQ,IAAI,KAAK,EAAE,KAAK,IAAI,EAAE,UAAU;AACxC,UAAQ,IAAI,OAAO,EAAE,KAAK,IAAI;;AAGhC,SAAQ,KAAK,EAAE;;AAGjB,MAAa,cAAc,IAAI,QAAQ,OAAO,CAC3C,YAAY,4CAA4C,CACxD,OAAO,QAAQ"}
@@ -0,0 +1,121 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { Command } from "commander";
4
+
5
+ //#region src/cli/commands/setup.ts
6
+ const PACKAGES = [{
7
+ name: "@databricks/appkit",
8
+ description: "Backend SDK"
9
+ }, {
10
+ name: "@databricks/appkit-ui",
11
+ description: "UI Integration, Charts, Tables, SSE, and more."
12
+ }];
13
+ const SECTION_START = "<!-- appkit-instructions-start -->";
14
+ const SECTION_END = "<!-- appkit-instructions-end -->";
15
+ /**
16
+ * Find which AppKit packages are installed by checking for package.json
17
+ */
18
+ function findInstalledPackages() {
19
+ const cwd = process.cwd();
20
+ const installed = [];
21
+ for (const pkg of PACKAGES) {
22
+ const packagePath = path.join(cwd, "node_modules", pkg.name, "package.json");
23
+ if (fs.existsSync(packagePath)) installed.push(pkg);
24
+ }
25
+ return installed;
26
+ }
27
+ /**
28
+ * Generate the AppKit section content
29
+ */
30
+ function generateSection(packages) {
31
+ return `${SECTION_START}
32
+ ## Databricks AppKit
33
+
34
+ This project uses Databricks AppKit packages. For AI assistant guidance on using these packages, refer to:
35
+
36
+ ${packages.map((pkg) => {
37
+ const docPath = `./node_modules/${pkg.name}/CLAUDE.md`;
38
+ return `- **${pkg.name}** (${pkg.description}): [${docPath}](${docPath})`;
39
+ }).join("\n")}
40
+ ${SECTION_END}`;
41
+ }
42
+ /**
43
+ * Generate standalone CLAUDE.md content (when no existing file)
44
+ */
45
+ function generateStandalone(packages) {
46
+ return `# AI Assistant Instructions
47
+
48
+ ${SECTION_START}
49
+ ## Databricks AppKit
50
+
51
+ This project uses Databricks AppKit packages. For AI assistant guidance on using these packages, refer to:
52
+
53
+ ${packages.map((pkg) => {
54
+ const docPath = `./node_modules/${pkg.name}/CLAUDE.md`;
55
+ return `- **${pkg.name}** (${pkg.description}): [${docPath}](${docPath})`;
56
+ }).join("\n")}
57
+ ${SECTION_END}
58
+ `;
59
+ }
60
+ /**
61
+ * Update existing content with AppKit section
62
+ */
63
+ function updateContent(existingContent, packages) {
64
+ const newSection = generateSection(packages);
65
+ const startIndex = existingContent.indexOf(SECTION_START);
66
+ const endIndex = existingContent.indexOf(SECTION_END);
67
+ if (startIndex !== -1 && endIndex !== -1) {
68
+ const before = existingContent.substring(0, startIndex);
69
+ const after = existingContent.substring(endIndex + 32);
70
+ return before + newSection + after;
71
+ }
72
+ return `${existingContent.trimEnd()}\n\n${newSection}\n`;
73
+ }
74
+ /**
75
+ * Setup command implementation
76
+ */
77
+ function runSetup(options) {
78
+ const shouldWrite = options.write;
79
+ const installed = findInstalledPackages();
80
+ if (installed.length === 0) {
81
+ console.log("No @databricks/appkit packages found in node_modules.");
82
+ console.log("\nMake sure you've installed at least one of:");
83
+ PACKAGES.forEach((pkg) => {
84
+ console.log(` - ${pkg.name}`);
85
+ });
86
+ process.exit(1);
87
+ }
88
+ console.log("Detected packages:");
89
+ installed.forEach((pkg) => {
90
+ console.log(` ✓ ${pkg.name}`);
91
+ });
92
+ const claudePath = path.join(process.cwd(), "CLAUDE.md");
93
+ const existingContent = fs.existsSync(claudePath) ? fs.readFileSync(claudePath, "utf-8") : null;
94
+ let finalContent;
95
+ let action;
96
+ if (existingContent) {
97
+ finalContent = updateContent(existingContent, installed);
98
+ action = existingContent.includes(SECTION_START) ? "Updated" : "Added to";
99
+ } else {
100
+ finalContent = generateStandalone(installed);
101
+ action = "Created";
102
+ }
103
+ if (shouldWrite) {
104
+ fs.writeFileSync(claudePath, finalContent);
105
+ console.log(`\n✓ ${action} CLAUDE.md`);
106
+ console.log(` Path: ${claudePath}`);
107
+ } else {
108
+ console.log("\nTo create/update CLAUDE.md, run:");
109
+ console.log(" npx appkit setup --write\n");
110
+ if (existingContent) console.log(`This will ${existingContent.includes(SECTION_START) ? "update the existing" : "add a new"} AppKit section.\n`);
111
+ console.log("Preview of AppKit section:\n");
112
+ console.log("─".repeat(50));
113
+ console.log(generateSection(installed));
114
+ console.log("─".repeat(50));
115
+ }
116
+ }
117
+ const setupCommand = new Command("setup").description("Setup CLAUDE.md with AppKit package references").option("-w, --write", "Create or update CLAUDE.md file in current directory").action(runSetup);
118
+
119
+ //#endregion
120
+ export { setupCommand };
121
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","names":[],"sources":["../../../src/cli/commands/setup.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\n\nconst PACKAGES = [\n { name: \"@databricks/appkit\", description: \"Backend SDK\" },\n {\n name: \"@databricks/appkit-ui\",\n description: \"UI Integration, Charts, Tables, SSE, and more.\",\n },\n];\n\nconst SECTION_START = \"<!-- appkit-instructions-start -->\";\nconst SECTION_END = \"<!-- appkit-instructions-end -->\";\n\n/**\n * Find which AppKit packages are installed by checking for package.json\n */\nfunction findInstalledPackages() {\n const cwd = process.cwd();\n const installed = [];\n\n for (const pkg of PACKAGES) {\n const packagePath = path.join(\n cwd,\n \"node_modules\",\n pkg.name,\n \"package.json\",\n );\n if (fs.existsSync(packagePath)) {\n installed.push(pkg);\n }\n }\n\n return installed;\n}\n\n/**\n * Generate the AppKit section content\n */\nfunction generateSection(packages: typeof PACKAGES) {\n const links = packages\n .map((pkg) => {\n const docPath = `./node_modules/${pkg.name}/CLAUDE.md`;\n return `- **${pkg.name}** (${pkg.description}): [${docPath}](${docPath})`;\n })\n .join(\"\\n\");\n\n return `${SECTION_START}\n## Databricks AppKit\n\nThis project uses Databricks AppKit packages. For AI assistant guidance on using these packages, refer to:\n\n${links}\n${SECTION_END}`;\n}\n\n/**\n * Generate standalone CLAUDE.md content (when no existing file)\n */\nfunction generateStandalone(packages: typeof PACKAGES) {\n const links = packages\n .map((pkg) => {\n const docPath = `./node_modules/${pkg.name}/CLAUDE.md`;\n return `- **${pkg.name}** (${pkg.description}): [${docPath}](${docPath})`;\n })\n .join(\"\\n\");\n\n return `# AI Assistant Instructions\n\n${SECTION_START}\n## Databricks AppKit\n\nThis project uses Databricks AppKit packages. For AI assistant guidance on using these packages, refer to:\n\n${links}\n${SECTION_END}\n`;\n}\n\n/**\n * Update existing content with AppKit section\n */\nfunction updateContent(existingContent: string, packages: typeof PACKAGES) {\n const newSection = generateSection(packages);\n\n // Check if AppKit section already exists\n const startIndex = existingContent.indexOf(SECTION_START);\n const endIndex = existingContent.indexOf(SECTION_END);\n\n if (startIndex !== -1 && endIndex !== -1) {\n // Replace existing section\n const before = existingContent.substring(0, startIndex);\n const after = existingContent.substring(endIndex + SECTION_END.length);\n return before + newSection + after;\n }\n\n // Append section to end\n return `${existingContent.trimEnd()}\\n\\n${newSection}\\n`;\n}\n\n/**\n * Setup command implementation\n */\nfunction runSetup(options: { write?: boolean }) {\n const shouldWrite = options.write;\n\n // Find installed packages\n const installed = findInstalledPackages();\n\n if (installed.length === 0) {\n console.log(\"No @databricks/appkit packages found in node_modules.\");\n console.log(\"\\nMake sure you've installed at least one of:\");\n PACKAGES.forEach((pkg) => {\n console.log(` - ${pkg.name}`);\n });\n process.exit(1);\n }\n\n console.log(\"Detected packages:\");\n installed.forEach((pkg) => {\n console.log(` ✓ ${pkg.name}`);\n });\n\n const claudePath = path.join(process.cwd(), \"CLAUDE.md\");\n const existingContent = fs.existsSync(claudePath)\n ? fs.readFileSync(claudePath, \"utf-8\")\n : null;\n\n let finalContent: string;\n let action: string;\n\n if (existingContent) {\n finalContent = updateContent(existingContent, installed);\n action = existingContent.includes(SECTION_START) ? \"Updated\" : \"Added to\";\n } else {\n finalContent = generateStandalone(installed);\n action = \"Created\";\n }\n\n if (shouldWrite) {\n fs.writeFileSync(claudePath, finalContent);\n console.log(`\\n✓ ${action} CLAUDE.md`);\n console.log(` Path: ${claudePath}`);\n } else {\n console.log(\"\\nTo create/update CLAUDE.md, run:\");\n console.log(\" npx appkit setup --write\\n\");\n\n if (existingContent) {\n console.log(\n `This will ${\n existingContent.includes(SECTION_START)\n ? \"update the existing\"\n : \"add a new\"\n } AppKit section.\\n`,\n );\n }\n\n console.log(\"Preview of AppKit section:\\n\");\n console.log(\"─\".repeat(50));\n console.log(generateSection(installed));\n console.log(\"─\".repeat(50));\n }\n}\n\nexport const setupCommand = new Command(\"setup\")\n .description(\"Setup CLAUDE.md with AppKit package references\")\n .option(\"-w, --write\", \"Create or update CLAUDE.md file in current directory\")\n .action(runSetup);\n"],"mappings":";;;;;AAIA,MAAM,WAAW,CACf;CAAE,MAAM;CAAsB,aAAa;CAAe,EAC1D;CACE,MAAM;CACN,aAAa;CACd,CACF;AAED,MAAM,gBAAgB;AACtB,MAAM,cAAc;;;;AAKpB,SAAS,wBAAwB;CAC/B,MAAM,MAAM,QAAQ,KAAK;CACzB,MAAM,YAAY,EAAE;AAEpB,MAAK,MAAM,OAAO,UAAU;EAC1B,MAAM,cAAc,KAAK,KACvB,KACA,gBACA,IAAI,MACJ,eACD;AACD,MAAI,GAAG,WAAW,YAAY,CAC5B,WAAU,KAAK,IAAI;;AAIvB,QAAO;;;;;AAMT,SAAS,gBAAgB,UAA2B;AAQlD,QAAO,GAAG,cAAc;;;;;EAPV,SACX,KAAK,QAAQ;EACZ,MAAM,UAAU,kBAAkB,IAAI,KAAK;AAC3C,SAAO,OAAO,IAAI,KAAK,MAAM,IAAI,YAAY,MAAM,QAAQ,IAAI,QAAQ;GACvE,CACD,KAAK,KAAK,CAOP;EACN;;;;;AAMF,SAAS,mBAAmB,UAA2B;AAQrD,QAAO;;EAEP,cAAc;;;;;EATA,SACX,KAAK,QAAQ;EACZ,MAAM,UAAU,kBAAkB,IAAI,KAAK;AAC3C,SAAO,OAAO,IAAI,KAAK,MAAM,IAAI,YAAY,MAAM,QAAQ,IAAI,QAAQ;GACvE,CACD,KAAK,KAAK,CASP;EACN,YAAY;;;;;;AAOd,SAAS,cAAc,iBAAyB,UAA2B;CACzE,MAAM,aAAa,gBAAgB,SAAS;CAG5C,MAAM,aAAa,gBAAgB,QAAQ,cAAc;CACzD,MAAM,WAAW,gBAAgB,QAAQ,YAAY;AAErD,KAAI,eAAe,MAAM,aAAa,IAAI;EAExC,MAAM,SAAS,gBAAgB,UAAU,GAAG,WAAW;EACvD,MAAM,QAAQ,gBAAgB,UAAU,WAAW,GAAmB;AACtE,SAAO,SAAS,aAAa;;AAI/B,QAAO,GAAG,gBAAgB,SAAS,CAAC,MAAM,WAAW;;;;;AAMvD,SAAS,SAAS,SAA8B;CAC9C,MAAM,cAAc,QAAQ;CAG5B,MAAM,YAAY,uBAAuB;AAEzC,KAAI,UAAU,WAAW,GAAG;AAC1B,UAAQ,IAAI,wDAAwD;AACpE,UAAQ,IAAI,gDAAgD;AAC5D,WAAS,SAAS,QAAQ;AACxB,WAAQ,IAAI,OAAO,IAAI,OAAO;IAC9B;AACF,UAAQ,KAAK,EAAE;;AAGjB,SAAQ,IAAI,qBAAqB;AACjC,WAAU,SAAS,QAAQ;AACzB,UAAQ,IAAI,OAAO,IAAI,OAAO;GAC9B;CAEF,MAAM,aAAa,KAAK,KAAK,QAAQ,KAAK,EAAE,YAAY;CACxD,MAAM,kBAAkB,GAAG,WAAW,WAAW,GAC7C,GAAG,aAAa,YAAY,QAAQ,GACpC;CAEJ,IAAI;CACJ,IAAI;AAEJ,KAAI,iBAAiB;AACnB,iBAAe,cAAc,iBAAiB,UAAU;AACxD,WAAS,gBAAgB,SAAS,cAAc,GAAG,YAAY;QAC1D;AACL,iBAAe,mBAAmB,UAAU;AAC5C,WAAS;;AAGX,KAAI,aAAa;AACf,KAAG,cAAc,YAAY,aAAa;AAC1C,UAAQ,IAAI,OAAO,OAAO,YAAY;AACtC,UAAQ,IAAI,WAAW,aAAa;QAC/B;AACL,UAAQ,IAAI,qCAAqC;AACjD,UAAQ,IAAI,+BAA+B;AAE3C,MAAI,gBACF,SAAQ,IACN,aACE,gBAAgB,SAAS,cAAc,GACnC,wBACA,YACL,oBACF;AAGH,UAAQ,IAAI,+BAA+B;AAC3C,UAAQ,IAAI,IAAI,OAAO,GAAG,CAAC;AAC3B,UAAQ,IAAI,gBAAgB,UAAU,CAAC;AACvC,UAAQ,IAAI,IAAI,OAAO,GAAG,CAAC;;;AAI/B,MAAa,eAAe,IAAI,QAAQ,QAAQ,CAC7C,YAAY,iDAAiD,CAC7D,OAAO,eAAe,uDAAuD,CAC7E,OAAO,SAAS"}
@@ -0,0 +1 @@
1
+ export { };
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env node
2
+ import { setupCommand } from "./commands/setup.js";
3
+ import { generateTypesCommand } from "./commands/generate-types.js";
4
+ import { lintCommand } from "./commands/lint.js";
5
+ import { docsCommand } from "./commands/docs.js";
6
+ import { readFileSync } from "node:fs";
7
+ import { fileURLToPath } from "node:url";
8
+ import { dirname, join } from "node:path";
9
+ import { Command } from "commander";
10
+
11
+ //#region src/cli/index.ts
12
+ const pkgPath = join(dirname(fileURLToPath(import.meta.url)), "../../package.json");
13
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
14
+ const cmd = new Command();
15
+ cmd.name("appkit").description("CLI tools for Databricks AppKit").version(pkg.version);
16
+ cmd.addCommand(setupCommand);
17
+ cmd.addCommand(generateTypesCommand);
18
+ cmd.addCommand(lintCommand);
19
+ cmd.addCommand(docsCommand);
20
+ cmd.parse();
21
+
22
+ //#endregion
23
+ export { };
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/cli/index.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { readFileSync } from \"node:fs\";\nimport { fileURLToPath } from \"node:url\";\nimport { dirname, join } from \"node:path\";\nimport { Command } from \"commander\";\nimport { setupCommand } from \"./commands/setup.js\";\nimport { generateTypesCommand } from \"./commands/generate-types.js\";\nimport { lintCommand } from \"./commands/lint.js\";\nimport { docsCommand } from \"./commands/docs.js\";\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\nconst pkgPath = join(__dirname, \"../../package.json\");\nconst pkg = JSON.parse(readFileSync(pkgPath, \"utf-8\"));\n\nconst cmd = new Command();\n\ncmd\n .name(\"appkit\")\n .description(\"CLI tools for Databricks AppKit\")\n .version(pkg.version);\n\ncmd.addCommand(setupCommand);\ncmd.addCommand(generateTypesCommand);\ncmd.addCommand(lintCommand);\ncmd.addCommand(docsCommand);\n\ncmd.parse();\n"],"mappings":";;;;;;;;;;;AAYA,MAAM,UAAU,KADE,QAAQ,cAAc,OAAO,KAAK,IAAI,CAAC,EACzB,qBAAqB;AACrD,MAAM,MAAM,KAAK,MAAM,aAAa,SAAS,QAAQ,CAAC;AAEtD,MAAM,MAAM,IAAI,SAAS;AAEzB,IACG,KAAK,SAAS,CACd,YAAY,kCAAkC,CAC9C,QAAQ,IAAI,QAAQ;AAEvB,IAAI,WAAW,aAAa;AAC5B,IAAI,WAAW,qBAAqB;AACpC,IAAI,WAAW,YAAY;AAC3B,IAAI,WAAW,YAAY;AAE3B,IAAI,OAAO"}
@@ -11,11 +11,47 @@ declare class ArrowClient {
11
11
  * @returns Promise resolving to an Arrow Table
12
12
  */
13
13
  static processArrowBuffer(buffer: Uint8Array): Promise<Table$1>;
14
+ /**
15
+ * Fetches Arrow data from a URL and processes it into a Table.
16
+ * Convenience method that combines fetchArrow and processArrowBuffer.
17
+ *
18
+ * @param url - URL to fetch Arrow data from
19
+ * @param headers - Optional HTTP headers to include in the request
20
+ * @returns Promise resolving to an Arrow Table
21
+ * @example
22
+ * ```typescript
23
+ * const table = await ArrowClient.fetchAndProcessArrow('/api/data/arrow');
24
+ * console.log(`Loaded ${table.numRows} rows`);
25
+ * ```
26
+ */
14
27
  static fetchAndProcessArrow(url: string, headers?: Record<string, string>): Promise<Table$1>;
28
+ /**
29
+ * Extracts field metadata (name and type) from an Arrow Table.
30
+ *
31
+ * @param table - Arrow Table to extract fields from
32
+ * @returns Array of field metadata objects
33
+ * @example
34
+ * ```typescript
35
+ * const fields = ArrowClient.extractArrowFields(table);
36
+ * // [{ name: "date", type: Date32 }, { name: "value", type: Float64 }]
37
+ * ```
38
+ */
15
39
  static extractArrowFields(table: Table$1): {
16
40
  name: string;
17
41
  type: any;
18
42
  }[];
43
+ /**
44
+ * Extracts all columns from an Arrow Table as JavaScript arrays.
45
+ * Each column is converted to a native JavaScript array.
46
+ *
47
+ * @param table - Arrow Table to extract columns from
48
+ * @returns Object mapping column names to arrays
49
+ * @example
50
+ * ```typescript
51
+ * const columns = ArrowClient.extractArrowColumns(table);
52
+ * // { date: ["2024-01-01", "2024-01-02"], value: [100, 200] }
53
+ * ```
54
+ */
19
55
  static extractArrowColumns(table: Table$1): Record<string, any>;
20
56
  /**
21
57
  * Extracts chart data from Arrow table.
@@ -51,6 +87,18 @@ declare class ArrowClient {
51
87
  static detectFieldsFromArrow(table: Table$1, orientation?: "vertical" | "horizontal"): DetectedFields & {
52
88
  chartType: "timeseries" | "categorical";
53
89
  };
90
+ /**
91
+ * Fetches raw Arrow IPC data from a URL.
92
+ *
93
+ * @param url - URL to fetch Arrow data from
94
+ * @param headers - Optional HTTP headers to include in the request
95
+ * @returns Promise resolving to the raw Arrow buffer as Uint8Array
96
+ * @example
97
+ * ```typescript
98
+ * const buffer = await ArrowClient.fetchArrow('/api/data/arrow');
99
+ * const table = await ArrowClient.processArrowBuffer(buffer);
100
+ * ```
101
+ */
54
102
  static fetchArrow(url: string, headers?: Record<string, string>): Promise<Uint8Array>;
55
103
  }
56
104
  interface DetectedFields {
@@ -1 +1 @@
1
- {"version":3,"file":"arrow-client.d.ts","names":[],"sources":["../../../src/js/arrow/arrow-client.ts"],"sourcesContent":[],"mappings":";;;;AAmBa,cAAA,WAAA,CAAW;EAAA;;;;;;;SAwCW,kBAAA,CAAA,MAAA,EAhCO,UAgCP,CAAA,EAhCoB,OAgCpB,CAhC4B,OAgC5B,CAAA;SASC,oBAAA,CAAA,GAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAxBtB,MAwBsB,CAAA,MAAA,EAAA,MAAA,CAAA,CAAA,EAvB/B,OAuB+B,CAvBvB,OAuBuB,CAAA;SAAQ,kBAAA,CAAA,KAAA,EATT,OASS,CAAA,EAAA;IAuBX,IAAA,EAAA,MAAA;IA6MrB,IAAA,EAAA,GAAA;KAtJD;SAEN,mBAAA,CAAA,KAAA,EAhF+B,OAgF/B,CAAA,EAhFuC,MAgFvC,CAAA,MAAA,EAAA,GAAA,CAAA;;;;;AAsIL;;;;;iCA/LiC;;cA6MrB;;;;;;;;;;;;;;;;;;;;sCAtJD,mDAEN;;;2CA8GS,yBACT,QAAQ;;UAuBI,cAAA"}
1
+ {"version":3,"file":"arrow-client.d.ts","names":[],"sources":["../../../src/js/arrow/arrow-client.ts"],"sourcesContent":[],"mappings":";;;;AAmBa,cAAA,WAAA,CAAW;EAAA;;;;;;;SAgEW,kBAAA,CAAA,MAAA,EAxDO,UAwDP,CAAA,EAxDoB,OAwDpB,CAxD4B,OAwD5B,CAAA;;;;;;;;;;;AAuPnC;;;qDAjRc,yBACT,QAAQ;;;;;;;;;;;;mCAyBsB;;;;;;;;;;;;;;;;oCAqBC,UAAQ;;;;;;;;;;iCAuBX;;cAyNrB;;;;;;;;;;;;;;;;;;;;sCAlKD,mDAEN;;;;;;;;;;;;;;;2CA0HS,yBACT,QAAQ;;UAuBI,cAAA"}
@@ -19,6 +19,19 @@ var ArrowClient = class ArrowClient {
19
19
  throw new Error(`Failed to process Arrow buffer: ${error instanceof Error ? error.message : "Unknown error"}`);
20
20
  }
21
21
  }
22
+ /**
23
+ * Fetches Arrow data from a URL and processes it into a Table.
24
+ * Convenience method that combines fetchArrow and processArrowBuffer.
25
+ *
26
+ * @param url - URL to fetch Arrow data from
27
+ * @param headers - Optional HTTP headers to include in the request
28
+ * @returns Promise resolving to an Arrow Table
29
+ * @example
30
+ * ```typescript
31
+ * const table = await ArrowClient.fetchAndProcessArrow('/api/data/arrow');
32
+ * console.log(`Loaded ${table.numRows} rows`);
33
+ * ```
34
+ */
22
35
  static async fetchAndProcessArrow(url, headers) {
23
36
  try {
24
37
  const buffer = await ArrowClient.fetchArrow(url, headers);
@@ -27,6 +40,17 @@ var ArrowClient = class ArrowClient {
27
40
  throw new Error(`Failed to fetch Arrow data: ${error instanceof Error ? error.message : "Unknown error"}`);
28
41
  }
29
42
  }
43
+ /**
44
+ * Extracts field metadata (name and type) from an Arrow Table.
45
+ *
46
+ * @param table - Arrow Table to extract fields from
47
+ * @returns Array of field metadata objects
48
+ * @example
49
+ * ```typescript
50
+ * const fields = ArrowClient.extractArrowFields(table);
51
+ * // [{ name: "date", type: Date32 }, { name: "value", type: Float64 }]
52
+ * ```
53
+ */
30
54
  static extractArrowFields(table) {
31
55
  return table.schema.fields.map((field) => {
32
56
  return {
@@ -35,6 +59,18 @@ var ArrowClient = class ArrowClient {
35
59
  };
36
60
  });
37
61
  }
62
+ /**
63
+ * Extracts all columns from an Arrow Table as JavaScript arrays.
64
+ * Each column is converted to a native JavaScript array.
65
+ *
66
+ * @param table - Arrow Table to extract columns from
67
+ * @returns Object mapping column names to arrays
68
+ * @example
69
+ * ```typescript
70
+ * const columns = ArrowClient.extractArrowColumns(table);
71
+ * // { date: ["2024-01-01", "2024-01-02"], value: [100, 200] }
72
+ * ```
73
+ */
38
74
  static extractArrowColumns(table) {
39
75
  const cols = {};
40
76
  for (const field of table.schema.fields) {
@@ -116,10 +152,10 @@ var ArrowClient = class ArrowClient {
116
152
  const isTimeSeries = primaryDateFields.length > 0 && orientation !== "horizontal";
117
153
  const isCategorical = nameFields.length > 0 && (primaryDateFields.length === 0 || orientation === "horizontal");
118
154
  if (orientation === "horizontal" || isCategorical) {
119
- const xField$1 = nameFields[0] || primaryDateFields[0] || metadataDateFields[0] || fieldNames[0];
155
+ const xField = nameFields[0] || primaryDateFields[0] || metadataDateFields[0] || fieldNames[0];
120
156
  return {
121
- xField: xField$1,
122
- yFields: numericFields.length > 0 ? numericFields : fieldNames.filter((k) => k !== xField$1),
157
+ xField,
158
+ yFields: numericFields.length > 0 ? numericFields : fieldNames.filter((k) => k !== xField),
123
159
  chartType: "categorical"
124
160
  };
125
161
  }
@@ -130,6 +166,18 @@ var ArrowClient = class ArrowClient {
130
166
  chartType: isTimeSeries ? "timeseries" : "categorical"
131
167
  };
132
168
  }
169
+ /**
170
+ * Fetches raw Arrow IPC data from a URL.
171
+ *
172
+ * @param url - URL to fetch Arrow data from
173
+ * @param headers - Optional HTTP headers to include in the request
174
+ * @returns Promise resolving to the raw Arrow buffer as Uint8Array
175
+ * @example
176
+ * ```typescript
177
+ * const buffer = await ArrowClient.fetchArrow('/api/data/arrow');
178
+ * const table = await ArrowClient.processArrowBuffer(buffer);
179
+ * ```
180
+ */
133
181
  static async fetchArrow(url, headers) {
134
182
  try {
135
183
  const response = await fetch(url, { headers: {