@databricks/appkit-ui 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (359) hide show
  1. package/CLAUDE.md +3 -0
  2. package/DCO +25 -0
  3. package/LICENSE +203 -0
  4. package/NOTICE.md +73 -0
  5. package/README.md +35 -0
  6. package/bin/setup-claude.js +190 -0
  7. package/dist/js/arrow/arrow-client.d.ts +64 -0
  8. package/dist/js/arrow/arrow-client.d.ts.map +1 -0
  9. package/dist/js/arrow/arrow-client.js +181 -0
  10. package/dist/js/arrow/arrow-client.js.map +1 -0
  11. package/dist/js/arrow/index.js +3 -0
  12. package/dist/js/arrow/lazy-arrow.d.ts +23 -0
  13. package/dist/js/arrow/lazy-arrow.d.ts.map +1 -0
  14. package/dist/js/arrow/lazy-arrow.js +86 -0
  15. package/dist/js/arrow/lazy-arrow.js.map +1 -0
  16. package/dist/js/constants.d.ts +10 -0
  17. package/dist/js/constants.d.ts.map +1 -0
  18. package/dist/js/constants.js +30 -0
  19. package/dist/js/constants.js.map +1 -0
  20. package/dist/js/index.d.ts +8 -0
  21. package/dist/js/index.js +8 -0
  22. package/dist/js/sse/connect-sse.d.ts +14 -0
  23. package/dist/js/sse/connect-sse.d.ts.map +1 -0
  24. package/dist/js/sse/connect-sse.js +128 -0
  25. package/dist/js/sse/connect-sse.js.map +1 -0
  26. package/dist/js/sse/types.d.ts +34 -0
  27. package/dist/js/sse/types.d.ts.map +1 -0
  28. package/dist/react/charts/area/index.d.ts +33 -0
  29. package/dist/react/charts/area/index.d.ts.map +1 -0
  30. package/dist/react/charts/area/index.js +29 -0
  31. package/dist/react/charts/area/index.js.map +1 -0
  32. package/dist/react/charts/bar/index.d.ts +43 -0
  33. package/dist/react/charts/bar/index.d.ts.map +1 -0
  34. package/dist/react/charts/bar/index.js +39 -0
  35. package/dist/react/charts/bar/index.js.map +1 -0
  36. package/dist/react/charts/base.d.ts +89 -0
  37. package/dist/react/charts/base.d.ts.map +1 -0
  38. package/dist/react/charts/base.js +123 -0
  39. package/dist/react/charts/base.js.map +1 -0
  40. package/dist/react/charts/chart-error-boundary.js +37 -0
  41. package/dist/react/charts/chart-error-boundary.js.map +1 -0
  42. package/dist/react/charts/constants.d.ts +22 -0
  43. package/dist/react/charts/constants.d.ts.map +1 -0
  44. package/dist/react/charts/constants.js +86 -0
  45. package/dist/react/charts/constants.js.map +1 -0
  46. package/dist/react/charts/create-chart.d.ts +26 -0
  47. package/dist/react/charts/create-chart.d.ts.map +1 -0
  48. package/dist/react/charts/create-chart.js +55 -0
  49. package/dist/react/charts/create-chart.js.map +1 -0
  50. package/dist/react/charts/empty.js +16 -0
  51. package/dist/react/charts/empty.js.map +1 -0
  52. package/dist/react/charts/error.js +16 -0
  53. package/dist/react/charts/error.js.map +1 -0
  54. package/dist/react/charts/heatmap/index.d.ts +42 -0
  55. package/dist/react/charts/heatmap/index.d.ts.map +1 -0
  56. package/dist/react/charts/heatmap/index.js +38 -0
  57. package/dist/react/charts/heatmap/index.js.map +1 -0
  58. package/dist/react/charts/index.js +18 -0
  59. package/dist/react/charts/line/index.d.ts +34 -0
  60. package/dist/react/charts/line/index.d.ts.map +1 -0
  61. package/dist/react/charts/line/index.js +30 -0
  62. package/dist/react/charts/line/index.js.map +1 -0
  63. package/dist/react/charts/loading.js +13 -0
  64. package/dist/react/charts/loading.js.map +1 -0
  65. package/dist/react/charts/normalize.d.ts +37 -0
  66. package/dist/react/charts/normalize.d.ts.map +1 -0
  67. package/dist/react/charts/normalize.js +256 -0
  68. package/dist/react/charts/normalize.js.map +1 -0
  69. package/dist/react/charts/options.d.ts +39 -0
  70. package/dist/react/charts/options.d.ts.map +1 -0
  71. package/dist/react/charts/options.js +212 -0
  72. package/dist/react/charts/options.js.map +1 -0
  73. package/dist/react/charts/pie/index.d.ts +57 -0
  74. package/dist/react/charts/pie/index.d.ts.map +1 -0
  75. package/dist/react/charts/pie/index.js +50 -0
  76. package/dist/react/charts/pie/index.js.map +1 -0
  77. package/dist/react/charts/radar/index.d.ts +32 -0
  78. package/dist/react/charts/radar/index.d.ts.map +1 -0
  79. package/dist/react/charts/radar/index.js +28 -0
  80. package/dist/react/charts/radar/index.js.map +1 -0
  81. package/dist/react/charts/scatter/index.d.ts +32 -0
  82. package/dist/react/charts/scatter/index.d.ts.map +1 -0
  83. package/dist/react/charts/scatter/index.js +28 -0
  84. package/dist/react/charts/scatter/index.js.map +1 -0
  85. package/dist/react/charts/theme.d.ts +23 -0
  86. package/dist/react/charts/theme.d.ts.map +1 -0
  87. package/dist/react/charts/theme.js +96 -0
  88. package/dist/react/charts/theme.js.map +1 -0
  89. package/dist/react/charts/types.d.ts +160 -0
  90. package/dist/react/charts/types.d.ts.map +1 -0
  91. package/dist/react/charts/types.js +17 -0
  92. package/dist/react/charts/types.js.map +1 -0
  93. package/dist/react/charts/utils.d.ts +36 -0
  94. package/dist/react/charts/utils.d.ts.map +1 -0
  95. package/dist/react/charts/utils.js +77 -0
  96. package/dist/react/charts/utils.js.map +1 -0
  97. package/dist/react/charts/wrapper.d.ts +65 -0
  98. package/dist/react/charts/wrapper.d.ts.map +1 -0
  99. package/dist/react/charts/wrapper.js +94 -0
  100. package/dist/react/charts/wrapper.js.map +1 -0
  101. package/dist/react/hooks/index.js +2 -0
  102. package/dist/react/hooks/types.d.ts +101 -0
  103. package/dist/react/hooks/types.d.ts.map +1 -0
  104. package/dist/react/hooks/use-analytics-query.d.ts +33 -0
  105. package/dist/react/hooks/use-analytics-query.d.ts.map +1 -0
  106. package/dist/react/hooks/use-analytics-query.js +146 -0
  107. package/dist/react/hooks/use-analytics-query.js.map +1 -0
  108. package/dist/react/hooks/use-chart-data.d.ts +54 -0
  109. package/dist/react/hooks/use-chart-data.d.ts.map +1 -0
  110. package/dist/react/hooks/use-chart-data.js +80 -0
  111. package/dist/react/hooks/use-chart-data.js.map +1 -0
  112. package/dist/react/hooks/use-mobile.js +21 -0
  113. package/dist/react/hooks/use-mobile.js.map +1 -0
  114. package/dist/react/hooks/use-query-hmr.js +19 -0
  115. package/dist/react/hooks/use-query-hmr.js.map +1 -0
  116. package/dist/react/index.d.ts +75 -0
  117. package/dist/react/index.js +79 -0
  118. package/dist/react/lib/format.js +42 -0
  119. package/dist/react/lib/format.js.map +1 -0
  120. package/dist/react/lib/utils.js +11 -0
  121. package/dist/react/lib/utils.js.map +1 -0
  122. package/dist/react/table/data-table.d.ts +47 -0
  123. package/dist/react/table/data-table.d.ts.map +1 -0
  124. package/dist/react/table/data-table.js +205 -0
  125. package/dist/react/table/data-table.js.map +1 -0
  126. package/dist/react/table/empty.js +16 -0
  127. package/dist/react/table/empty.js.map +1 -0
  128. package/dist/react/table/error.js +16 -0
  129. package/dist/react/table/error.js.map +1 -0
  130. package/dist/react/table/index.js +1 -0
  131. package/dist/react/table/loading.js +50 -0
  132. package/dist/react/table/loading.js.map +1 -0
  133. package/dist/react/table/table-wrapper.js +143 -0
  134. package/dist/react/table/table-wrapper.js.map +1 -0
  135. package/dist/react/table/types.d.ts +55 -0
  136. package/dist/react/table/types.d.ts.map +1 -0
  137. package/dist/react/ui/accordion.d.ts +25 -0
  138. package/dist/react/ui/accordion.d.ts.map +1 -0
  139. package/dist/react/ui/accordion.js +45 -0
  140. package/dist/react/ui/accordion.js.map +1 -0
  141. package/dist/react/ui/alert-dialog.d.ts +49 -0
  142. package/dist/react/ui/alert-dialog.d.ts.map +1 -0
  143. package/dist/react/ui/alert-dialog.js +82 -0
  144. package/dist/react/ui/alert-dialog.js.map +1 -0
  145. package/dist/react/ui/alert.d.ts +25 -0
  146. package/dist/react/ui/alert.d.ts.map +1 -0
  147. package/dist/react/ui/alert.js +38 -0
  148. package/dist/react/ui/alert.js.map +1 -0
  149. package/dist/react/ui/aspect-ratio.d.ts +10 -0
  150. package/dist/react/ui/aspect-ratio.d.ts.map +1 -0
  151. package/dist/react/ui/aspect-ratio.js +16 -0
  152. package/dist/react/ui/aspect-ratio.js.map +1 -0
  153. package/dist/react/ui/avatar.d.ts +20 -0
  154. package/dist/react/ui/avatar.d.ts.map +1 -0
  155. package/dist/react/ui/avatar.js +30 -0
  156. package/dist/react/ui/avatar.js.map +1 -0
  157. package/dist/react/ui/badge.d.ts +20 -0
  158. package/dist/react/ui/badge.d.ts.map +1 -0
  159. package/dist/react/ui/badge.js +26 -0
  160. package/dist/react/ui/badge.js.map +1 -0
  161. package/dist/react/ui/breadcrumb.d.ts +38 -0
  162. package/dist/react/ui/breadcrumb.d.ts.map +1 -0
  163. package/dist/react/ui/breadcrumb.js +71 -0
  164. package/dist/react/ui/breadcrumb.js.map +1 -0
  165. package/dist/react/ui/button-group.d.ts +29 -0
  166. package/dist/react/ui/button-group.d.ts.map +1 -0
  167. package/dist/react/ui/button-group.js +41 -0
  168. package/dist/react/ui/button-group.js.map +1 -0
  169. package/dist/react/ui/button.d.ts +22 -0
  170. package/dist/react/ui/button.d.ts.map +1 -0
  171. package/dist/react/ui/button.js +45 -0
  172. package/dist/react/ui/button.js.map +1 -0
  173. package/dist/react/ui/calendar.d.ts +27 -0
  174. package/dist/react/ui/calendar.d.ts.map +1 -0
  175. package/dist/react/ui/calendar.js +109 -0
  176. package/dist/react/ui/calendar.js.map +1 -0
  177. package/dist/react/ui/card.d.ts +35 -0
  178. package/dist/react/ui/card.d.ts.map +1 -0
  179. package/dist/react/ui/card.js +57 -0
  180. package/dist/react/ui/card.js.map +1 -0
  181. package/dist/react/ui/carousel.d.ts +48 -0
  182. package/dist/react/ui/carousel.d.ts.map +1 -0
  183. package/dist/react/ui/carousel.js +134 -0
  184. package/dist/react/ui/carousel.js.map +1 -0
  185. package/dist/react/ui/chart.d.ts +80 -0
  186. package/dist/react/ui/chart.d.ts.map +1 -0
  187. package/dist/react/ui/chart.js +143 -0
  188. package/dist/react/ui/chart.js.map +1 -0
  189. package/dist/react/ui/checkbox.d.ts +12 -0
  190. package/dist/react/ui/checkbox.d.ts.map +1 -0
  191. package/dist/react/ui/checkbox.js +24 -0
  192. package/dist/react/ui/checkbox.js.map +1 -0
  193. package/dist/react/ui/collapsible.d.ts +16 -0
  194. package/dist/react/ui/collapsible.d.ts.map +1 -0
  195. package/dist/react/ui/collapsible.js +26 -0
  196. package/dist/react/ui/collapsible.js.map +1 -0
  197. package/dist/react/ui/command.d.ts +53 -0
  198. package/dist/react/ui/command.d.ts.map +1 -0
  199. package/dist/react/ui/command.js +87 -0
  200. package/dist/react/ui/command.js.map +1 -0
  201. package/dist/react/ui/context-menu.d.ts +77 -0
  202. package/dist/react/ui/context-menu.d.ts.map +1 -0
  203. package/dist/react/ui/context-menu.js +125 -0
  204. package/dist/react/ui/context-menu.js.map +1 -0
  205. package/dist/react/ui/dialog.d.ts +48 -0
  206. package/dist/react/ui/dialog.d.ts.map +1 -0
  207. package/dist/react/ui/dialog.js +87 -0
  208. package/dist/react/ui/dialog.js.map +1 -0
  209. package/dist/react/ui/drawer.d.ts +45 -0
  210. package/dist/react/ui/drawer.d.ts.map +1 -0
  211. package/dist/react/ui/drawer.js +81 -0
  212. package/dist/react/ui/drawer.js.map +1 -0
  213. package/dist/react/ui/dropdown-menu.d.ts +78 -0
  214. package/dist/react/ui/dropdown-menu.d.ts.map +1 -0
  215. package/dist/react/ui/dropdown-menu.js +124 -0
  216. package/dist/react/ui/dropdown-menu.js.map +1 -0
  217. package/dist/react/ui/empty.d.ts +36 -0
  218. package/dist/react/ui/empty.d.ts.map +1 -0
  219. package/dist/react/ui/empty.js +62 -0
  220. package/dist/react/ui/empty.js.map +1 -0
  221. package/dist/react/ui/field.d.ts +65 -0
  222. package/dist/react/ui/field.d.ts.map +1 -0
  223. package/dist/react/ui/field.js +120 -0
  224. package/dist/react/ui/field.js.map +1 -0
  225. package/dist/react/ui/form.d.ts +46 -0
  226. package/dist/react/ui/form.d.ts.map +1 -0
  227. package/dist/react/ui/form.js +92 -0
  228. package/dist/react/ui/form.js.map +1 -0
  229. package/dist/react/ui/hover-card.d.ts +20 -0
  230. package/dist/react/ui/hover-card.d.ts.map +1 -0
  231. package/dist/react/ui/hover-card.js +35 -0
  232. package/dist/react/ui/hover-card.js.map +1 -0
  233. package/dist/react/ui/index.js +53 -0
  234. package/dist/react/ui/input-group.d.ts +44 -0
  235. package/dist/react/ui/input-group.d.ts.map +1 -0
  236. package/dist/react/ui/input-group.js +82 -0
  237. package/dist/react/ui/input-group.js.map +1 -0
  238. package/dist/react/ui/input-otp.d.ts +29 -0
  239. package/dist/react/ui/input-otp.d.ts.map +1 -0
  240. package/dist/react/ui/input-otp.js +47 -0
  241. package/dist/react/ui/input-otp.js.map +1 -0
  242. package/dist/react/ui/input.d.ts +12 -0
  243. package/dist/react/ui/input.d.ts.map +1 -0
  244. package/dist/react/ui/input.js +16 -0
  245. package/dist/react/ui/input.js.map +1 -0
  246. package/dist/react/ui/item.d.ts +63 -0
  247. package/dist/react/ui/item.d.ts.map +1 -0
  248. package/dist/react/ui/item.js +118 -0
  249. package/dist/react/ui/item.js.map +1 -0
  250. package/dist/react/ui/kbd.d.ts +14 -0
  251. package/dist/react/ui/kbd.d.ts.map +1 -0
  252. package/dist/react/ui/kbd.js +22 -0
  253. package/dist/react/ui/kbd.js.map +1 -0
  254. package/dist/react/ui/label.d.ts +12 -0
  255. package/dist/react/ui/label.d.ts.map +1 -0
  256. package/dist/react/ui/label.js +18 -0
  257. package/dist/react/ui/label.js.map +1 -0
  258. package/dist/react/ui/menubar.d.ts +85 -0
  259. package/dist/react/ui/menubar.d.ts.map +1 -0
  260. package/dist/react/ui/menubar.js +134 -0
  261. package/dist/react/ui/menubar.js.map +1 -0
  262. package/dist/react/ui/navigation-menu.d.ts +47 -0
  263. package/dist/react/ui/navigation-menu.d.ts.map +1 -0
  264. package/dist/react/ui/navigation-menu.js +82 -0
  265. package/dist/react/ui/navigation-menu.js.map +1 -0
  266. package/dist/react/ui/pagination.d.ts +40 -0
  267. package/dist/react/ui/pagination.d.ts.map +1 -0
  268. package/dist/react/ui/pagination.js +80 -0
  269. package/dist/react/ui/pagination.js.map +1 -0
  270. package/dist/react/ui/popover.d.ts +23 -0
  271. package/dist/react/ui/popover.d.ts.map +1 -0
  272. package/dist/react/ui/popover.js +38 -0
  273. package/dist/react/ui/popover.js.map +1 -0
  274. package/dist/react/ui/progress.d.ts +13 -0
  275. package/dist/react/ui/progress.d.ts.map +1 -0
  276. package/dist/react/ui/progress.js +21 -0
  277. package/dist/react/ui/progress.js.map +1 -0
  278. package/dist/react/ui/radio-group.d.ts +16 -0
  279. package/dist/react/ui/radio-group.d.ts.map +1 -0
  280. package/dist/react/ui/radio-group.js +31 -0
  281. package/dist/react/ui/radio-group.js.map +1 -0
  282. package/dist/react/ui/resizable.d.ts +22 -0
  283. package/dist/react/ui/resizable.d.ts.map +1 -0
  284. package/dist/react/ui/resizable.js +34 -0
  285. package/dist/react/ui/resizable.js.map +1 -0
  286. package/dist/react/ui/scroll-area.d.ts +18 -0
  287. package/dist/react/ui/scroll-area.d.ts.map +1 -0
  288. package/dist/react/ui/scroll-area.js +39 -0
  289. package/dist/react/ui/scroll-area.js.map +1 -0
  290. package/dist/react/ui/select.d.ts +53 -0
  291. package/dist/react/ui/select.d.ts.map +1 -0
  292. package/dist/react/ui/select.js +98 -0
  293. package/dist/react/ui/select.js.map +1 -0
  294. package/dist/react/ui/separator.d.ts +14 -0
  295. package/dist/react/ui/separator.d.ts.map +1 -0
  296. package/dist/react/ui/separator.js +20 -0
  297. package/dist/react/ui/separator.js.map +1 -0
  298. package/dist/react/ui/sheet.d.ts +41 -0
  299. package/dist/react/ui/sheet.d.ts.map +1 -0
  300. package/dist/react/ui/sheet.js +83 -0
  301. package/dist/react/ui/sheet.js.map +1 -0
  302. package/dist/react/ui/sidebar.d.ts +167 -0
  303. package/dist/react/ui/sidebar.d.ts.map +1 -0
  304. package/dist/react/ui/sidebar.js +379 -0
  305. package/dist/react/ui/sidebar.js.map +1 -0
  306. package/dist/react/ui/skeleton.d.ts +10 -0
  307. package/dist/react/ui/skeleton.d.ts.map +1 -0
  308. package/dist/react/ui/skeleton.js +15 -0
  309. package/dist/react/ui/skeleton.js.map +1 -0
  310. package/dist/react/ui/slider.d.ts +16 -0
  311. package/dist/react/ui/slider.d.ts.map +1 -0
  312. package/dist/react/ui/slider.js +40 -0
  313. package/dist/react/ui/slider.js.map +1 -0
  314. package/dist/react/ui/sonner.d.ts +10 -0
  315. package/dist/react/ui/sonner.d.ts.map +1 -0
  316. package/dist/react/ui/sonner.js +31 -0
  317. package/dist/react/ui/sonner.js.map +1 -0
  318. package/dist/react/ui/spinner.d.ts +10 -0
  319. package/dist/react/ui/spinner.d.ts.map +1 -0
  320. package/dist/react/ui/spinner.js +17 -0
  321. package/dist/react/ui/spinner.js.map +1 -0
  322. package/dist/react/ui/switch.d.ts +12 -0
  323. package/dist/react/ui/switch.d.ts.map +1 -0
  324. package/dist/react/ui/switch.js +22 -0
  325. package/dist/react/ui/switch.js.map +1 -0
  326. package/dist/react/ui/table.d.ts +39 -0
  327. package/dist/react/ui/table.d.ts.map +1 -0
  328. package/dist/react/ui/table.js +68 -0
  329. package/dist/react/ui/table.js.map +1 -0
  330. package/dist/react/ui/tabs.d.ts +24 -0
  331. package/dist/react/ui/tabs.d.ts.map +1 -0
  332. package/dist/react/ui/tabs.js +39 -0
  333. package/dist/react/ui/tabs.js.map +1 -0
  334. package/dist/react/ui/textarea.d.ts +11 -0
  335. package/dist/react/ui/textarea.d.ts.map +1 -0
  336. package/dist/react/ui/textarea.js +15 -0
  337. package/dist/react/ui/textarea.js.map +1 -0
  338. package/dist/react/ui/toggle-group.d.ts +27 -0
  339. package/dist/react/ui/toggle-group.d.ts.map +1 -0
  340. package/dist/react/ui/toggle-group.js +50 -0
  341. package/dist/react/ui/toggle-group.js.map +1 -0
  342. package/dist/react/ui/toggle.d.ts +20 -0
  343. package/dist/react/ui/toggle.d.ts.map +1 -0
  344. package/dist/react/ui/toggle.js +38 -0
  345. package/dist/react/ui/toggle.js.map +1 -0
  346. package/dist/react/ui/tooltip.d.ts +24 -0
  347. package/dist/react/ui/tooltip.d.ts.map +1 -0
  348. package/dist/react/ui/tooltip.js +39 -0
  349. package/dist/react/ui/tooltip.js.map +1 -0
  350. package/dist/shared/src/sql/helpers.d.ts +160 -0
  351. package/dist/shared/src/sql/helpers.d.ts.map +1 -0
  352. package/dist/shared/src/sql/helpers.js +103 -0
  353. package/dist/shared/src/sql/helpers.js.map +1 -0
  354. package/dist/shared/src/sql/types.d.ts +34 -0
  355. package/dist/shared/src/sql/types.d.ts.map +1 -0
  356. package/dist/styles.css +425 -0
  357. package/llms.txt +193 -0
  358. package/package.json +98 -0
  359. package/scripts/postinstall.js +6 -0
@@ -0,0 +1,425 @@
1
+ @import "tailwindcss";
2
+ @import "tw-animate-css";
3
+ @source "./react";
4
+
5
+ :root {
6
+ --radius: 0.625rem;
7
+ --background: oklch(1 0 0);
8
+ --foreground: oklch(0.141 0.005 285.823);
9
+ --card: oklch(1 0 0);
10
+ --card-foreground: oklch(0.141 0.005 285.823);
11
+ --popover: oklch(1 0 0);
12
+ --popover-foreground: oklch(0.141 0.005 285.823);
13
+ --primary: oklch(0.21 0.006 285.885);
14
+ --primary-foreground: oklch(0.985 0 0);
15
+ --secondary: oklch(0.967 0.001 286.375);
16
+ --secondary-foreground: oklch(0.21 0.006 285.885);
17
+ --muted: oklch(0.967 0.001 286.375);
18
+ --muted-foreground: oklch(0.552 0.016 285.938);
19
+ --accent: oklch(0.967 0.001 286.375);
20
+ --accent-foreground: oklch(0.21 0.006 285.885);
21
+ --destructive: oklch(0.577 0.245 27.325);
22
+ --destructive-foreground: oklch(0.985 0 0);
23
+ --success: oklch(0.603 0.135 166.892);
24
+ --success-foreground: oklch(1 0 0);
25
+ --warning: oklch(0.795 0.157 78.748);
26
+ --warning-foreground: oklch(0.199 0.027 238.732);
27
+ --border: oklch(0.92 0.004 286.32);
28
+ --input: oklch(0.92 0.004 286.32);
29
+ --ring: oklch(0.705 0.015 286.067);
30
+ /* ========================================
31
+ CATEGORICAL - Distinct unordered categories
32
+ Use for: bar charts, pie charts, legends
33
+ ======================================== */
34
+ --chart-cat-1: hsla(221, 83%, 53%, 1); /* Blue */
35
+ --chart-cat-2: hsla(160, 60%, 45%, 1); /* Teal */
36
+ --chart-cat-3: hsla(291, 47%, 51%, 1); /* Purple */
37
+ --chart-cat-4: hsla(35, 92%, 55%, 1); /* Amber */
38
+ --chart-cat-5: hsla(349, 72%, 52%, 1); /* Rose */
39
+ --chart-cat-6: hsla(189, 75%, 42%, 1); /* Cyan */
40
+ --chart-cat-7: hsla(271, 55%, 60%, 1); /* Lavender */
41
+ --chart-cat-8: hsla(142, 55%, 45%, 1); /* Emerald */
42
+
43
+ /* ========================================
44
+ SEQUENTIAL - Ordered magnitude (low → high)
45
+ Use for: heatmaps, density, choropleth
46
+ ======================================== */
47
+ --chart-seq-1: hsla(221, 70%, 94%, 1); /* Lightest */
48
+ --chart-seq-2: hsla(221, 72%, 85%, 1);
49
+ --chart-seq-3: hsla(221, 74%, 74%, 1);
50
+ --chart-seq-4: hsla(221, 76%, 63%, 1);
51
+ --chart-seq-5: hsla(221, 78%, 52%, 1);
52
+ --chart-seq-6: hsla(221, 80%, 42%, 1);
53
+ --chart-seq-7: hsla(221, 82%, 32%, 1);
54
+ --chart-seq-8: hsla(221, 84%, 24%, 1); /* Darkest */
55
+
56
+ /* ========================================
57
+ DIVERGING - Meaningful center point
58
+ Use for: profit/loss, correlation, deviation
59
+ 1-4: negative (blue), 5-8: positive (red)
60
+ ======================================== */
61
+ --chart-div-1: hsla(221, 80%, 35%, 1); /* Strong negative */
62
+ --chart-div-2: hsla(221, 70%, 50%, 1);
63
+ --chart-div-3: hsla(221, 55%, 65%, 1);
64
+ --chart-div-4: hsla(221, 35%, 82%, 1); /* Weak negative */
65
+ --chart-div-5: hsla(10, 35%, 82%, 1); /* Weak positive */
66
+ --chart-div-6: hsla(10, 60%, 65%, 1);
67
+ --chart-div-7: hsla(10, 72%, 50%, 1);
68
+ --chart-div-8: hsla(10, 80%, 40%, 1); /* Strong positive */
69
+
70
+ /* Legacy aliases (for backwards compatibility) */
71
+ --chart-1: var(--chart-cat-1);
72
+ --chart-2: var(--chart-cat-2);
73
+ --chart-3: var(--chart-cat-3);
74
+ --chart-4: var(--chart-cat-4);
75
+ --chart-5: var(--chart-cat-5);
76
+ --chart-6: var(--chart-cat-6);
77
+ --chart-7: var(--chart-cat-7);
78
+ --chart-8: var(--chart-cat-8);
79
+ --sidebar: oklch(0.985 0 0);
80
+ --sidebar-foreground: oklch(0.141 0.005 285.823);
81
+ --sidebar-primary: oklch(0.21 0.006 285.885);
82
+ --sidebar-primary-foreground: oklch(0.985 0 0);
83
+ --sidebar-accent: oklch(0.967 0.001 286.375);
84
+ --sidebar-accent-foreground: oklch(0.21 0.006 285.885);
85
+ --sidebar-border: oklch(0.92 0.004 286.32);
86
+ --sidebar-ring: oklch(0.705 0.015 286.067);
87
+ }
88
+
89
+ /* Dark theme via class (takes precedence over media query) */
90
+ .dark {
91
+ --background: oklch(0.141 0.005 285.823);
92
+ --foreground: oklch(0.985 0 0);
93
+ --card: oklch(0.21 0.006 285.885);
94
+ --card-foreground: oklch(0.985 0 0);
95
+ --popover: oklch(0.21 0.006 285.885);
96
+ --popover-foreground: oklch(0.985 0 0);
97
+ --primary: oklch(0.92 0.004 286.32);
98
+ --primary-foreground: oklch(0.21 0.006 285.885);
99
+ --secondary: oklch(0.274 0.006 286.033);
100
+ --secondary-foreground: oklch(0.985 0 0);
101
+ --muted: oklch(0.274 0.006 286.033);
102
+ --muted-foreground: oklch(0.705 0.015 286.067);
103
+ --accent: oklch(0.274 0.006 286.033);
104
+ --accent-foreground: oklch(0.985 0 0);
105
+ --destructive: oklch(0.704 0.191 22.216);
106
+ --destructive-foreground: oklch(0.985 0 0);
107
+ --success: oklch(0.67 0.12 167);
108
+ --success-foreground: oklch(1 0 0);
109
+ --warning: oklch(0.83 0.165 85);
110
+ --warning-foreground: oklch(0.199 0.027 238.732);
111
+ --border: oklch(1 0 0 / 10%);
112
+ --input: oklch(1 0 0 / 15%);
113
+ --ring: oklch(0.552 0.016 285.938);
114
+ --chart-1: oklch(0.488 0.243 264.376);
115
+ --chart-2: oklch(0.696 0.17 162.48);
116
+ --chart-3: oklch(0.769 0.188 70.08);
117
+ --chart-4: oklch(0.627 0.265 303.9);
118
+ --chart-5: oklch(0.645 0.246 16.439);
119
+ --sidebar: oklch(0.21 0.006 285.885);
120
+ --sidebar-foreground: oklch(0.985 0 0);
121
+ --sidebar-primary: oklch(0.488 0.243 264.376);
122
+ --sidebar-primary-foreground: oklch(0.985 0 0);
123
+ --sidebar-accent: oklch(0.274 0.006 286.033);
124
+ --sidebar-accent-foreground: oklch(0.985 0 0);
125
+ --sidebar-border: oklch(1 0 0 / 10%);
126
+ --sidebar-ring: oklch(0.552 0.016 285.938);
127
+ }
128
+
129
+ /* Dark theme via media query (fallback when no class is set) */
130
+ @media (prefers-color-scheme: dark) {
131
+ :root:not(.light) {
132
+ --background: oklch(0.141 0.005 285.823);
133
+ --foreground: oklch(0.985 0 0);
134
+ --card: oklch(0.21 0.006 285.885);
135
+ --card-foreground: oklch(0.985 0 0);
136
+ --popover: oklch(0.21 0.006 285.885);
137
+ --popover-foreground: oklch(0.985 0 0);
138
+ --primary: oklch(0.92 0.004 286.32);
139
+ --primary-foreground: oklch(0.21 0.006 285.885);
140
+ --secondary: oklch(0.274 0.006 286.033);
141
+ --secondary-foreground: oklch(0.985 0 0);
142
+ --muted: oklch(0.274 0.006 286.033);
143
+ --muted-foreground: oklch(0.705 0.015 286.067);
144
+ --accent: oklch(0.274 0.006 286.033);
145
+ --accent-foreground: oklch(0.985 0 0);
146
+ --destructive: oklch(0.704 0.191 22.216);
147
+ --destructive-foreground: oklch(0.985 0 0);
148
+ --success: oklch(0.67 0.12 167);
149
+ --success-foreground: oklch(1 0 0);
150
+ --warning: oklch(0.83 0.165 85);
151
+ --warning-foreground: oklch(0.199 0.027 238.732);
152
+ --border: oklch(1 0 0 / 10%);
153
+ --input: oklch(1 0 0 / 15%);
154
+ --ring: oklch(0.552 0.016 285.938);
155
+ /* ========================================
156
+ CATEGORICAL - Distinct unordered categories
157
+ ======================================== */
158
+ --chart-cat-1: hsla(217, 91%, 65%, 1); /* Blue */
159
+ --chart-cat-2: hsla(160, 65%, 55%, 1); /* Teal */
160
+ --chart-cat-3: hsla(291, 60%, 65%, 1); /* Purple */
161
+ --chart-cat-4: hsla(38, 95%, 60%, 1); /* Amber */
162
+ --chart-cat-5: hsla(349, 80%, 62%, 1); /* Rose */
163
+ --chart-cat-6: hsla(189, 85%, 52%, 1); /* Cyan */
164
+ --chart-cat-7: hsla(271, 65%, 70%, 1); /* Lavender */
165
+ --chart-cat-8: hsla(142, 60%, 55%, 1); /* Emerald */
166
+
167
+ /* ========================================
168
+ SEQUENTIAL - Ordered magnitude (low → high)
169
+ ======================================== */
170
+ --chart-seq-1: hsla(
171
+ 217,
172
+ 50%,
173
+ 25%,
174
+ 1
175
+ ); /* Darkest (inverted for dark mode) */
176
+ --chart-seq-2: hsla(217, 55%, 35%, 1);
177
+ --chart-seq-3: hsla(217, 60%, 45%, 1);
178
+ --chart-seq-4: hsla(217, 65%, 55%, 1);
179
+ --chart-seq-5: hsla(217, 70%, 62%, 1);
180
+ --chart-seq-6: hsla(217, 75%, 70%, 1);
181
+ --chart-seq-7: hsla(217, 80%, 78%, 1);
182
+ --chart-seq-8: hsla(217, 85%, 88%, 1); /* Lightest */
183
+
184
+ /* ========================================
185
+ DIVERGING - Meaningful center point
186
+ ======================================== */
187
+ --chart-div-1: hsla(217, 85%, 70%, 1); /* Strong negative (blue) */
188
+ --chart-div-2: hsla(217, 70%, 60%, 1);
189
+ --chart-div-3: hsla(217, 50%, 50%, 1);
190
+ --chart-div-4: hsla(217, 25%, 40%, 1); /* Weak negative */
191
+ --chart-div-5: hsla(10, 25%, 40%, 1); /* Weak positive */
192
+ --chart-div-6: hsla(10, 55%, 50%, 1);
193
+ --chart-div-7: hsla(10, 70%, 58%, 1);
194
+ --chart-div-8: hsla(10, 80%, 65%, 1); /* Strong positive (red) */
195
+
196
+ /* Legacy aliases */
197
+ --chart-1: var(--chart-cat-1);
198
+ --chart-2: var(--chart-cat-2);
199
+ --chart-3: var(--chart-cat-3);
200
+ --chart-4: var(--chart-cat-4);
201
+ --chart-5: var(--chart-cat-5);
202
+ --chart-6: var(--chart-cat-6);
203
+ --chart-7: var(--chart-cat-7);
204
+ --chart-8: var(--chart-cat-8);
205
+ --sidebar: oklch(0.21 0.006 285.885);
206
+ --sidebar-foreground: oklch(0.985 0 0);
207
+ --sidebar-primary: oklch(0.488 0.243 264.376);
208
+ --sidebar-primary-foreground: oklch(0.985 0 0);
209
+ --sidebar-accent: oklch(0.274 0.006 286.033);
210
+ --sidebar-accent-foreground: oklch(0.985 0 0);
211
+ --sidebar-border: oklch(1 0 0 / 10%);
212
+ --sidebar-ring: oklch(0.552 0.016 285.938);
213
+ }
214
+ }
215
+
216
+ @theme inline {
217
+ --color-background: var(--background);
218
+ --color-foreground: var(--foreground);
219
+ --color-card: var(--card);
220
+ --color-card-foreground: var(--card-foreground);
221
+ --color-popover: var(--popover);
222
+ --color-popover-foreground: var(--popover-foreground);
223
+ --color-primary: var(--primary);
224
+ --color-primary-foreground: var(--primary-foreground);
225
+ --color-secondary: var(--secondary);
226
+ --color-secondary-foreground: var(--secondary-foreground);
227
+ --color-muted: var(--muted);
228
+ --color-muted-foreground: var(--muted-foreground);
229
+ --color-accent: var(--accent);
230
+ --color-accent-foreground: var(--accent-foreground);
231
+ --color-destructive: var(--destructive);
232
+ --color-destructive-foreground: var(--destructive-foreground);
233
+ --color-success: var(--success);
234
+ --color-success-foreground: var(--success-foreground);
235
+ --color-warning: var(--warning);
236
+ --color-warning-foreground: var(--warning-foreground);
237
+ --color-border: var(--border);
238
+ --color-input: var(--input);
239
+ --color-ring: var(--ring);
240
+ /* Legacy chart colors (aliased to categorical) */
241
+ --color-chart-1: var(--chart-1);
242
+ --color-chart-2: var(--chart-2);
243
+ --color-chart-3: var(--chart-3);
244
+ --color-chart-4: var(--chart-4);
245
+ --color-chart-5: var(--chart-5);
246
+ --color-chart-6: var(--chart-6);
247
+ --color-chart-7: var(--chart-7);
248
+ --color-chart-8: var(--chart-8);
249
+
250
+ /* Categorical colors */
251
+ --color-chart-cat-1: var(--chart-cat-1);
252
+ --color-chart-cat-2: var(--chart-cat-2);
253
+ --color-chart-cat-3: var(--chart-cat-3);
254
+ --color-chart-cat-4: var(--chart-cat-4);
255
+ --color-chart-cat-5: var(--chart-cat-5);
256
+ --color-chart-cat-6: var(--chart-cat-6);
257
+ --color-chart-cat-7: var(--chart-cat-7);
258
+ --color-chart-cat-8: var(--chart-cat-8);
259
+
260
+ /* Sequential colors */
261
+ --color-chart-seq-1: var(--chart-seq-1);
262
+ --color-chart-seq-2: var(--chart-seq-2);
263
+ --color-chart-seq-3: var(--chart-seq-3);
264
+ --color-chart-seq-4: var(--chart-seq-4);
265
+ --color-chart-seq-5: var(--chart-seq-5);
266
+ --color-chart-seq-6: var(--chart-seq-6);
267
+ --color-chart-seq-7: var(--chart-seq-7);
268
+ --color-chart-seq-8: var(--chart-seq-8);
269
+
270
+ /* Diverging colors */
271
+ --color-chart-div-1: var(--chart-div-1);
272
+ --color-chart-div-2: var(--chart-div-2);
273
+ --color-chart-div-3: var(--chart-div-3);
274
+ --color-chart-div-4: var(--chart-div-4);
275
+ --color-chart-div-5: var(--chart-div-5);
276
+ --color-chart-div-6: var(--chart-div-6);
277
+ --color-chart-div-7: var(--chart-div-7);
278
+ --color-chart-div-8: var(--chart-div-8);
279
+ --color-sidebar: var(--sidebar);
280
+ --color-sidebar-foreground: var(--sidebar-foreground);
281
+ --color-sidebar-primary: var(--sidebar-primary);
282
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
283
+ --color-sidebar-accent: var(--sidebar-accent);
284
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
285
+ --color-sidebar-border: var(--sidebar-border);
286
+ --color-sidebar-ring: var(--sidebar-ring);
287
+ --radius: var(--radius);
288
+ }
289
+
290
+ @layer base {
291
+ * {
292
+ border-color: var(--border);
293
+ }
294
+
295
+ html {
296
+ -webkit-font-smoothing: antialiased;
297
+ -moz-osx-font-smoothing: grayscale;
298
+ text-rendering: optimizeLegibility;
299
+ }
300
+
301
+ body {
302
+ background-color: var(--background);
303
+ color: var(--foreground);
304
+ font-feature-settings:
305
+ "rlig" 1,
306
+ "calt" 1;
307
+ transition:
308
+ background-color 0.2s ease,
309
+ color 0.2s ease;
310
+ }
311
+
312
+ h1,
313
+ h2,
314
+ h3,
315
+ h4,
316
+ h5,
317
+ h6 {
318
+ font-weight: 600;
319
+ letter-spacing: -0.025em;
320
+ }
321
+
322
+ h1 {
323
+ font-size: 2.25rem;
324
+ line-height: 1.2;
325
+ }
326
+ h2 {
327
+ font-size: 1.875rem;
328
+ line-height: 1.3;
329
+ }
330
+ h3 {
331
+ font-size: 1.5rem;
332
+ line-height: 1.4;
333
+ }
334
+ h4 {
335
+ font-size: 1.25rem;
336
+ }
337
+ h5 {
338
+ font-size: 1.125rem;
339
+ }
340
+ p {
341
+ line-height: 1.75rem;
342
+ }
343
+
344
+ :focus-visible {
345
+ outline: none;
346
+ box-shadow:
347
+ 0 0 0 2px var(--background),
348
+ 0 0 0 4px var(--ring);
349
+ }
350
+
351
+ img {
352
+ max-width: 100%;
353
+ height: auto;
354
+ }
355
+
356
+ ::-webkit-scrollbar {
357
+ width: 10px;
358
+ height: 10px;
359
+ }
360
+
361
+ ::-webkit-scrollbar-track {
362
+ background-color: var(--secondary);
363
+ }
364
+
365
+ ::-webkit-scrollbar-thumb {
366
+ background-color: var(--muted-foreground);
367
+ opacity: 0.5;
368
+ border-radius: 0.375rem;
369
+ }
370
+
371
+ ::-webkit-scrollbar-thumb:hover {
372
+ opacity: 0.7;
373
+ }
374
+
375
+ ::selection {
376
+ background-color: var(--primary);
377
+ opacity: 0.2;
378
+ }
379
+
380
+ @media (prefers-reduced-motion: reduce) {
381
+ *,
382
+ *::before,
383
+ *::after {
384
+ /* biome-ignore lint/complexity/noImportantStyles: !important is intentional for accessibility - forces reduced motion regardless of specificity */
385
+ animation-duration: 0.01ms !important;
386
+ /* biome-ignore lint/complexity/noImportantStyles: !important is intentional for accessibility - forces reduced motion regardless of specificity */
387
+ animation-iteration-count: 1 !important;
388
+ /* biome-ignore lint/complexity/noImportantStyles: !important is intentional for accessibility - forces reduced motion regardless of specificity */
389
+ transition-duration: 0.01ms !important;
390
+ }
391
+ }
392
+
393
+ /* Optional: set all rounded utility to use CSS var */
394
+ .rounded {
395
+ border-radius: var(--radius);
396
+ }
397
+ }
398
+
399
+ /* -----------------------------
400
+ Tailwind custom utilities
401
+ ----------------------------- */
402
+ @layer utilities {
403
+ .sr-only {
404
+ position: absolute;
405
+ width: 1px;
406
+ height: 1px;
407
+ padding: 0;
408
+ margin: -1px;
409
+ overflow: hidden;
410
+ clip: rect(0, 0, 0, 0);
411
+ white-space: nowrap;
412
+ border-width: 0;
413
+ }
414
+
415
+ .focus\:not-sr-only:focus {
416
+ position: static;
417
+ width: auto;
418
+ height: auto;
419
+ padding: initial;
420
+ margin: initial;
421
+ overflow: visible;
422
+ clip: auto;
423
+ white-space: normal;
424
+ }
425
+ }
package/llms.txt ADDED
@@ -0,0 +1,193 @@
1
+ # llms.txt — Guidance for AI systems using the Databricks AppKit (@databricks/appkit)
2
+
3
+ Project: Databricks AppKit
4
+ Author: Databricks
5
+ Version: 1.0.0
6
+
7
+ # =====================
8
+ # General Description
9
+ # =====================
10
+ AppKit is a modular TypeScript SDK for building apps with workflows and plugins.
11
+ It provides a single entrypoint (createApp) where you configure and register plugins.
12
+ Each plugin is then available under AppKit[pluginName].
13
+
14
+ Main concepts:
15
+ - createApp(config): initializes the SDK with plugins
16
+ - Plugins: extend AppKit with functionality (server, analytics, ai, etc.)
17
+ - AppKit[pluginName]: exposes plugin API after initialization
18
+ - New plugins can be created by extending the Plugin class.
19
+
20
+ # =====================
21
+ # Primary Usage Pattern
22
+ # =====================
23
+ Always use async/await.
24
+ Always initialize AppKit before using plugins.
25
+ Server and plugins already initialized, no custom endpoints.
26
+
27
+ Example:
28
+
29
+ ```ts
30
+ import { createApp, server, analytics } from "@databricks/appkit";
31
+
32
+ await createApp({
33
+ plugins: [
34
+ server({ port: 8000 }),
35
+ analytics(),
36
+ ],
37
+ });
38
+ ```
39
+
40
+ # ==============================================
41
+ # Basic Usage Pattern starting the server
42
+ # ==============================================
43
+
44
+ Example:
45
+
46
+ ```ts
47
+ import { createApp, server, analytics } from "@databricks/appkit";
48
+
49
+ const AppKit = await createApp({
50
+ plugins: [
51
+ server({ port: 8000, autoStart: false }),
52
+ analytics(),
53
+ ],
54
+ });
55
+
56
+ const app = await AppKit.server.start();
57
+ app.get("/ping", (req, res) => res.send("pong"));
58
+ ```
59
+
60
+ # =====================
61
+ # Plugin APIs
62
+ # =====================
63
+
64
+ Each plugin exposes a set of endpoints by default.
65
+
66
+ ## Server Plugin
67
+ - AppKit.server.start(): Promise<Express.Application>
68
+ - Purpose: Start an Express server with configured port, only use if { autoStart: false } is provided in the config of the server plugin
69
+ - Usage: Add routes via the returned app
70
+ - Config - When setting the plugin, the following options can be provided:
71
+ server({
72
+ port?: number;
73
+ staticPath?: string; // This provides the path where the frontend assets are.
74
+ autoStart?: boolean;
75
+ })
76
+
77
+ ## Analytics Plugin
78
+ - AppKit.analytics.query.executeQuery({ query, parameters }: { query: string; parameters?: Record<string, any> }, options?: ExecuteOptions): Promise<ExecuteStatementOutput>;
79
+ - Purpose: Provide SQL by key interface.
80
+ - Usage: Only for structured query + insert examples. SQL never goes into the call to the function. Any SQL that needs to be written,
81
+ will be written into config/queries/<query_key>.sql. All queries should be parameterized (use placeholders).
82
+ - Default endpoints:
83
+ - POST /api/analytics/:query_key -> `query_key` will be the key to the file that contains the query. Expects a body with the shape { parameters?: Record<string, any>; }. parameters will be bound into the query.
84
+
85
+ # =====================
86
+ # Custom Plugins
87
+ # =====================
88
+
89
+ Databricks AppKit Might not cover all the cases needed, so for those cases a plugin can be created.
90
+ Here is an example:
91
+
92
+ ```ts
93
+ import { Plugin, toPlugin } from '@databricks/appkit';
94
+
95
+ class OpenWeatherPlugin extends Plugin {
96
+ name: string = "open-weather";
97
+ private apiKey: string;
98
+ private url: string;
99
+
100
+ constructor(config: any, auth: IAuthManager, telemetry: ITelemetryManager) {
101
+ super(config, auth, telemetry);
102
+
103
+ this.apiKey = process.env.OPEN_WEATHER_API_KEY!;
104
+ this.url = process.env.OPEN_WEATHER_URL || "https://api.openweathermap.org/data/3.0/onecall";
105
+
106
+ // ...
107
+ }
108
+
109
+ async getWeather(lat: number, lon: number): Promise<any | null> {
110
+ const url = `${this.url}?lat=${lat}&lon=${lon}&appid=${this.apiKey}`;
111
+
112
+ try {
113
+ const response = await fetch(url);
114
+ if (!response.ok) {
115
+ console.error("Error fetching weather data:", response.statusText);
116
+ return null;
117
+ }
118
+
119
+ const data = await response.json();
120
+ return data;
121
+ } catch (error) {
122
+ console.error("Fetch error:", error);
123
+ return null;
124
+ }
125
+ }
126
+
127
+ /**
128
+ * Optionally the plugin can inject its own routes to the router
129
+ */
130
+ injectRoutes(router: express.Router) {
131
+ /**
132
+ * Each route is scoped to the plugin name. So in this case the route will be end up being
133
+ * /api/open-weather/weather
134
+ *
135
+ * and an example request would be:
136
+ * GET /api/open-weather/weather?lat=40.7128&lon=-74.0060
137
+ */
138
+ router.get("/weather", async (req: any, res: any) => {
139
+ const { lat, lon } = req.query;
140
+ const data = await this.getWeather(lat, lon);
141
+ res.send(data);
142
+ });
143
+ }
144
+ }
145
+
146
+ export const openWeather = toPlugin<typeof OpenWeatherPlugin, OpenWeatherConfig, "openWeather">(OpenWeatherPlugin, "openWeather");
147
+ ```
148
+
149
+ Then it would be used as the rest of the plugins
150
+
151
+ ```ts
152
+ import { createApp, server, analytics } from "@databricks/appkit";
153
+ import { openWeather } from './open-weather';
154
+
155
+ const AppKit = await createApp({
156
+ plugins: [
157
+ server({ port: 8000 }),
158
+ analytics(),
159
+ openWeather(),
160
+ ],
161
+ });
162
+
163
+ const app = await AppKit.server.start();
164
+ /**
165
+ * A route could also be added here
166
+ */
167
+ app.get("/api/open-weather/weather", async (req, res) => {
168
+ const data = await AppKit.openWeather.getWeather(40.7128, -74.0060);
169
+ res.send(data);
170
+ });
171
+ ```
172
+
173
+
174
+ # =====================
175
+ # Style Guidelines for AI
176
+ # =====================
177
+ - Always prefer async/await (never .then chaining in examples).
178
+ - Always show explicit plugin config (no hidden defaults).
179
+ - Use ESModules (import/export), not require().
180
+ - Use TypeScript typings in advanced examples if helpful.
181
+
182
+ # =====================
183
+ # Anti-Patterns (avoid in examples)
184
+ # =====================
185
+ - ❌ Do not access AppKit internals (only use AppKit[pluginName]).
186
+ - ❌ Do not assume SQL queries hit a real DB (they return demo data unless configured).
187
+ - ❌ Do not show usage without createApp first.
188
+
189
+ # =====================
190
+ # Attribution
191
+ # =====================
192
+ If AI-generated code uses this SDK, attribute:
193
+ "Powered by Databricks AppKit (https://github.com/...)".