@flanksource/clicky-ui 0.1.0 → 0.2.1

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 (378) hide show
  1. package/README.md +29 -2
  2. package/dist/api-explorer.d.ts +5 -0
  3. package/dist/api-explorer.d.ts.map +1 -0
  4. package/dist/api-explorer.js +25 -0
  5. package/dist/api-explorer.js.map +1 -0
  6. package/dist/clicky.d.ts +2 -0
  7. package/dist/clicky.d.ts.map +1 -0
  8. package/dist/clicky.js +5 -0
  9. package/dist/clicky.js.map +1 -0
  10. package/dist/components/DatePicker.d.ts +18 -0
  11. package/dist/components/DatePicker.d.ts.map +1 -0
  12. package/dist/components/DatePicker.js +63 -0
  13. package/dist/components/DatePicker.js.map +1 -0
  14. package/dist/components/DateTimePicker.d.ts +18 -0
  15. package/dist/components/DateTimePicker.d.ts.map +1 -0
  16. package/dist/components/DateTimePicker.js +84 -0
  17. package/dist/components/DateTimePicker.js.map +1 -0
  18. package/dist/components/FilterBar.d.ts +180 -0
  19. package/dist/components/FilterBar.d.ts.map +1 -0
  20. package/dist/components/FilterBar.js +1685 -0
  21. package/dist/components/FilterBar.js.map +1 -0
  22. package/dist/components/MultiSelect.d.ts +19 -0
  23. package/dist/components/MultiSelect.d.ts.map +1 -0
  24. package/dist/components/MultiSelect.js +143 -0
  25. package/dist/components/MultiSelect.js.map +1 -0
  26. package/dist/components/RangeSlider.d.ts +16 -0
  27. package/dist/components/RangeSlider.d.ts.map +1 -0
  28. package/dist/components/RangeSlider.js +92 -0
  29. package/dist/components/RangeSlider.js.map +1 -0
  30. package/dist/components/button.d.ts +21 -0
  31. package/dist/components/button.d.ts.map +1 -0
  32. package/dist/components/button.js +126 -0
  33. package/dist/components/button.js.map +1 -0
  34. package/dist/components/density-switcher.d.ts +7 -0
  35. package/dist/components/density-switcher.d.ts.map +1 -0
  36. package/dist/components/density-switcher.js +32 -0
  37. package/dist/components/density-switcher.js.map +1 -0
  38. package/dist/components/icon-menu-picker.d.ts +22 -0
  39. package/dist/components/icon-menu-picker.d.ts.map +1 -0
  40. package/dist/components/icon-menu-picker.js +181 -0
  41. package/dist/components/icon-menu-picker.js.map +1 -0
  42. package/dist/components/select.d.ts +15 -0
  43. package/dist/components/select.d.ts.map +1 -0
  44. package/dist/components/select.js +39 -0
  45. package/dist/components/select.js.map +1 -0
  46. package/dist/components/theme-switcher.d.ts +7 -0
  47. package/dist/components/theme-switcher.d.ts.map +1 -0
  48. package/dist/components/theme-switcher.js +42 -0
  49. package/dist/components/theme-switcher.js.map +1 -0
  50. package/dist/components.d.ts +14 -0
  51. package/dist/components.d.ts.map +1 -0
  52. package/dist/components.js +31 -0
  53. package/dist/components.js.map +1 -0
  54. package/dist/data/AnsiHtml.d.ts +7 -0
  55. package/dist/data/AnsiHtml.d.ts.map +1 -0
  56. package/dist/data/AnsiHtml.js +71 -0
  57. package/dist/data/AnsiHtml.js.map +1 -0
  58. package/dist/data/Avatar.d.ts +32 -0
  59. package/dist/data/Avatar.d.ts.map +1 -0
  60. package/dist/data/Avatar.js +201 -0
  61. package/dist/data/Avatar.js.map +1 -0
  62. package/dist/data/AvatarBadge.d.ts +26 -0
  63. package/dist/data/AvatarBadge.d.ts.map +1 -0
  64. package/dist/data/AvatarBadge.js +104 -0
  65. package/dist/data/AvatarBadge.js.map +1 -0
  66. package/dist/data/Badge.d.ts +44 -0
  67. package/dist/data/Badge.d.ts.map +1 -0
  68. package/dist/data/Badge.js +667 -0
  69. package/dist/data/Badge.js.map +1 -0
  70. package/dist/data/Clicky.d.ts +147 -0
  71. package/dist/data/Clicky.d.ts.map +1 -0
  72. package/dist/data/Clicky.fixtures.d.ts +3 -0
  73. package/dist/data/Clicky.fixtures.d.ts.map +1 -0
  74. package/dist/data/Clicky.js +1960 -0
  75. package/dist/data/Clicky.js.map +1 -0
  76. package/dist/data/DataTable.d.ts +95 -0
  77. package/dist/data/DataTable.d.ts.map +1 -0
  78. package/dist/data/DataTable.js +1464 -0
  79. package/dist/data/DataTable.js.map +1 -0
  80. package/dist/data/FilterPill.d.ts +29 -0
  81. package/dist/data/FilterPill.d.ts.map +1 -0
  82. package/dist/data/FilterPill.js +153 -0
  83. package/dist/data/FilterPill.js.map +1 -0
  84. package/dist/data/Gauge.d.ts +15 -0
  85. package/dist/data/Gauge.d.ts.map +1 -0
  86. package/dist/data/Gauge.js +63 -0
  87. package/dist/data/Gauge.js.map +1 -0
  88. package/dist/data/Icon.d.ts +53 -0
  89. package/dist/data/Icon.d.ts.map +1 -0
  90. package/dist/data/Icon.js +115 -0
  91. package/dist/data/Icon.js.map +1 -0
  92. package/dist/data/JsonView.d.ts +8 -0
  93. package/dist/data/JsonView.d.ts.map +1 -0
  94. package/dist/data/JsonView.js +74 -0
  95. package/dist/data/JsonView.js.map +1 -0
  96. package/dist/data/KeyValueList.d.ts +17 -0
  97. package/dist/data/KeyValueList.d.ts.map +1 -0
  98. package/dist/data/KeyValueList.js +33 -0
  99. package/dist/data/KeyValueList.js.map +1 -0
  100. package/dist/data/LogViewer.d.ts +10 -0
  101. package/dist/data/LogViewer.d.ts.map +1 -0
  102. package/dist/data/LogViewer.js +46 -0
  103. package/dist/data/LogViewer.js.map +1 -0
  104. package/dist/data/LogsTable.d.ts +27 -0
  105. package/dist/data/LogsTable.d.ts.map +1 -0
  106. package/dist/data/LogsTable.js +580 -0
  107. package/dist/data/LogsTable.js.map +1 -0
  108. package/dist/data/Markdown.d.ts +6 -0
  109. package/dist/data/Markdown.d.ts.map +1 -0
  110. package/dist/data/Markdown.js +59 -0
  111. package/dist/data/Markdown.js.map +1 -0
  112. package/dist/data/MatrixTable.d.ts +22 -0
  113. package/dist/data/MatrixTable.d.ts.map +1 -0
  114. package/dist/data/MatrixTable.js +164 -0
  115. package/dist/data/MatrixTable.js.map +1 -0
  116. package/dist/data/MethodBadge.d.ts +6 -0
  117. package/dist/data/MethodBadge.d.ts.map +1 -0
  118. package/dist/data/MethodBadge.js +18 -0
  119. package/dist/data/MethodBadge.js.map +1 -0
  120. package/dist/data/ProgressBar.d.ts +13 -0
  121. package/dist/data/ProgressBar.d.ts.map +1 -0
  122. package/dist/data/ProgressBar.js +34 -0
  123. package/dist/data/ProgressBar.js.map +1 -0
  124. package/dist/data/SortableHeader.d.ts +12 -0
  125. package/dist/data/SortableHeader.d.ts.map +1 -0
  126. package/dist/data/SortableHeader.js +33 -0
  127. package/dist/data/SortableHeader.js.map +1 -0
  128. package/dist/data/TabButton.d.ts +12 -0
  129. package/dist/data/TabButton.d.ts.map +1 -0
  130. package/dist/data/TabButton.js +45 -0
  131. package/dist/data/TabButton.js.map +1 -0
  132. package/dist/data/Tree.d.ts +35 -0
  133. package/dist/data/Tree.d.ts.map +1 -0
  134. package/dist/data/Tree.js +236 -0
  135. package/dist/data/Tree.js.map +1 -0
  136. package/dist/data/TreeGroupHeader.d.ts +11 -0
  137. package/dist/data/TreeGroupHeader.d.ts.map +1 -0
  138. package/dist/data/TreeGroupHeader.js +41 -0
  139. package/dist/data/TreeGroupHeader.js.map +1 -0
  140. package/dist/data/TreeNode.d.ts +43 -0
  141. package/dist/data/TreeNode.d.ts.map +1 -0
  142. package/dist/data/TreeNode.js +100 -0
  143. package/dist/data/TreeNode.js.map +1 -0
  144. package/dist/data/cells/StatusDot.d.ts +11 -0
  145. package/dist/data/cells/StatusDot.d.ts.map +1 -0
  146. package/dist/data/cells/StatusDot.js +38 -0
  147. package/dist/data/cells/StatusDot.js.map +1 -0
  148. package/dist/data/cells/TagList.d.ts +59 -0
  149. package/dist/data/cells/TagList.d.ts.map +1 -0
  150. package/dist/data/cells/TagList.js +257 -0
  151. package/dist/data/cells/TagList.js.map +1 -0
  152. package/dist/data/cells/Timestamp.d.ts +46 -0
  153. package/dist/data/cells/Timestamp.d.ts.map +1 -0
  154. package/dist/data/cells/Timestamp.js +146 -0
  155. package/dist/data/cells/Timestamp.js.map +1 -0
  156. package/dist/data/cells/status-mapping.d.ts +8 -0
  157. package/dist/data/cells/status-mapping.d.ts.map +1 -0
  158. package/dist/data/cells/status-mapping.js +44 -0
  159. package/dist/data/cells/status-mapping.js.map +1 -0
  160. package/dist/data/code-highlight.d.ts +12 -0
  161. package/dist/data/code-highlight.d.ts.map +1 -0
  162. package/dist/data/code-highlight.js +28 -0
  163. package/dist/data/code-highlight.js.map +1 -0
  164. package/dist/data/diagnostics/DiagnosticsDetailPanel.d.ts +9 -0
  165. package/dist/data/diagnostics/DiagnosticsDetailPanel.d.ts.map +1 -0
  166. package/dist/data/diagnostics/DiagnosticsDetailPanel.js +445 -0
  167. package/dist/data/diagnostics/DiagnosticsDetailPanel.js.map +1 -0
  168. package/dist/data/diagnostics/DiagnosticsTree.d.ts +9 -0
  169. package/dist/data/diagnostics/DiagnosticsTree.d.ts.map +1 -0
  170. package/dist/data/diagnostics/DiagnosticsTree.js +78 -0
  171. package/dist/data/diagnostics/DiagnosticsTree.js.map +1 -0
  172. package/dist/data/diagnostics/ErrorDetails.d.ts +20 -0
  173. package/dist/data/diagnostics/ErrorDetails.d.ts.map +1 -0
  174. package/dist/data/diagnostics/ErrorDetails.js +157 -0
  175. package/dist/data/diagnostics/ErrorDetails.js.map +1 -0
  176. package/dist/data/diagnostics/GoroutineCard.d.ts +10 -0
  177. package/dist/data/diagnostics/GoroutineCard.d.ts.map +1 -0
  178. package/dist/data/diagnostics/GoroutineCard.js +75 -0
  179. package/dist/data/diagnostics/GoroutineCard.js.map +1 -0
  180. package/dist/data/diagnostics/JvmStackTrace.d.ts +11 -0
  181. package/dist/data/diagnostics/JvmStackTrace.d.ts.map +1 -0
  182. package/dist/data/diagnostics/JvmStackTrace.js +26 -0
  183. package/dist/data/diagnostics/JvmStackTrace.js.map +1 -0
  184. package/dist/data/diagnostics/RenderedStackTrace.d.ts +18 -0
  185. package/dist/data/diagnostics/RenderedStackTrace.d.ts.map +1 -0
  186. package/dist/data/diagnostics/RenderedStackTrace.js +235 -0
  187. package/dist/data/diagnostics/RenderedStackTrace.js.map +1 -0
  188. package/dist/data/diagnostics/ThreadCard.d.ts +10 -0
  189. package/dist/data/diagnostics/ThreadCard.d.ts.map +1 -0
  190. package/dist/data/diagnostics/ThreadCard.js +78 -0
  191. package/dist/data/diagnostics/ThreadCard.js.map +1 -0
  192. package/dist/data/diagnostics/error-diagnostics.d.ts +26 -0
  193. package/dist/data/diagnostics/error-diagnostics.d.ts.map +1 -0
  194. package/dist/data/diagnostics/error-diagnostics.js +108 -0
  195. package/dist/data/diagnostics/error-diagnostics.js.map +1 -0
  196. package/dist/data/diagnostics/fixtures.d.ts +3 -0
  197. package/dist/data/diagnostics/fixtures.d.ts.map +1 -0
  198. package/dist/data/diagnostics/jvm-stacktrace.d.ts +34 -0
  199. package/dist/data/diagnostics/jvm-stacktrace.d.ts.map +1 -0
  200. package/dist/data/diagnostics/jvm-stacktrace.js +190 -0
  201. package/dist/data/diagnostics/jvm-stacktrace.js.map +1 -0
  202. package/dist/data/diagnostics/stacktrace-parse.d.ts +11 -0
  203. package/dist/data/diagnostics/stacktrace-parse.d.ts.map +1 -0
  204. package/dist/data/diagnostics/stacktrace-parse.js +87 -0
  205. package/dist/data/diagnostics/stacktrace-parse.js.map +1 -0
  206. package/dist/data/diagnostics/stacktrace.d.ts +38 -0
  207. package/dist/data/diagnostics/stacktrace.d.ts.map +1 -0
  208. package/dist/data/diagnostics/stacktrace.js +119 -0
  209. package/dist/data/diagnostics/stacktrace.js.map +1 -0
  210. package/dist/data/diagnostics/types.d.ts +30 -0
  211. package/dist/data/diagnostics/types.d.ts.map +1 -0
  212. package/dist/data/diagnostics/utils.d.ts +8 -0
  213. package/dist/data/diagnostics/utils.d.ts.map +1 -0
  214. package/dist/data/diagnostics/utils.js +59 -0
  215. package/dist/data/diagnostics/utils.js.map +1 -0
  216. package/dist/data/har/HarPanel.d.ts +9 -0
  217. package/dist/data/har/HarPanel.d.ts.map +1 -0
  218. package/dist/data/har/HarPanel.js +175 -0
  219. package/dist/data/har/HarPanel.js.map +1 -0
  220. package/dist/data/har/fixtures.d.ts +3 -0
  221. package/dist/data/har/fixtures.d.ts.map +1 -0
  222. package/dist/data/har/types.d.ts +47 -0
  223. package/dist/data/har/types.d.ts.map +1 -0
  224. package/dist/data.d.ts +39 -0
  225. package/dist/data.d.ts.map +1 -0
  226. package/dist/data.js +109 -0
  227. package/dist/data.js.map +1 -0
  228. package/dist/hooks/use-density.d.ts +22 -0
  229. package/dist/hooks/use-density.d.ts.map +1 -0
  230. package/dist/hooks/use-density.js +54 -0
  231. package/dist/hooks/use-density.js.map +1 -0
  232. package/dist/hooks/use-history-route.d.ts +6 -0
  233. package/dist/hooks/use-history-route.d.ts.map +1 -0
  234. package/dist/hooks/use-history-route.js +31 -0
  235. package/dist/hooks/use-history-route.js.map +1 -0
  236. package/dist/hooks/use-sort.d.ts +17 -0
  237. package/dist/hooks/use-sort.d.ts.map +1 -0
  238. package/dist/hooks/use-sort.js +42 -0
  239. package/dist/hooks/use-sort.js.map +1 -0
  240. package/dist/hooks/use-theme.d.ts +17 -0
  241. package/dist/hooks/use-theme.d.ts.map +1 -0
  242. package/dist/hooks/use-theme.js +68 -0
  243. package/dist/hooks/use-theme.js.map +1 -0
  244. package/dist/hooks.d.ts +5 -0
  245. package/dist/hooks.d.ts.map +1 -0
  246. package/dist/hooks.js +14 -0
  247. package/dist/hooks.js.map +1 -0
  248. package/dist/index.d.ts +7 -0
  249. package/dist/index.d.ts.map +1 -0
  250. package/dist/index.js +193 -0
  251. package/dist/index.js.map +1 -0
  252. package/dist/layout/Section.d.ts +23 -0
  253. package/dist/layout/Section.d.ts.map +1 -0
  254. package/dist/layout/Section.js +73 -0
  255. package/dist/layout/Section.js.map +1 -0
  256. package/dist/layout/SplitPane.d.ts +13 -0
  257. package/dist/layout/SplitPane.d.ts.map +1 -0
  258. package/dist/layout/SplitPane.js +72 -0
  259. package/dist/layout/SplitPane.js.map +1 -0
  260. package/dist/lib/palette.d.ts +4 -0
  261. package/dist/lib/palette.d.ts.map +1 -0
  262. package/dist/lib/palette.js +35 -0
  263. package/dist/lib/palette.js.map +1 -0
  264. package/dist/lib/size.d.ts +6 -0
  265. package/dist/lib/size.d.ts.map +1 -0
  266. package/dist/lib/size.js +14 -0
  267. package/dist/lib/size.js.map +1 -0
  268. package/dist/lib/utils.d.ts +3 -0
  269. package/dist/lib/utils.d.ts.map +1 -0
  270. package/dist/lib/utils.js +9 -0
  271. package/dist/lib/utils.js.map +1 -0
  272. package/dist/overlay/HoverCard.d.ts +13 -0
  273. package/dist/overlay/HoverCard.d.ts.map +1 -0
  274. package/dist/overlay/HoverCard.js +170 -0
  275. package/dist/overlay/HoverCard.js.map +1 -0
  276. package/dist/overlay/Modal.d.ts +17 -0
  277. package/dist/overlay/Modal.d.ts.map +1 -0
  278. package/dist/overlay/Modal.js +91 -0
  279. package/dist/overlay/Modal.js.map +1 -0
  280. package/dist/rpc/AcceptPicker.d.ts +52 -0
  281. package/dist/rpc/AcceptPicker.d.ts.map +1 -0
  282. package/dist/rpc/AcceptPicker.js +126 -0
  283. package/dist/rpc/AcceptPicker.js.map +1 -0
  284. package/dist/rpc/ApiExplorer.d.ts +11 -0
  285. package/dist/rpc/ApiExplorer.d.ts.map +1 -0
  286. package/dist/rpc/ApiExplorer.js +37 -0
  287. package/dist/rpc/ApiExplorer.js.map +1 -0
  288. package/dist/rpc/CommandForm.d.ts +15 -0
  289. package/dist/rpc/CommandForm.d.ts.map +1 -0
  290. package/dist/rpc/CommandForm.js +356 -0
  291. package/dist/rpc/CommandForm.js.map +1 -0
  292. package/dist/rpc/CommandOutput.d.ts +11 -0
  293. package/dist/rpc/CommandOutput.d.ts.map +1 -0
  294. package/dist/rpc/CommandOutput.js +195 -0
  295. package/dist/rpc/CommandOutput.js.map +1 -0
  296. package/dist/rpc/EndpointList.d.ts +18 -0
  297. package/dist/rpc/EndpointList.d.ts.map +1 -0
  298. package/dist/rpc/EndpointList.js +56 -0
  299. package/dist/rpc/EndpointList.js.map +1 -0
  300. package/dist/rpc/EntityExplorerApp.d.ts +15 -0
  301. package/dist/rpc/EntityExplorerApp.d.ts.map +1 -0
  302. package/dist/rpc/EntityExplorerApp.js +282 -0
  303. package/dist/rpc/EntityExplorerApp.js.map +1 -0
  304. package/dist/rpc/ExecutionResult.d.ts +14 -0
  305. package/dist/rpc/ExecutionResult.d.ts.map +1 -0
  306. package/dist/rpc/ExecutionResult.js +51 -0
  307. package/dist/rpc/ExecutionResult.js.map +1 -0
  308. package/dist/rpc/FilterForm.d.ts +22 -0
  309. package/dist/rpc/FilterForm.d.ts.map +1 -0
  310. package/dist/rpc/FilterForm.js +392 -0
  311. package/dist/rpc/FilterForm.js.map +1 -0
  312. package/dist/rpc/InlineError.d.ts +7 -0
  313. package/dist/rpc/InlineError.d.ts.map +1 -0
  314. package/dist/rpc/InlineError.js +54 -0
  315. package/dist/rpc/InlineError.js.map +1 -0
  316. package/dist/rpc/OperationActionDialog.d.ts +12 -0
  317. package/dist/rpc/OperationActionDialog.d.ts.map +1 -0
  318. package/dist/rpc/OperationActionDialog.js +105 -0
  319. package/dist/rpc/OperationActionDialog.js.map +1 -0
  320. package/dist/rpc/OperationCatalog.d.ts +21 -0
  321. package/dist/rpc/OperationCatalog.d.ts.map +1 -0
  322. package/dist/rpc/OperationCatalog.js +339 -0
  323. package/dist/rpc/OperationCatalog.js.map +1 -0
  324. package/dist/rpc/OperationCommandPage.d.ts +22 -0
  325. package/dist/rpc/OperationCommandPage.d.ts.map +1 -0
  326. package/dist/rpc/OperationCommandPage.js +484 -0
  327. package/dist/rpc/OperationCommandPage.js.map +1 -0
  328. package/dist/rpc/OperationEntityPage.d.ts +23 -0
  329. package/dist/rpc/OperationEntityPage.d.ts.map +1 -0
  330. package/dist/rpc/OperationEntityPage.js +218 -0
  331. package/dist/rpc/OperationEntityPage.js.map +1 -0
  332. package/dist/rpc/classify.d.ts +8 -0
  333. package/dist/rpc/classify.d.ts.map +1 -0
  334. package/dist/rpc/classify.js +76 -0
  335. package/dist/rpc/classify.js.map +1 -0
  336. package/dist/rpc/clickyMetadata.d.ts +12 -0
  337. package/dist/rpc/clickyMetadata.d.ts.map +1 -0
  338. package/dist/rpc/clickyMetadata.js +71 -0
  339. package/dist/rpc/clickyMetadata.js.map +1 -0
  340. package/dist/rpc/formMetadata.d.ts +27 -0
  341. package/dist/rpc/formMetadata.d.ts.map +1 -0
  342. package/dist/rpc/formMetadata.js +250 -0
  343. package/dist/rpc/formMetadata.js.map +1 -0
  344. package/dist/rpc/types.d.ts +109 -0
  345. package/dist/rpc/types.d.ts.map +1 -0
  346. package/dist/rpc/types.js +8 -0
  347. package/dist/rpc/types.js.map +1 -0
  348. package/dist/rpc/useOperations.d.ts +346 -0
  349. package/dist/rpc/useOperations.d.ts.map +1 -0
  350. package/dist/rpc/useOperations.js +31 -0
  351. package/dist/rpc/useOperations.js.map +1 -0
  352. package/dist/rpc.d.ts +14 -0
  353. package/dist/rpc.d.ts.map +1 -0
  354. package/dist/rpc.js +37 -0
  355. package/dist/rpc.js.map +1 -0
  356. package/dist/styles.css +2 -0
  357. package/dist/styles.d.ts +1 -0
  358. package/dist/styles.d.ts.map +1 -0
  359. package/dist/styles.js +2 -0
  360. package/dist/styles.js.map +1 -0
  361. package/dist/tailwind-preset.d.ts +4 -0
  362. package/dist/tailwind-preset.d.ts.map +1 -0
  363. package/dist/tailwind-preset.js +69 -0
  364. package/dist/tailwind-preset.js.map +1 -0
  365. package/dist/utils.d.ts +4 -0
  366. package/dist/utils.d.ts.map +1 -0
  367. package/dist/utils.js +12 -0
  368. package/dist/utils.js.map +1 -0
  369. package/package.json +83 -40
  370. package/dist/index.d.mts +0 -834
  371. package/dist/index.d.mts.map +0 -1
  372. package/dist/index.mjs +0 -2918
  373. package/dist/index.mjs.map +0 -1
  374. package/dist/tailwind-preset.d.mts +0 -7
  375. package/dist/tailwind-preset.d.mts.map +0 -1
  376. package/dist/tailwind-preset.mjs +0 -64
  377. package/dist/tailwind-preset.mjs.map +0 -1
  378. package/src/styles/tokens.css +0 -78
@@ -0,0 +1,59 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { useState, useEffect } from "react";
3
+ import { cn } from "../lib/utils.js";
4
+ let loadPromise = null;
5
+ function loadMarked() {
6
+ if (loadPromise) return loadPromise;
7
+ loadPromise = import("marked").then(({ Marked, Renderer }) => {
8
+ const renderer = new Renderer();
9
+ renderer.code = ({ text, lang }) => `<pre class="bg-muted rounded p-2 text-xs overflow-x-auto border border-border my-1.5"><code${lang ? ` class="language-${lang}"` : ""}>${text}</code></pre>`;
10
+ renderer.codespan = ({ text }) => `<code class="bg-muted rounded px-1 text-xs">${text}</code>`;
11
+ renderer.heading = ({ text, depth }) => {
12
+ const cls = depth <= 1 ? "font-bold text-base mt-2 mb-1" : depth === 2 ? "font-semibold text-sm mt-2 mb-1" : "font-semibold text-sm mt-2 mb-1";
13
+ return `<h${depth} class="${cls}">${text}</h${depth}>`;
14
+ };
15
+ renderer.link = ({ href, text }) => `<a href="${href}" target="_blank" rel="noopener noreferrer" class="text-primary hover:underline">${text}</a>`;
16
+ renderer.blockquote = ({ text }) => `<blockquote class="border-l-2 border-border pl-2 text-muted-foreground italic my-1">${text}</blockquote>`;
17
+ renderer.tablerow = ({ text }) => `<tr class="border-b border-border">${text}</tr>`;
18
+ renderer.list = function(token) {
19
+ const tag = token.ordered ? "ol" : "ul";
20
+ const cls = token.ordered ? "list-decimal ml-4 my-1" : "list-disc ml-4 my-1";
21
+ const body = token.items.map((item) => this.listitem(item)).join("");
22
+ return `<${tag} class="${cls}">${body}</${tag}>`;
23
+ };
24
+ renderer.listitem = ({ text }) => `<li class="my-0.5">${text}</li>`;
25
+ renderer.image = ({ href, text }) => `<img src="${href}" alt="${text}" class="max-w-full rounded my-1" />`;
26
+ renderer.hr = () => '<hr class="border-border my-2" />';
27
+ renderer.paragraph = ({ text }) => `<p class="mt-1.5">${text}</p>`;
28
+ return new Marked({ renderer, gfm: true, breaks: true });
29
+ });
30
+ return loadPromise;
31
+ }
32
+ function Markdown({ text, className }) {
33
+ const [html, setHtml] = useState(null);
34
+ useEffect(() => {
35
+ let cancelled = false;
36
+ loadMarked().then((m) => Promise.resolve(m.parse(text))).then((out) => {
37
+ if (!cancelled) setHtml(out);
38
+ }).catch(() => {
39
+ if (!cancelled) setHtml(text);
40
+ });
41
+ return () => {
42
+ cancelled = true;
43
+ };
44
+ }, [text]);
45
+ if (html === null) {
46
+ return /* @__PURE__ */ jsx("pre", { className: cn("text-sm whitespace-pre-wrap", className), children: text });
47
+ }
48
+ return /* @__PURE__ */ jsx(
49
+ "div",
50
+ {
51
+ className: cn("prose prose-sm max-w-none dark:prose-invert", className),
52
+ dangerouslySetInnerHTML: { __html: html }
53
+ }
54
+ );
55
+ }
56
+ export {
57
+ Markdown
58
+ };
59
+ //# sourceMappingURL=Markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Markdown.js","sources":["../../src/data/Markdown.tsx"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport { cn } from \"../lib/utils\";\n\nexport type MarkdownProps = {\n text: string;\n className?: string;\n};\n\ntype MarkedLike = {\n parse: (md: string) => string | Promise<string>;\n};\n\nlet loadPromise: Promise<MarkedLike> | null = null;\n\nfunction loadMarked(): Promise<MarkedLike> {\n if (loadPromise) return loadPromise;\n loadPromise = import(\"marked\").then(({ Marked, Renderer }) => {\n const renderer = new Renderer();\n\n renderer.code = ({ text, lang }) =>\n `<pre class=\"bg-muted rounded p-2 text-xs overflow-x-auto border border-border my-1.5\"><code${lang ? ` class=\"language-${lang}\"` : \"\"}>${text}</code></pre>`;\n\n renderer.codespan = ({ text }) => `<code class=\"bg-muted rounded px-1 text-xs\">${text}</code>`;\n\n renderer.heading = ({ text, depth }) => {\n const cls =\n depth <= 1\n ? \"font-bold text-base mt-2 mb-1\"\n : depth === 2\n ? \"font-semibold text-sm mt-2 mb-1\"\n : \"font-semibold text-sm mt-2 mb-1\";\n return `<h${depth} class=\"${cls}\">${text}</h${depth}>`;\n };\n\n renderer.link = ({ href, text }) =>\n `<a href=\"${href}\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"text-primary hover:underline\">${text}</a>`;\n\n renderer.blockquote = ({ text }) =>\n `<blockquote class=\"border-l-2 border-border pl-2 text-muted-foreground italic my-1\">${text}</blockquote>`;\n\n renderer.tablerow = ({ text }) => `<tr class=\"border-b border-border\">${text}</tr>`;\n\n renderer.list = function (token) {\n const tag = token.ordered ? \"ol\" : \"ul\";\n const cls = token.ordered ? \"list-decimal ml-4 my-1\" : \"list-disc ml-4 my-1\";\n const body = token.items.map((item) => this.listitem(item)).join(\"\");\n return `<${tag} class=\"${cls}\">${body}</${tag}>`;\n };\n\n renderer.listitem = ({ text }) => `<li class=\"my-0.5\">${text}</li>`;\n\n renderer.image = ({ href, text }) =>\n `<img src=\"${href}\" alt=\"${text}\" class=\"max-w-full rounded my-1\" />`;\n\n renderer.hr = () => '<hr class=\"border-border my-2\" />';\n\n renderer.paragraph = ({ text }) => `<p class=\"mt-1.5\">${text}</p>`;\n\n return new Marked({ renderer, gfm: true, breaks: true }) as unknown as MarkedLike;\n });\n return loadPromise;\n}\n\nexport function Markdown({ text, className }: MarkdownProps) {\n const [html, setHtml] = useState<string | null>(null);\n\n useEffect(() => {\n let cancelled = false;\n loadMarked()\n .then((m) => Promise.resolve(m.parse(text)))\n .then((out) => {\n if (!cancelled) setHtml(out);\n })\n .catch(() => {\n if (!cancelled) setHtml(text);\n });\n return () => {\n cancelled = true;\n };\n }, [text]);\n\n if (html === null) {\n return <pre className={cn(\"text-sm whitespace-pre-wrap\", className)}>{text}</pre>;\n }\n\n return (\n <div\n className={cn(\"prose prose-sm max-w-none dark:prose-invert\", className)}\n dangerouslySetInnerHTML={{ __html: html }}\n />\n );\n}\n"],"names":[],"mappings":";;;AAYA,IAAI,cAA0C;AAE9C,SAAS,aAAkC;AACzC,MAAI,YAAa,QAAO;AACxB,gBAAc,OAAO,QAAQ,EAAE,KAAK,CAAC,EAAE,QAAQ,eAAe;AAC5D,UAAM,WAAW,IAAI,SAAA;AAErB,aAAS,OAAO,CAAC,EAAE,MAAM,KAAA,MACvB,8FAA8F,OAAO,oBAAoB,IAAI,MAAM,EAAE,IAAI,IAAI;AAE/I,aAAS,WAAW,CAAC,EAAE,KAAA,MAAW,+CAA+C,IAAI;AAErF,aAAS,UAAU,CAAC,EAAE,MAAM,YAAY;AACtC,YAAM,MACJ,SAAS,IACL,kCACA,UAAU,IACR,oCACA;AACR,aAAO,KAAK,KAAK,WAAW,GAAG,KAAK,IAAI,MAAM,KAAK;AAAA,IACrD;AAEA,aAAS,OAAO,CAAC,EAAE,MAAM,WACvB,YAAY,IAAI,oFAAoF,IAAI;AAE1G,aAAS,aAAa,CAAC,EAAE,KAAA,MACvB,uFAAuF,IAAI;AAE7F,aAAS,WAAW,CAAC,EAAE,KAAA,MAAW,sCAAsC,IAAI;AAE5E,aAAS,OAAO,SAAU,OAAO;AAC/B,YAAM,MAAM,MAAM,UAAU,OAAO;AACnC,YAAM,MAAM,MAAM,UAAU,2BAA2B;AACvD,YAAM,OAAO,MAAM,MAAM,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,EAAE,KAAK,EAAE;AACnE,aAAO,IAAI,GAAG,WAAW,GAAG,KAAK,IAAI,KAAK,GAAG;AAAA,IAC/C;AAEA,aAAS,WAAW,CAAC,EAAE,KAAA,MAAW,sBAAsB,IAAI;AAE5D,aAAS,QAAQ,CAAC,EAAE,MAAM,WACxB,aAAa,IAAI,UAAU,IAAI;AAEjC,aAAS,KAAK,MAAM;AAEpB,aAAS,YAAY,CAAC,EAAE,KAAA,MAAW,qBAAqB,IAAI;AAE5D,WAAO,IAAI,OAAO,EAAE,UAAU,KAAK,MAAM,QAAQ,MAAM;AAAA,EACzD,CAAC;AACD,SAAO;AACT;AAEO,SAAS,SAAS,EAAE,MAAM,aAA4B;AAC3D,QAAM,CAAC,MAAM,OAAO,IAAI,SAAwB,IAAI;AAEpD,YAAU,MAAM;AACd,QAAI,YAAY;AAChB,eAAA,EACG,KAAK,CAAC,MAAM,QAAQ,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC,EAC1C,KAAK,CAAC,QAAQ;AACb,UAAI,CAAC,UAAW,SAAQ,GAAG;AAAA,IAC7B,CAAC,EACA,MAAM,MAAM;AACX,UAAI,CAAC,UAAW,SAAQ,IAAI;AAAA,IAC9B,CAAC;AACH,WAAO,MAAM;AACX,kBAAY;AAAA,IACd;AAAA,EACF,GAAG,CAAC,IAAI,CAAC;AAET,MAAI,SAAS,MAAM;AACjB,+BAAQ,OAAA,EAAI,WAAW,GAAG,+BAA+B,SAAS,GAAI,UAAA,MAAK;AAAA,EAC7E;AAEA,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,GAAG,+CAA+C,SAAS;AAAA,MACtE,yBAAyB,EAAE,QAAQ,KAAA;AAAA,IAAK;AAAA,EAAA;AAG9C;"}
@@ -0,0 +1,22 @@
1
+ import { ReactNode } from 'react';
2
+ export type MatrixTableRow = {
3
+ key: string;
4
+ label: ReactNode;
5
+ cells: ReactNode[];
6
+ };
7
+ export type MatrixTableProps = {
8
+ columns: ReactNode[];
9
+ rows: MatrixTableRow[];
10
+ corner?: ReactNode;
11
+ emptyMessage?: ReactNode;
12
+ angledHeaders?: boolean;
13
+ density?: "default" | "compact";
14
+ columnWidth?: number;
15
+ headerHeight?: number;
16
+ className?: string;
17
+ columnClassName?: string;
18
+ rowLabelClassName?: string;
19
+ cellClassName?: string;
20
+ };
21
+ export declare function MatrixTable({ columns, rows, corner, emptyMessage, angledHeaders, density, columnWidth, headerHeight, className, columnClassName, rowLabelClassName, cellClassName, }: MatrixTableProps): import("react/jsx-runtime").JSX.Element;
22
+ //# sourceMappingURL=MatrixTable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MatrixTable.d.ts","sourceRoot":"","sources":["../../src/data/MatrixTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,MAAM,MAAM,cAAc,GAAG;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,IAAI,EAAE,cAAc,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EACP,IAAI,EACJ,MAAM,EACN,YAAwB,EACxB,aAAqB,EACrB,OAAmB,EACnB,WAAgB,EAChB,YAAkB,EAClB,SAAS,EACT,eAAe,EACf,iBAAiB,EACjB,aAAa,GACd,EAAE,gBAAgB,2CAgJlB"}
@@ -0,0 +1,164 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { cn } from "../lib/utils.js";
3
+ function MatrixTable({
4
+ columns,
5
+ rows,
6
+ corner,
7
+ emptyMessage = "No data",
8
+ angledHeaders = false,
9
+ density = "default",
10
+ columnWidth = 48,
11
+ headerHeight = 120,
12
+ className,
13
+ columnClassName,
14
+ rowLabelClassName,
15
+ cellClassName
16
+ }) {
17
+ if (rows.length === 0 || columns.length === 0) {
18
+ return /* @__PURE__ */ jsx("div", { className: "text-sm text-muted-foreground", children: emptyMessage });
19
+ }
20
+ const textWidth = Math.round(headerHeight * 1.41);
21
+ const diagonalOverhang = Math.round(headerHeight * 0.71);
22
+ const compact = density === "compact";
23
+ const headerCellPadding = compact ? "px-density-2 py-density-1" : "px-density-3 py-density-2";
24
+ const rowLabelPadding = compact ? "px-density-2 py-1" : "px-density-3 py-density-2";
25
+ const bodyCellPadding = compact ? "px-density-2 py-1" : "px-density-3 py-density-2";
26
+ return /* @__PURE__ */ jsx(
27
+ "div",
28
+ {
29
+ className: cn("overflow-auto rounded-md border border-border", className),
30
+ style: angledHeaders ? { paddingRight: diagonalOverhang } : void 0,
31
+ children: /* @__PURE__ */ jsxs("table", { className: cn("w-max border-collapse", compact ? "text-xs" : "text-sm"), children: [
32
+ angledHeaders && /* @__PURE__ */ jsxs("colgroup", { children: [
33
+ /* @__PURE__ */ jsx("col", {}),
34
+ columns.map((_, index) => /* @__PURE__ */ jsx("col", { style: { width: columnWidth } }, index))
35
+ ] }),
36
+ /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { className: cn("bg-muted/40", !angledHeaders && "border-b border-border"), children: [
37
+ /* @__PURE__ */ jsx(
38
+ "th",
39
+ {
40
+ scope: "col",
41
+ className: cn(
42
+ "sticky left-0 z-10 min-w-44 border-r border-border bg-muted/40 text-left font-medium",
43
+ headerCellPadding,
44
+ angledHeaders ? "align-bottom" : columnClassName
45
+ ),
46
+ children: corner
47
+ }
48
+ ),
49
+ columns.map(
50
+ (column, index) => angledHeaders ? /* @__PURE__ */ jsxs(
51
+ "th",
52
+ {
53
+ scope: "col",
54
+ title: columnTitle(column),
55
+ className: cn(
56
+ "relative overflow-visible border-b border-border p-0 align-bottom",
57
+ columnClassName
58
+ ),
59
+ style: {
60
+ width: columnWidth,
61
+ minWidth: columnWidth,
62
+ maxWidth: columnWidth,
63
+ height: headerHeight
64
+ },
65
+ children: [
66
+ /* @__PURE__ */ jsx(
67
+ "div",
68
+ {
69
+ className: "absolute bottom-0 border-b border-border",
70
+ style: {
71
+ left: columnWidth,
72
+ width: textWidth,
73
+ transform: "rotate(-45deg)",
74
+ transformOrigin: "0 100%"
75
+ }
76
+ }
77
+ ),
78
+ index === 0 && /* @__PURE__ */ jsx(
79
+ "div",
80
+ {
81
+ className: "absolute bottom-0 border-b border-border",
82
+ style: {
83
+ left: 0,
84
+ width: textWidth,
85
+ transform: "rotate(-45deg)",
86
+ transformOrigin: "0 100%"
87
+ }
88
+ }
89
+ ),
90
+ /* @__PURE__ */ jsx(
91
+ "div",
92
+ {
93
+ className: "absolute bottom-2 overflow-hidden text-ellipsis whitespace-nowrap pl-1 text-left text-xs font-medium leading-none text-muted-foreground",
94
+ style: {
95
+ left: columnWidth / 2,
96
+ width: textWidth,
97
+ transform: "rotate(-45deg)",
98
+ transformOrigin: "0 100%"
99
+ },
100
+ children: column
101
+ }
102
+ )
103
+ ]
104
+ },
105
+ index
106
+ ) : /* @__PURE__ */ jsx(
107
+ "th",
108
+ {
109
+ scope: "col",
110
+ className: cn(
111
+ "min-w-24 whitespace-nowrap text-center text-xs font-medium text-muted-foreground",
112
+ headerCellPadding,
113
+ columnClassName
114
+ ),
115
+ children: column
116
+ },
117
+ index
118
+ )
119
+ )
120
+ ] }) }),
121
+ /* @__PURE__ */ jsx("tbody", { children: rows.map((row) => /* @__PURE__ */ jsxs("tr", { className: "border-b border-border last:border-b-0", children: [
122
+ /* @__PURE__ */ jsx(
123
+ "th",
124
+ {
125
+ scope: "row",
126
+ className: cn(
127
+ "sticky left-0 z-10 border-r border-border bg-background text-left font-medium",
128
+ rowLabelPadding,
129
+ rowLabelClassName
130
+ ),
131
+ children: row.label
132
+ }
133
+ ),
134
+ columns.map((_, index) => /* @__PURE__ */ jsx(
135
+ "td",
136
+ {
137
+ className: cn(
138
+ angledHeaders ? "p-0 text-center align-middle" : cn(bodyCellPadding, "text-center align-middle"),
139
+ cellClassName
140
+ ),
141
+ style: angledHeaders ? {
142
+ width: columnWidth,
143
+ minWidth: columnWidth,
144
+ maxWidth: columnWidth
145
+ } : void 0,
146
+ children: row.cells[index] ?? null
147
+ },
148
+ index
149
+ ))
150
+ ] }, row.key)) })
151
+ ] })
152
+ }
153
+ );
154
+ }
155
+ function columnTitle(column) {
156
+ if (typeof column === "string" || typeof column === "number") {
157
+ return String(column);
158
+ }
159
+ return void 0;
160
+ }
161
+ export {
162
+ MatrixTable
163
+ };
164
+ //# sourceMappingURL=MatrixTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MatrixTable.js","sources":["../../src/data/MatrixTable.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\n\nexport type MatrixTableRow = {\n key: string;\n label: ReactNode;\n cells: ReactNode[];\n};\n\nexport type MatrixTableProps = {\n columns: ReactNode[];\n rows: MatrixTableRow[];\n corner?: ReactNode;\n emptyMessage?: ReactNode;\n angledHeaders?: boolean;\n density?: \"default\" | \"compact\";\n columnWidth?: number;\n headerHeight?: number;\n className?: string;\n columnClassName?: string;\n rowLabelClassName?: string;\n cellClassName?: string;\n};\n\nexport function MatrixTable({\n columns,\n rows,\n corner,\n emptyMessage = \"No data\",\n angledHeaders = false,\n density = \"default\",\n columnWidth = 48,\n headerHeight = 120,\n className,\n columnClassName,\n rowLabelClassName,\n cellClassName,\n}: MatrixTableProps) {\n if (rows.length === 0 || columns.length === 0) {\n return <div className=\"text-sm text-muted-foreground\">{emptyMessage}</div>;\n }\n\n const textWidth = Math.round(headerHeight * 1.41);\n const diagonalOverhang = Math.round(headerHeight * 0.71);\n const compact = density === \"compact\";\n const headerCellPadding = compact ? \"px-density-2 py-density-1\" : \"px-density-3 py-density-2\";\n const rowLabelPadding = compact ? \"px-density-2 py-1\" : \"px-density-3 py-density-2\";\n const bodyCellPadding = compact ? \"px-density-2 py-1\" : \"px-density-3 py-density-2\";\n\n return (\n <div\n className={cn(\"overflow-auto rounded-md border border-border\", className)}\n style={angledHeaders ? { paddingRight: diagonalOverhang } : undefined}\n >\n <table className={cn(\"w-max border-collapse\", compact ? \"text-xs\" : \"text-sm\")}>\n {angledHeaders && (\n <colgroup>\n <col />\n {columns.map((_, index) => (\n <col key={index} style={{ width: columnWidth }} />\n ))}\n </colgroup>\n )}\n <thead>\n <tr className={cn(\"bg-muted/40\", !angledHeaders && \"border-b border-border\")}>\n <th\n scope=\"col\"\n className={cn(\n \"sticky left-0 z-10 min-w-44 border-r border-border bg-muted/40 text-left font-medium\",\n headerCellPadding,\n angledHeaders ? \"align-bottom\" : columnClassName,\n )}\n >\n {corner}\n </th>\n {columns.map((column, index) =>\n angledHeaders ? (\n <th\n key={index}\n scope=\"col\"\n title={columnTitle(column)}\n className={cn(\n \"relative overflow-visible border-b border-border p-0 align-bottom\",\n columnClassName,\n )}\n style={{\n width: columnWidth,\n minWidth: columnWidth,\n maxWidth: columnWidth,\n height: headerHeight,\n }}\n >\n <div\n className=\"absolute bottom-0 border-b border-border\"\n style={{\n left: columnWidth,\n width: textWidth,\n transform: \"rotate(-45deg)\",\n transformOrigin: \"0 100%\",\n }}\n />\n {index === 0 && (\n <div\n className=\"absolute bottom-0 border-b border-border\"\n style={{\n left: 0,\n width: textWidth,\n transform: \"rotate(-45deg)\",\n transformOrigin: \"0 100%\",\n }}\n />\n )}\n <div\n className=\"absolute bottom-2 overflow-hidden text-ellipsis whitespace-nowrap pl-1 text-left text-xs font-medium leading-none text-muted-foreground\"\n style={{\n left: columnWidth / 2,\n width: textWidth,\n transform: \"rotate(-45deg)\",\n transformOrigin: \"0 100%\",\n }}\n >\n {column}\n </div>\n </th>\n ) : (\n <th\n key={index}\n scope=\"col\"\n className={cn(\n \"min-w-24 whitespace-nowrap text-center text-xs font-medium text-muted-foreground\",\n headerCellPadding,\n columnClassName,\n )}\n >\n {column}\n </th>\n ),\n )}\n </tr>\n </thead>\n <tbody>\n {rows.map((row) => (\n <tr key={row.key} className=\"border-b border-border last:border-b-0\">\n <th\n scope=\"row\"\n className={cn(\n \"sticky left-0 z-10 border-r border-border bg-background text-left font-medium\",\n rowLabelPadding,\n rowLabelClassName,\n )}\n >\n {row.label}\n </th>\n {columns.map((_, index) => (\n <td\n key={index}\n className={cn(\n angledHeaders\n ? \"p-0 text-center align-middle\"\n : cn(bodyCellPadding, \"text-center align-middle\"),\n cellClassName,\n )}\n style={\n angledHeaders\n ? {\n width: columnWidth,\n minWidth: columnWidth,\n maxWidth: columnWidth,\n }\n : undefined\n }\n >\n {row.cells[index] ?? null}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n}\n\nfunction columnTitle(column: ReactNode) {\n if (typeof column === \"string\" || typeof column === \"number\") {\n return String(column);\n }\n return undefined;\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export type MethodBadgeProps = {
2
+ method: string;
3
+ className?: string;
4
+ };
5
+ export declare function MethodBadge({ method, className }: MethodBadgeProps): import("react/jsx-runtime").JSX.Element;
6
+ //# sourceMappingURL=MethodBadge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MethodBadge.d.ts","sourceRoot":"","sources":["../../src/data/MethodBadge.tsx"],"names":[],"mappings":"AAaA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,gBAAgB,2CAOlE"}
@@ -0,0 +1,18 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { Badge } from "./Badge.js";
3
+ import { cn } from "../lib/utils.js";
4
+ const METHOD_TONES = {
5
+ get: "info",
6
+ post: "success",
7
+ put: "warning",
8
+ patch: "warning",
9
+ delete: "danger"
10
+ };
11
+ function MethodBadge({ method, className }) {
12
+ const tone = METHOD_TONES[method.toLowerCase()] ?? "neutral";
13
+ return /* @__PURE__ */ jsx(Badge, { variant: "outline", tone, size: "sm", className: cn("font-mono uppercase", className), children: method.toUpperCase() });
14
+ }
15
+ export {
16
+ MethodBadge
17
+ };
18
+ //# sourceMappingURL=MethodBadge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MethodBadge.js","sources":["../../src/data/MethodBadge.tsx"],"sourcesContent":["import { Badge, type BadgeProps } from \"./Badge\";\nimport { cn } from \"../lib/utils\";\n\ntype Tone = NonNullable<BadgeProps[\"tone\"]>;\n\nconst METHOD_TONES: Record<string, Tone> = {\n get: \"info\",\n post: \"success\",\n put: \"warning\",\n patch: \"warning\",\n delete: \"danger\",\n};\n\nexport type MethodBadgeProps = {\n method: string;\n className?: string;\n};\n\nexport function MethodBadge({ method, className }: MethodBadgeProps) {\n const tone = METHOD_TONES[method.toLowerCase()] ?? \"neutral\";\n return (\n <Badge variant=\"outline\" tone={tone} size=\"sm\" className={cn(\"font-mono uppercase\", className)}>\n {method.toUpperCase()}\n </Badge>\n );\n}\n"],"names":[],"mappings":";;;AAKA,MAAM,eAAqC;AAAA,EACzC,KAAK;AAAA,EACL,MAAM;AAAA,EACN,KAAK;AAAA,EACL,OAAO;AAAA,EACP,QAAQ;AACV;AAOO,SAAS,YAAY,EAAE,QAAQ,aAA+B;AACnE,QAAM,OAAO,aAAa,OAAO,YAAA,CAAa,KAAK;AACnD,SACE,oBAAC,OAAA,EAAM,SAAQ,WAAU,MAAY,MAAK,MAAK,WAAW,GAAG,uBAAuB,SAAS,GAC1F,UAAA,OAAO,eACV;AAEJ;"}
@@ -0,0 +1,13 @@
1
+ export type ProgressSegment = {
2
+ count: number;
3
+ color: string;
4
+ label: string;
5
+ };
6
+ export type ProgressBarProps = {
7
+ segments: ProgressSegment[];
8
+ total: number;
9
+ height?: string;
10
+ className?: string;
11
+ };
12
+ export declare function ProgressBar({ segments, total, height, className }: ProgressBarProps): import("react/jsx-runtime").JSX.Element | null;
13
+ //# sourceMappingURL=ProgressBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProgressBar.d.ts","sourceRoot":"","sources":["../../src/data/ProgressBar.tsx"],"names":[],"mappings":"AAEA,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAc,EAAE,SAAS,EAAE,EAAE,gBAAgB,kDA+B3F"}
@@ -0,0 +1,34 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { cn } from "../lib/utils.js";
3
+ function ProgressBar({ segments, total, height = "h-2", className }) {
4
+ if (total === 0) return null;
5
+ const tooltip = segments.filter((s) => s.count > 0).map((s) => `${s.count} ${s.label}`).join(", ");
6
+ return /* @__PURE__ */ jsx(
7
+ "div",
8
+ {
9
+ className: cn("w-full bg-muted rounded-full flex overflow-hidden", height, className),
10
+ title: tooltip,
11
+ role: "progressbar",
12
+ "aria-valuemin": 0,
13
+ "aria-valuemax": total,
14
+ "aria-valuenow": segments.reduce((acc, s) => acc + s.count, 0),
15
+ children: segments.map((seg, i) => {
16
+ if (seg.count === 0) return null;
17
+ const pct = seg.count / total * 100;
18
+ return /* @__PURE__ */ jsx(
19
+ "div",
20
+ {
21
+ className: cn(seg.color, height, "transition-all duration-300"),
22
+ style: { width: `${pct}%` },
23
+ title: `${seg.count} ${seg.label}`
24
+ },
25
+ i
26
+ );
27
+ })
28
+ }
29
+ );
30
+ }
31
+ export {
32
+ ProgressBar
33
+ };
34
+ //# sourceMappingURL=ProgressBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProgressBar.js","sources":["../../src/data/ProgressBar.tsx"],"sourcesContent":["import { cn } from \"../lib/utils\";\n\nexport type ProgressSegment = {\n count: number;\n color: string;\n label: string;\n};\n\nexport type ProgressBarProps = {\n segments: ProgressSegment[];\n total: number;\n height?: string;\n className?: string;\n};\n\nexport function ProgressBar({ segments, total, height = \"h-2\", className }: ProgressBarProps) {\n if (total === 0) return null;\n\n const tooltip = segments\n .filter((s) => s.count > 0)\n .map((s) => `${s.count} ${s.label}`)\n .join(\", \");\n\n return (\n <div\n className={cn(\"w-full bg-muted rounded-full flex overflow-hidden\", height, className)}\n title={tooltip}\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={total}\n aria-valuenow={segments.reduce((acc, s) => acc + s.count, 0)}\n >\n {segments.map((seg, i) => {\n if (seg.count === 0) return null;\n const pct = (seg.count / total) * 100;\n return (\n <div\n key={i}\n className={cn(seg.color, height, \"transition-all duration-300\")}\n style={{ width: `${pct}%` }}\n title={`${seg.count} ${seg.label}`}\n />\n );\n })}\n </div>\n );\n}\n"],"names":[],"mappings":";;AAeO,SAAS,YAAY,EAAE,UAAU,OAAO,SAAS,OAAO,aAA+B;AAC5F,MAAI,UAAU,EAAG,QAAO;AAExB,QAAM,UAAU,SACb,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,EACzB,IAAI,CAAC,MAAM,GAAG,EAAE,KAAK,IAAI,EAAE,KAAK,EAAE,EAClC,KAAK,IAAI;AAEZ,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,GAAG,qDAAqD,QAAQ,SAAS;AAAA,MACpF,OAAO;AAAA,MACP,MAAK;AAAA,MACL,iBAAe;AAAA,MACf,iBAAe;AAAA,MACf,iBAAe,SAAS,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,OAAO,CAAC;AAAA,MAE1D,UAAA,SAAS,IAAI,CAAC,KAAK,MAAM;AACxB,YAAI,IAAI,UAAU,EAAG,QAAO;AAC5B,cAAM,MAAO,IAAI,QAAQ,QAAS;AAClC,eACE;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,WAAW,GAAG,IAAI,OAAO,QAAQ,6BAA6B;AAAA,YAC9D,OAAO,EAAE,OAAO,GAAG,GAAG,IAAA;AAAA,YACtB,OAAO,GAAG,IAAI,KAAK,IAAI,IAAI,KAAK;AAAA,UAAA;AAAA,UAH3B;AAAA,QAAA;AAAA,MAMX,CAAC;AAAA,IAAA;AAAA,EAAA;AAGP;"}
@@ -0,0 +1,12 @@
1
+ import { ReactNode } from 'react';
2
+ import { SortDir } from '../hooks/use-sort';
3
+ export type SortableHeaderProps = {
4
+ active: boolean;
5
+ dir?: SortDir | undefined;
6
+ onClick: () => void;
7
+ align?: "left" | "right" | "center";
8
+ className?: string;
9
+ children: ReactNode;
10
+ };
11
+ export declare function SortableHeader({ active, dir, onClick, align, className, children, }: SortableHeaderProps): import("react/jsx-runtime").JSX.Element;
12
+ //# sourceMappingURL=SortableHeader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SortableHeader.d.ts","sourceRoot":"","sources":["../../src/data/SortableHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;CACrB,CAAC;AAEF,wBAAgB,cAAc,CAAC,EAC7B,MAAM,EACN,GAAG,EACH,OAAO,EACP,KAAc,EACd,SAAS,EACT,QAAQ,GACT,EAAE,mBAAmB,2CAwBrB"}
@@ -0,0 +1,33 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { cn } from "../lib/utils.js";
3
+ function SortableHeader({
4
+ active,
5
+ dir,
6
+ onClick,
7
+ align = "left",
8
+ className,
9
+ children
10
+ }) {
11
+ const alignCls = align === "right" ? "justify-end" : align === "center" ? "justify-center" : "justify-start";
12
+ return /* @__PURE__ */ jsxs(
13
+ "button",
14
+ {
15
+ type: "button",
16
+ onClick,
17
+ className: cn(
18
+ "inline-flex items-center gap-1 cursor-pointer select-none hover:text-foreground",
19
+ active ? "text-primary" : "text-muted-foreground",
20
+ alignCls,
21
+ className
22
+ ),
23
+ children: [
24
+ children,
25
+ active ? /* @__PURE__ */ jsx("span", { "aria-hidden": true, children: dir === "asc" ? "↑" : "↓" }) : /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "opacity-40", children: "↕" })
26
+ ]
27
+ }
28
+ );
29
+ }
30
+ export {
31
+ SortableHeader
32
+ };
33
+ //# sourceMappingURL=SortableHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SortableHeader.js","sources":["../../src/data/SortableHeader.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport type { SortDir } from \"../hooks/use-sort\";\n\nexport type SortableHeaderProps = {\n active: boolean;\n dir?: SortDir | undefined;\n onClick: () => void;\n align?: \"left\" | \"right\" | \"center\";\n className?: string;\n children: ReactNode;\n};\n\nexport function SortableHeader({\n active,\n dir,\n onClick,\n align = \"left\",\n className,\n children,\n}: SortableHeaderProps) {\n const alignCls =\n align === \"right\" ? \"justify-end\" : align === \"center\" ? \"justify-center\" : \"justify-start\";\n return (\n <button\n type=\"button\"\n onClick={onClick}\n className={cn(\n \"inline-flex items-center gap-1 cursor-pointer select-none hover:text-foreground\",\n active ? \"text-primary\" : \"text-muted-foreground\",\n alignCls,\n className,\n )}\n >\n {children}\n {active ? (\n <span aria-hidden>{dir === \"asc\" ? \"↑\" : \"↓\"}</span>\n ) : (\n <span aria-hidden className=\"opacity-40\">\n ↕\n </span>\n )}\n </button>\n );\n}\n"],"names":[],"mappings":";;AAaO,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA;AACF,GAAwB;AACtB,QAAM,WACJ,UAAU,UAAU,gBAAgB,UAAU,WAAW,mBAAmB;AAC9E,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA,SAAS,iBAAiB;AAAA,QAC1B;AAAA,QACA;AAAA,MAAA;AAAA,MAGD,UAAA;AAAA,QAAA;AAAA,QACA,SACC,oBAAC,QAAA,EAAK,eAAW,MAAE,kBAAQ,QAAQ,MAAM,IAAA,CAAI,wBAE5C,QAAA,EAAK,eAAW,MAAC,WAAU,cAAa,UAAA,IAAA,CAEzC;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR;"}
@@ -0,0 +1,12 @@
1
+ import { ReactNode } from 'react';
2
+ export type TabButtonProps = {
3
+ active: boolean;
4
+ onClick: () => void;
5
+ label: ReactNode;
6
+ icon?: string;
7
+ count?: number;
8
+ countColor?: string;
9
+ className?: string;
10
+ };
11
+ export declare function TabButton({ active, onClick, label, icon, count, countColor, className, }: TabButtonProps): import("react/jsx-runtime").JSX.Element;
12
+ //# sourceMappingURL=TabButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TabButton.d.ts","sourceRoot":"","sources":["../../src/data/TabButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,SAAS,CAAC,EACxB,MAAM,EACN,OAAO,EACP,KAAK,EACL,IAAI,EACJ,KAAK,EACL,UAAkC,EAClC,SAAS,GACV,EAAE,cAAc,2CA6BhB"}
@@ -0,0 +1,45 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { cn } from "../lib/utils.js";
3
+ import { Icon } from "./Icon.js";
4
+ function TabButton({
5
+ active,
6
+ onClick,
7
+ label,
8
+ icon,
9
+ count,
10
+ countColor = "bg-muted-foreground",
11
+ className
12
+ }) {
13
+ return /* @__PURE__ */ jsxs(
14
+ "button",
15
+ {
16
+ type: "button",
17
+ role: "tab",
18
+ "aria-selected": active,
19
+ onClick,
20
+ className: cn(
21
+ "inline-flex items-center gap-1.5 px-density-3 py-density-1.5 text-sm rounded-md transition-colors",
22
+ active ? "bg-primary text-primary-foreground" : "text-muted-foreground hover:bg-accent hover:text-foreground",
23
+ className
24
+ ),
25
+ children: [
26
+ icon && /* @__PURE__ */ jsx(Icon, { name: icon }),
27
+ /* @__PURE__ */ jsx("span", { children: label }),
28
+ count !== void 0 && count > 0 && /* @__PURE__ */ jsx(
29
+ "span",
30
+ {
31
+ className: cn(
32
+ "inline-flex items-center justify-center min-w-[18px] h-[18px] px-1 rounded-full text-[10px] font-bold text-white",
33
+ countColor
34
+ ),
35
+ children: count
36
+ }
37
+ )
38
+ ]
39
+ }
40
+ );
41
+ }
42
+ export {
43
+ TabButton
44
+ };
45
+ //# sourceMappingURL=TabButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TabButton.js","sources":["../../src/data/TabButton.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Icon } from \"./Icon\";\n\nexport type TabButtonProps = {\n active: boolean;\n onClick: () => void;\n label: ReactNode;\n icon?: string;\n count?: number;\n countColor?: string;\n className?: string;\n};\n\nexport function TabButton({\n active,\n onClick,\n label,\n icon,\n count,\n countColor = \"bg-muted-foreground\",\n className,\n}: TabButtonProps) {\n return (\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={active}\n onClick={onClick}\n className={cn(\n \"inline-flex items-center gap-1.5 px-density-3 py-density-1.5 text-sm rounded-md transition-colors\",\n active\n ? \"bg-primary text-primary-foreground\"\n : \"text-muted-foreground hover:bg-accent hover:text-foreground\",\n className,\n )}\n >\n {icon && <Icon name={icon} />}\n <span>{label}</span>\n {count !== undefined && count > 0 && (\n <span\n className={cn(\n \"inline-flex items-center justify-center min-w-[18px] h-[18px] px-1 rounded-full text-[10px] font-bold text-white\",\n countColor,\n )}\n >\n {count}\n </span>\n )}\n </button>\n );\n}\n"],"names":[],"mappings":";;;AAcO,SAAS,UAAU;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb;AACF,GAAmB;AACjB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,MAAK;AAAA,MACL,iBAAe;AAAA,MACf;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA,SACI,uCACA;AAAA,QACJ;AAAA,MAAA;AAAA,MAGD,UAAA;AAAA,QAAA,QAAQ,oBAAC,MAAA,EAAK,MAAM,KAAA,CAAM;AAAA,QAC3B,oBAAC,UAAM,UAAA,MAAA,CAAM;AAAA,QACZ,UAAU,UAAa,QAAQ,KAC9B;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA;AAAA,YAAA;AAAA,YAGD,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,IAAA;AAAA,EAAA;AAIR;"}
@@ -0,0 +1,35 @@
1
+ import { ReactNode } from 'react';
2
+ import { TreeNodeProps } from './TreeNode';
3
+ export type TreeProps<T> = Omit<TreeNodeProps<T>, "node" | "depth" | "expandAll" | "forcedOpenKeys"> & {
4
+ roots: T[];
5
+ empty?: ReactNode;
6
+ className?: string;
7
+ /**
8
+ * Render the Expand all / Collapse all toolbar above the tree. Enabled by
9
+ * default. Set to false to suppress when the tree is tiny or the controls
10
+ * are owned externally.
11
+ */
12
+ showControls?: boolean;
13
+ /**
14
+ * Externally controlled expand-all state. When provided together with
15
+ * `onExpandAllChange`, the tree is controlled; otherwise it manages the
16
+ * toolbar state internally.
17
+ */
18
+ expandAll?: boolean | null;
19
+ onExpandAllChange?: (next: boolean | null) => void;
20
+ toolbarClassName?: string;
21
+ /**
22
+ * Override the text the filter matches against for a given node.
23
+ * Defaults to a recursive walk of the node's own fields (excluding
24
+ * its `children` and any secondary children), which works for
25
+ * plain-shape trees but leaks text from nested domain objects —
26
+ * e.g. a SQL Table's Field rows are marked secondary, yet the
27
+ * parent record still carries `record.fields[].field` strings that
28
+ * the default walker would collect. Callers that need precise
29
+ * control over search behaviour should return only the text they
30
+ * want surfaced (the node's own display label / id / type).
31
+ */
32
+ getSearchText?: (node: T) => string;
33
+ };
34
+ export declare function Tree<T>({ roots, empty, className, showControls, expandAll: controlledExpandAll, onExpandAllChange, toolbarClassName, getSearchText, ...nodeProps }: TreeProps<T>): import("react/jsx-runtime").JSX.Element;
35
+ //# sourceMappingURL=Tree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tree.d.ts","sourceRoot":"","sources":["../../src/data/Tree.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAG1D,OAAO,EAAY,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAE1D,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,IAAI,CAC7B,aAAa,CAAC,CAAC,CAAC,EAChB,MAAM,GAAG,OAAO,GAAG,WAAW,GAAG,gBAAgB,CAClD,GAAG;IACF,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3B,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,KAAK,IAAI,CAAC;IACnD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;;;;;;OAUG;IACH,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;CACrC,CAAC;AAgJF,wBAAgB,IAAI,CAAC,CAAC,EAAE,EACtB,KAAK,EACL,KAAK,EACL,SAAS,EACT,YAAmB,EACnB,SAAS,EAAE,mBAAmB,EAC9B,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,GAAG,SAAS,EACb,EAAE,SAAS,CAAC,CAAC,CAAC,2CAsJd"}