@health-samurai/react-components 0.0.0-alpha.2 → 0.0.0-alpha.21

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 (571) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +102 -1
  3. package/dist/bundle.css +2349 -754
  4. package/dist/src/components/button-dropdown.d.ts +10 -0
  5. package/dist/src/components/button-dropdown.d.ts.map +1 -0
  6. package/dist/src/components/button-dropdown.js +70 -0
  7. package/dist/src/components/button-dropdown.js.map +1 -0
  8. package/dist/src/components/button-dropdown.stories.js +48 -0
  9. package/dist/src/components/button-dropdown.stories.js.map +1 -0
  10. package/dist/src/components/code-editor/fhir-autocomplete.d.ts +70 -0
  11. package/dist/src/components/code-editor/fhir-autocomplete.d.ts.map +1 -0
  12. package/dist/src/components/code-editor/fhir-autocomplete.js +1850 -0
  13. package/dist/src/components/code-editor/fhir-autocomplete.js.map +1 -0
  14. package/dist/src/components/code-editor/fhir-autocomplete.test.js +1099 -0
  15. package/dist/src/components/code-editor/fhir-autocomplete.test.js.map +1 -0
  16. package/dist/src/components/code-editor/http/grammar/http.d.ts +3 -0
  17. package/dist/src/components/code-editor/http/grammar/http.d.ts.map +1 -0
  18. package/dist/src/components/code-editor/http/grammar/http.grammar +74 -0
  19. package/dist/src/components/code-editor/http/grammar/http.js +38 -0
  20. package/dist/src/components/code-editor/http/grammar/http.js.map +1 -0
  21. package/dist/src/components/code-editor/http/grammar/http.terms.d.ts +2 -0
  22. package/dist/src/components/code-editor/http/grammar/http.terms.d.ts.map +1 -0
  23. package/dist/src/components/code-editor/http/grammar/http.terms.js +4 -0
  24. package/dist/src/components/code-editor/http/grammar/http.terms.js.map +1 -0
  25. package/dist/src/components/code-editor/http/grammar/http.test.js +80 -0
  26. package/dist/src/components/code-editor/http/grammar/http.test.js.map +1 -0
  27. package/dist/src/components/code-editor/http/index.d.ts +12 -0
  28. package/dist/src/components/code-editor/http/index.d.ts.map +1 -0
  29. package/dist/src/components/code-editor/http/index.js +486 -0
  30. package/dist/src/components/code-editor/http/index.js.map +1 -0
  31. package/dist/src/components/code-editor/index.d.ts +39 -1
  32. package/dist/src/components/code-editor/index.d.ts.map +1 -1
  33. package/dist/src/components/code-editor/index.js +1792 -45
  34. package/dist/src/components/code-editor/index.js.map +1 -1
  35. package/dist/src/components/code-editor/json-ast.d.ts +46 -0
  36. package/dist/src/components/code-editor/json-ast.d.ts.map +1 -0
  37. package/dist/src/components/code-editor/json-ast.js +465 -0
  38. package/dist/src/components/code-editor/json-ast.js.map +1 -0
  39. package/dist/src/components/code-editor/json-ast.test.js +206 -0
  40. package/dist/src/components/code-editor/json-ast.test.js.map +1 -0
  41. package/dist/src/components/code-editor/sql-completion.d.ts +22 -0
  42. package/dist/src/components/code-editor/sql-completion.d.ts.map +1 -0
  43. package/dist/src/components/code-editor/sql-completion.js +897 -0
  44. package/dist/src/components/code-editor/sql-completion.js.map +1 -0
  45. package/dist/src/components/code-editor.stories.js +280 -3
  46. package/dist/src/components/code-editor.stories.js.map +1 -1
  47. package/dist/src/components/copy-icon.d.ts +5 -1
  48. package/dist/src/components/copy-icon.d.ts.map +1 -1
  49. package/dist/src/components/copy-icon.js +41 -3
  50. package/dist/src/components/copy-icon.js.map +1 -1
  51. package/dist/src/components/data-table.d.ts +9 -0
  52. package/dist/src/components/data-table.d.ts.map +1 -0
  53. package/dist/src/components/data-table.js +66 -0
  54. package/dist/src/components/data-table.js.map +1 -0
  55. package/dist/src/components/data-table.stories.js +240 -0
  56. package/dist/src/components/data-table.stories.js.map +1 -0
  57. package/dist/src/components/date-picker-input.d.ts +10 -0
  58. package/dist/src/components/date-picker-input.d.ts.map +1 -0
  59. package/dist/src/components/date-picker-input.js +90 -0
  60. package/dist/src/components/date-picker-input.js.map +1 -0
  61. package/dist/src/components/date-picker-input.stories.js +76 -0
  62. package/dist/src/components/date-picker-input.stories.js.map +1 -0
  63. package/dist/src/components/fhir-structure-view.d.ts +34 -0
  64. package/dist/src/components/fhir-structure-view.d.ts.map +1 -0
  65. package/dist/src/components/fhir-structure-view.js +230 -0
  66. package/dist/src/components/fhir-structure-view.js.map +1 -0
  67. package/dist/src/components/fhir-structure-view.stories.js +447 -0
  68. package/dist/src/components/fhir-structure-view.stories.js.map +1 -0
  69. package/dist/src/components/icon-button.d.ts +12 -0
  70. package/dist/src/components/icon-button.d.ts.map +1 -0
  71. package/dist/src/components/icon-button.js +41 -0
  72. package/dist/src/components/icon-button.js.map +1 -0
  73. package/dist/src/components/icon-button.stories.js +157 -0
  74. package/dist/src/components/icon-button.stories.js.map +1 -0
  75. package/dist/src/components/operation-outcome-view.d.ts +27 -0
  76. package/dist/src/components/operation-outcome-view.d.ts.map +1 -0
  77. package/dist/src/components/operation-outcome-view.js +198 -0
  78. package/dist/src/components/operation-outcome-view.js.map +1 -0
  79. package/dist/src/components/operation-outcome-view.stories.js +207 -0
  80. package/dist/src/components/operation-outcome-view.stories.js.map +1 -0
  81. package/dist/src/components/request-line-editor.d.ts +13 -35
  82. package/dist/src/components/request-line-editor.d.ts.map +1 -1
  83. package/dist/src/components/request-line-editor.js +73 -49
  84. package/dist/src/components/request-line-editor.js.map +1 -1
  85. package/dist/src/components/request-line-editor.stories.js +17 -53
  86. package/dist/src/components/request-line-editor.stories.js.map +1 -1
  87. package/dist/src/components/sandbox.d.ts +13 -0
  88. package/dist/src/components/sandbox.d.ts.map +1 -0
  89. package/dist/src/components/sandbox.js +107 -0
  90. package/dist/src/components/sandbox.js.map +1 -0
  91. package/dist/src/components/sandbox.stories.js +126 -0
  92. package/dist/src/components/sandbox.stories.js.map +1 -0
  93. package/dist/src/components/segment-control.d.ts +13 -0
  94. package/dist/src/components/segment-control.d.ts.map +1 -0
  95. package/dist/src/components/segment-control.js +33 -0
  96. package/dist/src/components/segment-control.js.map +1 -0
  97. package/dist/src/components/segment-control.stories.js +68 -0
  98. package/dist/src/components/segment-control.stories.js.map +1 -0
  99. package/dist/src/components/split-button.d.ts +12 -0
  100. package/dist/src/components/split-button.d.ts.map +1 -0
  101. package/dist/src/components/split-button.js +33 -0
  102. package/dist/src/components/split-button.js.map +1 -0
  103. package/dist/src/components/split-button.stories.js +84 -0
  104. package/dist/src/components/split-button.stories.js.map +1 -0
  105. package/dist/src/components/tag.d.ts +16 -0
  106. package/dist/src/components/tag.d.ts.map +1 -0
  107. package/dist/src/components/tag.js +198 -0
  108. package/dist/src/components/tag.js.map +1 -0
  109. package/dist/src/components/tag.stories.js +459 -0
  110. package/dist/src/components/tag.stories.js.map +1 -0
  111. package/dist/src/components/tile.d.ts +15 -0
  112. package/dist/src/components/tile.d.ts.map +1 -0
  113. package/dist/src/components/tile.js +76 -0
  114. package/dist/src/components/tile.js.map +1 -0
  115. package/dist/src/components/tile.stories.js +167 -0
  116. package/dist/src/components/tile.stories.js.map +1 -0
  117. package/dist/src/components/toolbar.d.ts +18 -0
  118. package/dist/src/components/toolbar.d.ts.map +1 -0
  119. package/dist/src/components/toolbar.js +61 -0
  120. package/dist/src/components/toolbar.js.map +1 -0
  121. package/dist/src/components/toolbar.stories.js +69 -0
  122. package/dist/src/components/toolbar.stories.js.map +1 -0
  123. package/dist/src/components/tree-view.d.ts +47 -0
  124. package/dist/src/components/tree-view.d.ts.map +1 -0
  125. package/dist/src/components/tree-view.js +122 -0
  126. package/dist/src/components/tree-view.js.map +1 -0
  127. package/dist/src/components/tree-view.stories.js +283 -0
  128. package/dist/src/components/tree-view.stories.js.map +1 -0
  129. package/dist/src/icons.d.ts +11 -0
  130. package/dist/src/icons.d.ts.map +1 -0
  131. package/dist/src/icons.js +328 -0
  132. package/dist/src/icons.js.map +1 -0
  133. package/dist/src/index.css +358 -74
  134. package/dist/src/index.d.ts +17 -1
  135. package/dist/src/index.d.ts.map +1 -1
  136. package/dist/src/index.js +17 -1
  137. package/dist/src/index.js.map +1 -1
  138. package/dist/src/shadcn/components/ui/accordion.d.ts +2 -2
  139. package/dist/src/shadcn/components/ui/accordion.d.ts.map +1 -1
  140. package/dist/src/shadcn/components/ui/accordion.js +35 -9
  141. package/dist/src/shadcn/components/ui/accordion.js.map +1 -1
  142. package/dist/src/shadcn/components/ui/alert-dialog.d.ts +12 -4
  143. package/dist/src/shadcn/components/ui/alert-dialog.d.ts.map +1 -1
  144. package/dist/src/shadcn/components/ui/alert-dialog.js +128 -18
  145. package/dist/src/shadcn/components/ui/alert-dialog.js.map +1 -1
  146. package/dist/src/shadcn/components/ui/alert-dialog.stories.js +269 -19
  147. package/dist/src/shadcn/components/ui/alert-dialog.stories.js.map +1 -1
  148. package/dist/src/shadcn/components/ui/alert.d.ts +29 -6
  149. package/dist/src/shadcn/components/ui/alert.d.ts.map +1 -1
  150. package/dist/src/shadcn/components/ui/alert.js +50 -19
  151. package/dist/src/shadcn/components/ui/alert.js.map +1 -1
  152. package/dist/src/shadcn/components/ui/alert.stories.js +140 -36
  153. package/dist/src/shadcn/components/ui/alert.stories.js.map +1 -1
  154. package/dist/src/shadcn/components/ui/aspect-ratio.d.ts.map +1 -1
  155. package/dist/src/shadcn/components/ui/aspect-ratio.js +1 -0
  156. package/dist/src/shadcn/components/ui/aspect-ratio.js.map +1 -1
  157. package/dist/src/shadcn/components/ui/avatar.d.ts.map +1 -1
  158. package/dist/src/shadcn/components/ui/avatar.js +4 -3
  159. package/dist/src/shadcn/components/ui/avatar.js.map +1 -1
  160. package/dist/src/shadcn/components/ui/avatar.stories.js +68 -2
  161. package/dist/src/shadcn/components/ui/avatar.stories.js.map +1 -1
  162. package/dist/src/shadcn/components/ui/badge.d.ts +1 -1
  163. package/dist/src/shadcn/components/ui/badge.d.ts.map +1 -1
  164. package/dist/src/shadcn/components/ui/badge.js +16 -5
  165. package/dist/src/shadcn/components/ui/badge.js.map +1 -1
  166. package/dist/src/shadcn/components/ui/breadcrumb.d.ts +5 -2
  167. package/dist/src/shadcn/components/ui/breadcrumb.d.ts.map +1 -1
  168. package/dist/src/shadcn/components/ui/breadcrumb.js +98 -13
  169. package/dist/src/shadcn/components/ui/breadcrumb.js.map +1 -1
  170. package/dist/src/shadcn/components/ui/breadcrumb.stories.js +205 -45
  171. package/dist/src/shadcn/components/ui/breadcrumb.stories.js.map +1 -1
  172. package/dist/src/shadcn/components/ui/button.d.ts.map +1 -1
  173. package/dist/src/shadcn/components/ui/button.js +65 -11
  174. package/dist/src/shadcn/components/ui/button.js.map +1 -1
  175. package/dist/src/shadcn/components/ui/button.stories.js +99 -17
  176. package/dist/src/shadcn/components/ui/button.stories.js.map +1 -1
  177. package/dist/src/shadcn/components/ui/calendar.d.ts +1 -1
  178. package/dist/src/shadcn/components/ui/calendar.d.ts.map +1 -1
  179. package/dist/src/shadcn/components/ui/calendar.js +1 -0
  180. package/dist/src/shadcn/components/ui/calendar.js.map +1 -1
  181. package/dist/src/shadcn/components/ui/card.d.ts +5 -1
  182. package/dist/src/shadcn/components/ui/card.d.ts.map +1 -1
  183. package/dist/src/shadcn/components/ui/card.js +28 -7
  184. package/dist/src/shadcn/components/ui/card.js.map +1 -1
  185. package/dist/src/shadcn/components/ui/card.stories.js +23 -2
  186. package/dist/src/shadcn/components/ui/card.stories.js.map +1 -1
  187. package/dist/src/shadcn/components/ui/carousel.d.ts +1 -1
  188. package/dist/src/shadcn/components/ui/carousel.d.ts.map +1 -1
  189. package/dist/src/shadcn/components/ui/carousel.js +1 -0
  190. package/dist/src/shadcn/components/ui/carousel.js.map +1 -1
  191. package/dist/src/shadcn/components/ui/chart.d.ts +5 -5
  192. package/dist/src/shadcn/components/ui/chart.d.ts.map +1 -1
  193. package/dist/src/shadcn/components/ui/chart.js +4 -3
  194. package/dist/src/shadcn/components/ui/chart.js.map +1 -1
  195. package/dist/src/shadcn/components/ui/checkbox.d.ts +5 -1
  196. package/dist/src/shadcn/components/ui/checkbox.d.ts.map +1 -1
  197. package/dist/src/shadcn/components/ui/checkbox.js +46 -6
  198. package/dist/src/shadcn/components/ui/checkbox.js.map +1 -1
  199. package/dist/src/shadcn/components/ui/checkbox.stories.js +156 -46
  200. package/dist/src/shadcn/components/ui/checkbox.stories.js.map +1 -1
  201. package/dist/src/shadcn/components/ui/combobox.d.ts +29 -0
  202. package/dist/src/shadcn/components/ui/combobox.d.ts.map +1 -0
  203. package/dist/src/shadcn/components/ui/combobox.js +226 -0
  204. package/dist/src/shadcn/components/ui/combobox.js.map +1 -0
  205. package/dist/src/shadcn/components/ui/combobox.stories.js +167 -0
  206. package/dist/src/shadcn/components/ui/combobox.stories.js.map +1 -0
  207. package/dist/src/shadcn/components/ui/command.d.ts +4 -2
  208. package/dist/src/shadcn/components/ui/command.d.ts.map +1 -1
  209. package/dist/src/shadcn/components/ui/command.js +75 -13
  210. package/dist/src/shadcn/components/ui/command.js.map +1 -1
  211. package/dist/src/shadcn/components/ui/command.stories.js +277 -57
  212. package/dist/src/shadcn/components/ui/command.stories.js.map +1 -1
  213. package/dist/src/shadcn/components/ui/context-menu.d.ts +7 -3
  214. package/dist/src/shadcn/components/ui/context-menu.d.ts.map +1 -1
  215. package/dist/src/shadcn/components/ui/context-menu.js +120 -13
  216. package/dist/src/shadcn/components/ui/context-menu.js.map +1 -1
  217. package/dist/src/shadcn/components/ui/dialog.d.ts.map +1 -1
  218. package/dist/src/shadcn/components/ui/dialog.js +35 -7
  219. package/dist/src/shadcn/components/ui/dialog.js.map +1 -1
  220. package/dist/src/shadcn/components/ui/drawer.d.ts.map +1 -1
  221. package/dist/src/shadcn/components/ui/drawer.js +27 -5
  222. package/dist/src/shadcn/components/ui/drawer.js.map +1 -1
  223. package/dist/src/shadcn/components/ui/dropdown-menu.d.ts +7 -3
  224. package/dist/src/shadcn/components/ui/dropdown-menu.d.ts.map +1 -1
  225. package/dist/src/shadcn/components/ui/dropdown-menu.js +122 -14
  226. package/dist/src/shadcn/components/ui/dropdown-menu.js.map +1 -1
  227. package/dist/src/shadcn/components/ui/dropdown-menu.stories.js +22 -5
  228. package/dist/src/shadcn/components/ui/dropdown-menu.stories.js.map +1 -1
  229. package/dist/src/shadcn/components/ui/form.d.ts +2 -2
  230. package/dist/src/shadcn/components/ui/form.d.ts.map +1 -1
  231. package/dist/src/shadcn/components/ui/form.js +17 -8
  232. package/dist/src/shadcn/components/ui/form.js.map +1 -1
  233. package/dist/src/shadcn/components/ui/hover-card.d.ts.map +1 -1
  234. package/dist/src/shadcn/components/ui/hover-card.js +2 -1
  235. package/dist/src/shadcn/components/ui/hover-card.js.map +1 -1
  236. package/dist/src/shadcn/components/ui/input-otp.d.ts.map +1 -1
  237. package/dist/src/shadcn/components/ui/input-otp.js +1 -0
  238. package/dist/src/shadcn/components/ui/input-otp.js.map +1 -1
  239. package/dist/src/shadcn/components/ui/input.d.ts +3 -1
  240. package/dist/src/shadcn/components/ui/input.d.ts.map +1 -1
  241. package/dist/src/shadcn/components/ui/input.js +126 -17
  242. package/dist/src/shadcn/components/ui/input.js.map +1 -1
  243. package/dist/src/shadcn/components/ui/input.stories.js +218 -29
  244. package/dist/src/shadcn/components/ui/input.stories.js.map +1 -1
  245. package/dist/src/shadcn/components/ui/label.d.ts.map +1 -1
  246. package/dist/src/shadcn/components/ui/label.js +9 -1
  247. package/dist/src/shadcn/components/ui/label.js.map +1 -1
  248. package/dist/src/shadcn/components/ui/menubar.d.ts.map +1 -1
  249. package/dist/src/shadcn/components/ui/menubar.js +35 -13
  250. package/dist/src/shadcn/components/ui/menubar.js.map +1 -1
  251. package/dist/src/shadcn/components/ui/pagination.d.ts +9 -2
  252. package/dist/src/shadcn/components/ui/pagination.d.ts.map +1 -1
  253. package/dist/src/shadcn/components/ui/pagination.js +41 -24
  254. package/dist/src/shadcn/components/ui/pagination.js.map +1 -1
  255. package/dist/src/shadcn/components/ui/pagination.stories.js +44 -37
  256. package/dist/src/shadcn/components/ui/pagination.stories.js.map +1 -1
  257. package/dist/src/shadcn/components/ui/popover.d.ts.map +1 -1
  258. package/dist/src/shadcn/components/ui/popover.js +13 -1
  259. package/dist/src/shadcn/components/ui/popover.js.map +1 -1
  260. package/dist/src/shadcn/components/ui/progress.d.ts.map +1 -1
  261. package/dist/src/shadcn/components/ui/progress.js +6 -2
  262. package/dist/src/shadcn/components/ui/progress.js.map +1 -1
  263. package/dist/src/shadcn/components/ui/radio-button-group.d.ts +21 -0
  264. package/dist/src/shadcn/components/ui/radio-button-group.d.ts.map +1 -0
  265. package/dist/src/shadcn/components/ui/radio-button-group.js +148 -0
  266. package/dist/src/shadcn/components/ui/radio-button-group.js.map +1 -0
  267. package/dist/src/shadcn/components/ui/radio-button-group.stories.js +283 -0
  268. package/dist/src/shadcn/components/ui/radio-button-group.stories.js.map +1 -0
  269. package/dist/src/shadcn/components/ui/radio-group.d.ts +5 -1
  270. package/dist/src/shadcn/components/ui/radio-group.d.ts.map +1 -1
  271. package/dist/src/shadcn/components/ui/radio-group.js +40 -7
  272. package/dist/src/shadcn/components/ui/radio-group.js.map +1 -1
  273. package/dist/src/shadcn/components/ui/radio-group.stories.js +107 -32
  274. package/dist/src/shadcn/components/ui/radio-group.stories.js.map +1 -1
  275. package/dist/src/shadcn/components/ui/resizable.d.ts.map +1 -1
  276. package/dist/src/shadcn/components/ui/resizable.js +2 -1
  277. package/dist/src/shadcn/components/ui/resizable.js.map +1 -1
  278. package/dist/src/shadcn/components/ui/resizable.stories.js +2 -2
  279. package/dist/src/shadcn/components/ui/resizable.stories.js.map +1 -1
  280. package/dist/src/shadcn/components/ui/scroll-area.d.ts.map +1 -1
  281. package/dist/src/shadcn/components/ui/scroll-area.js +10 -3
  282. package/dist/src/shadcn/components/ui/scroll-area.js.map +1 -1
  283. package/dist/src/shadcn/components/ui/select.d.ts +1 -2
  284. package/dist/src/shadcn/components/ui/select.d.ts.map +1 -1
  285. package/dist/src/shadcn/components/ui/select.js +49 -19
  286. package/dist/src/shadcn/components/ui/select.js.map +1 -1
  287. package/dist/src/shadcn/components/ui/select.stories.js +193 -70
  288. package/dist/src/shadcn/components/ui/select.stories.js.map +1 -1
  289. package/dist/src/shadcn/components/ui/separator.d.ts.map +1 -1
  290. package/dist/src/shadcn/components/ui/separator.js +8 -1
  291. package/dist/src/shadcn/components/ui/separator.js.map +1 -1
  292. package/dist/src/shadcn/components/ui/sheet.js +1 -1
  293. package/dist/src/shadcn/components/ui/sheet.js.map +1 -1
  294. package/dist/src/shadcn/components/ui/sidebar.d.ts +4 -4
  295. package/dist/src/shadcn/components/ui/sidebar.d.ts.map +1 -1
  296. package/dist/src/shadcn/components/ui/sidebar.js +21 -6
  297. package/dist/src/shadcn/components/ui/sidebar.js.map +1 -1
  298. package/dist/src/shadcn/components/ui/skeleton.d.ts.map +1 -1
  299. package/dist/src/shadcn/components/ui/skeleton.js +3 -1
  300. package/dist/src/shadcn/components/ui/skeleton.js.map +1 -1
  301. package/dist/src/shadcn/components/ui/slider.d.ts.map +1 -1
  302. package/dist/src/shadcn/components/ui/slider.js +35 -4
  303. package/dist/src/shadcn/components/ui/slider.js.map +1 -1
  304. package/dist/src/shadcn/components/ui/sonner.d.ts +24 -2
  305. package/dist/src/shadcn/components/ui/sonner.d.ts.map +1 -1
  306. package/dist/src/shadcn/components/ui/sonner.js +127 -9
  307. package/dist/src/shadcn/components/ui/sonner.js.map +1 -1
  308. package/dist/src/shadcn/components/ui/sonner.stories.js +251 -12
  309. package/dist/src/shadcn/components/ui/sonner.stories.js.map +1 -1
  310. package/dist/src/shadcn/components/ui/switch.d.ts +7 -1
  311. package/dist/src/shadcn/components/ui/switch.d.ts.map +1 -1
  312. package/dist/src/shadcn/components/ui/switch.js +55 -3
  313. package/dist/src/shadcn/components/ui/switch.js.map +1 -1
  314. package/dist/src/shadcn/components/ui/switch.stories.js +84 -9
  315. package/dist/src/shadcn/components/ui/switch.stories.js.map +1 -1
  316. package/dist/src/shadcn/components/ui/table.d.ts +23 -6
  317. package/dist/src/shadcn/components/ui/table.d.ts.map +1 -1
  318. package/dist/src/shadcn/components/ui/table.js +65 -20
  319. package/dist/src/shadcn/components/ui/table.js.map +1 -1
  320. package/dist/src/shadcn/components/ui/table.stories.js +217 -97
  321. package/dist/src/shadcn/components/ui/table.stories.js.map +1 -1
  322. package/dist/src/shadcn/components/ui/tabs.d.ts +30 -5
  323. package/dist/src/shadcn/components/ui/tabs.d.ts.map +1 -1
  324. package/dist/src/shadcn/components/ui/tabs.js +470 -23
  325. package/dist/src/shadcn/components/ui/tabs.js.map +1 -1
  326. package/dist/src/shadcn/components/ui/tabs.stories.js +405 -181
  327. package/dist/src/shadcn/components/ui/tabs.stories.js.map +1 -1
  328. package/dist/src/shadcn/components/ui/textarea.d.ts +8 -1
  329. package/dist/src/shadcn/components/ui/textarea.d.ts.map +1 -1
  330. package/dist/src/shadcn/components/ui/textarea.js +30 -2
  331. package/dist/src/shadcn/components/ui/textarea.js.map +1 -1
  332. package/dist/src/shadcn/components/ui/textarea.stories.js +85 -4
  333. package/dist/src/shadcn/components/ui/textarea.stories.js.map +1 -1
  334. package/dist/src/shadcn/components/ui/toggle-group.d.ts +3 -3
  335. package/dist/src/shadcn/components/ui/toggle-group.d.ts.map +1 -1
  336. package/dist/src/shadcn/components/ui/toggle-group.js +14 -12
  337. package/dist/src/shadcn/components/ui/toggle-group.js.map +1 -1
  338. package/dist/src/shadcn/components/ui/toggle.d.ts +3 -4
  339. package/dist/src/shadcn/components/ui/toggle.d.ts.map +1 -1
  340. package/dist/src/shadcn/components/ui/toggle.js +44 -16
  341. package/dist/src/shadcn/components/ui/toggle.js.map +1 -1
  342. package/dist/src/shadcn/components/ui/toggle.stories.js +130 -7
  343. package/dist/src/shadcn/components/ui/toggle.stories.js.map +1 -1
  344. package/dist/src/shadcn/components/ui/tooltip.d.ts.map +1 -1
  345. package/dist/src/shadcn/components/ui/tooltip.js +12 -1
  346. package/dist/src/shadcn/components/ui/tooltip.js.map +1 -1
  347. package/dist/src/shadcn/components/ui/tree.d.ts +29 -0
  348. package/dist/src/shadcn/components/ui/tree.d.ts.map +1 -0
  349. package/dist/src/shadcn/components/ui/tree.js +135 -0
  350. package/dist/src/shadcn/components/ui/tree.js.map +1 -0
  351. package/dist/src/shadcn/shadcn.css +4 -4
  352. package/dist/src/tokens.css +50 -20
  353. package/dist/src/typography.css +78 -15
  354. package/package.json +84 -64
  355. package/src/components/button-dropdown.stories.tsx +41 -0
  356. package/src/components/button-dropdown.tsx +97 -0
  357. package/src/components/code-editor/fhir-autocomplete.test.ts +993 -0
  358. package/src/components/code-editor/fhir-autocomplete.ts +2322 -0
  359. package/src/components/code-editor/http/grammar/http.grammar +74 -0
  360. package/src/components/code-editor/http/grammar/http.terms.ts +9 -0
  361. package/src/components/code-editor/http/grammar/http.test.ts +110 -0
  362. package/src/components/code-editor/http/grammar/http.ts +21 -0
  363. package/src/components/code-editor/http/index.ts +424 -0
  364. package/src/components/code-editor/index.tsx +1944 -42
  365. package/src/components/code-editor/json-ast.test.ts +230 -0
  366. package/src/components/code-editor/json-ast.ts +590 -0
  367. package/src/components/code-editor/sql-completion.ts +1112 -0
  368. package/src/components/code-editor.stories.tsx +325 -2
  369. package/src/components/copy-icon.tsx +57 -3
  370. package/src/components/data-table.stories.tsx +91 -0
  371. package/src/components/data-table.tsx +126 -0
  372. package/src/components/date-picker-input.stories.tsx +79 -0
  373. package/src/components/date-picker-input.tsx +104 -0
  374. package/src/components/fhir-structure-view.stories.tsx +439 -0
  375. package/src/components/fhir-structure-view.tsx +233 -0
  376. package/src/components/icon-button.stories.tsx +86 -0
  377. package/src/components/icon-button.tsx +57 -0
  378. package/src/components/operation-outcome-view.stories.tsx +163 -0
  379. package/src/components/operation-outcome-view.tsx +254 -0
  380. package/src/components/request-line-editor.stories.tsx +17 -27
  381. package/src/components/request-line-editor.tsx +103 -61
  382. package/src/components/sandbox.stories.tsx +131 -0
  383. package/src/components/sandbox.tsx +191 -0
  384. package/src/components/segment-control.stories.tsx +61 -0
  385. package/src/components/segment-control.tsx +83 -0
  386. package/src/components/split-button.stories.tsx +68 -0
  387. package/src/components/split-button.tsx +74 -0
  388. package/src/components/tag.stories.tsx +371 -0
  389. package/src/components/tag.tsx +236 -0
  390. package/src/components/tile.stories.tsx +149 -0
  391. package/src/components/tile.tsx +105 -0
  392. package/src/components/toolbar.stories.tsx +64 -0
  393. package/src/components/toolbar.tsx +98 -0
  394. package/src/components/tree-view.stories.tsx +265 -0
  395. package/src/components/tree-view.tsx +246 -0
  396. package/src/icons.tsx +331 -0
  397. package/src/index.css +358 -74
  398. package/src/index.tsx +17 -3
  399. package/src/shadcn/components/ui/accordion.tsx +91 -10
  400. package/src/shadcn/components/ui/alert-dialog.stories.tsx +209 -15
  401. package/src/shadcn/components/ui/alert-dialog.tsx +236 -26
  402. package/src/shadcn/components/ui/alert.stories.tsx +120 -21
  403. package/src/shadcn/components/ui/alert.tsx +125 -28
  404. package/src/shadcn/components/ui/aspect-ratio.tsx +1 -0
  405. package/src/shadcn/components/ui/avatar.stories.tsx +74 -1
  406. package/src/shadcn/components/ui/avatar.tsx +22 -6
  407. package/src/shadcn/components/ui/badge.tsx +67 -18
  408. package/src/shadcn/components/ui/breadcrumb.stories.tsx +161 -41
  409. package/src/shadcn/components/ui/breadcrumb.tsx +172 -23
  410. package/src/shadcn/components/ui/button.stories.tsx +106 -18
  411. package/src/shadcn/components/ui/button.tsx +151 -55
  412. package/src/shadcn/components/ui/calendar.tsx +1 -0
  413. package/src/shadcn/components/ui/card.stories.tsx +17 -3
  414. package/src/shadcn/components/ui/card.tsx +89 -14
  415. package/src/shadcn/components/ui/carousel.tsx +1 -0
  416. package/src/shadcn/components/ui/chart.tsx +9 -5
  417. package/src/shadcn/components/ui/checkbox.stories.tsx +78 -30
  418. package/src/shadcn/components/ui/checkbox.tsx +91 -8
  419. package/src/shadcn/components/ui/combobox.stories.tsx +148 -0
  420. package/src/shadcn/components/ui/combobox.tsx +324 -0
  421. package/src/shadcn/components/ui/command.stories.tsx +184 -39
  422. package/src/shadcn/components/ui/command.tsx +218 -37
  423. package/src/shadcn/components/ui/context-menu.tsx +333 -40
  424. package/src/shadcn/components/ui/dialog.tsx +101 -13
  425. package/src/shadcn/components/ui/drawer.tsx +94 -18
  426. package/src/shadcn/components/ui/dropdown-menu.stories.tsx +18 -2
  427. package/src/shadcn/components/ui/dropdown-menu.tsx +334 -68
  428. package/src/shadcn/components/ui/form.tsx +22 -11
  429. package/src/shadcn/components/ui/hover-card.tsx +2 -1
  430. package/src/shadcn/components/ui/input-otp.tsx +1 -0
  431. package/src/shadcn/components/ui/input.stories.tsx +235 -27
  432. package/src/shadcn/components/ui/input.tsx +400 -29
  433. package/src/shadcn/components/ui/label.tsx +22 -4
  434. package/src/shadcn/components/ui/menubar.tsx +188 -43
  435. package/src/shadcn/components/ui/pagination.stories.tsx +8 -2
  436. package/src/shadcn/components/ui/pagination.tsx +65 -8
  437. package/src/shadcn/components/ui/popover.tsx +36 -4
  438. package/src/shadcn/components/ui/progress.tsx +21 -5
  439. package/src/shadcn/components/ui/radio-button-group.stories.tsx +247 -0
  440. package/src/shadcn/components/ui/radio-button-group.tsx +188 -0
  441. package/src/shadcn/components/ui/radio-group.stories.tsx +70 -14
  442. package/src/shadcn/components/ui/radio-group.tsx +85 -9
  443. package/src/shadcn/components/ui/resizable.stories.tsx +2 -2
  444. package/src/shadcn/components/ui/resizable.tsx +2 -1
  445. package/src/shadcn/components/ui/scroll-area.tsx +34 -5
  446. package/src/shadcn/components/ui/select.stories.tsx +108 -32
  447. package/src/shadcn/components/ui/select.tsx +182 -36
  448. package/src/shadcn/components/ui/separator.tsx +16 -5
  449. package/src/shadcn/components/ui/sheet.tsx +1 -1
  450. package/src/shadcn/components/ui/sidebar.tsx +69 -26
  451. package/src/shadcn/components/ui/skeleton.tsx +4 -1
  452. package/src/shadcn/components/ui/slider.tsx +83 -11
  453. package/src/shadcn/components/ui/sonner.stories.tsx +238 -17
  454. package/src/shadcn/components/ui/sonner.tsx +254 -11
  455. package/src/shadcn/components/ui/switch.stories.tsx +52 -5
  456. package/src/shadcn/components/ui/switch.tsx +92 -7
  457. package/src/shadcn/components/ui/table.stories.tsx +252 -72
  458. package/src/shadcn/components/ui/table.tsx +204 -26
  459. package/src/shadcn/components/ui/tabs.stories.tsx +235 -123
  460. package/src/shadcn/components/ui/tabs.tsx +694 -36
  461. package/src/shadcn/components/ui/textarea.stories.tsx +94 -2
  462. package/src/shadcn/components/ui/textarea.tsx +70 -5
  463. package/src/shadcn/components/ui/toggle-group.tsx +35 -13
  464. package/src/shadcn/components/ui/toggle.stories.tsx +92 -5
  465. package/src/shadcn/components/ui/toggle.tsx +96 -23
  466. package/src/shadcn/components/ui/tooltip.tsx +34 -8
  467. package/src/shadcn/components/ui/tree.tsx +257 -0
  468. package/src/shadcn/shadcn.css +4 -4
  469. package/src/tokens.css +50 -20
  470. package/src/typography.css +78 -15
  471. package/dist/src/components/code-editor.stories.d.ts +0 -7
  472. package/dist/src/components/code-editor.stories.d.ts.map +0 -1
  473. package/dist/src/components/request-line-editor.stories.d.ts +0 -11
  474. package/dist/src/components/request-line-editor.stories.d.ts.map +0 -1
  475. package/dist/src/index.stories.d.ts +0 -14
  476. package/dist/src/index.stories.d.ts.map +0 -1
  477. package/dist/src/index.stories.js +0 -19
  478. package/dist/src/index.stories.js.map +0 -1
  479. package/dist/src/shadcn/components/ui/accordion.stories.d.ts +0 -8
  480. package/dist/src/shadcn/components/ui/accordion.stories.d.ts.map +0 -1
  481. package/dist/src/shadcn/components/ui/alert-dialog.stories.d.ts +0 -8
  482. package/dist/src/shadcn/components/ui/alert-dialog.stories.d.ts.map +0 -1
  483. package/dist/src/shadcn/components/ui/alert.stories.d.ts +0 -8
  484. package/dist/src/shadcn/components/ui/alert.stories.d.ts.map +0 -1
  485. package/dist/src/shadcn/components/ui/aspect-ratio.stories.d.ts +0 -8
  486. package/dist/src/shadcn/components/ui/aspect-ratio.stories.d.ts.map +0 -1
  487. package/dist/src/shadcn/components/ui/avatar.stories.d.ts +0 -8
  488. package/dist/src/shadcn/components/ui/avatar.stories.d.ts.map +0 -1
  489. package/dist/src/shadcn/components/ui/badge.stories.d.ts +0 -8
  490. package/dist/src/shadcn/components/ui/badge.stories.d.ts.map +0 -1
  491. package/dist/src/shadcn/components/ui/breadcrumb.stories.d.ts +0 -8
  492. package/dist/src/shadcn/components/ui/breadcrumb.stories.d.ts.map +0 -1
  493. package/dist/src/shadcn/components/ui/button.stories.d.ts +0 -23
  494. package/dist/src/shadcn/components/ui/button.stories.d.ts.map +0 -1
  495. package/dist/src/shadcn/components/ui/calendar.stories.d.ts +0 -8
  496. package/dist/src/shadcn/components/ui/calendar.stories.d.ts.map +0 -1
  497. package/dist/src/shadcn/components/ui/card.stories.d.ts +0 -8
  498. package/dist/src/shadcn/components/ui/card.stories.d.ts.map +0 -1
  499. package/dist/src/shadcn/components/ui/carousel.stories.d.ts +0 -8
  500. package/dist/src/shadcn/components/ui/carousel.stories.d.ts.map +0 -1
  501. package/dist/src/shadcn/components/ui/chart.stories.d.ts +0 -8
  502. package/dist/src/shadcn/components/ui/chart.stories.d.ts.map +0 -1
  503. package/dist/src/shadcn/components/ui/checkbox.stories.d.ts +0 -8
  504. package/dist/src/shadcn/components/ui/checkbox.stories.d.ts.map +0 -1
  505. package/dist/src/shadcn/components/ui/collapsible.stories.d.ts +0 -8
  506. package/dist/src/shadcn/components/ui/collapsible.stories.d.ts.map +0 -1
  507. package/dist/src/shadcn/components/ui/command.stories.d.ts +0 -8
  508. package/dist/src/shadcn/components/ui/command.stories.d.ts.map +0 -1
  509. package/dist/src/shadcn/components/ui/context-menu.stories.d.ts +0 -8
  510. package/dist/src/shadcn/components/ui/context-menu.stories.d.ts.map +0 -1
  511. package/dist/src/shadcn/components/ui/dialog.stories.d.ts +0 -8
  512. package/dist/src/shadcn/components/ui/dialog.stories.d.ts.map +0 -1
  513. package/dist/src/shadcn/components/ui/drawer.stories.d.ts +0 -8
  514. package/dist/src/shadcn/components/ui/drawer.stories.d.ts.map +0 -1
  515. package/dist/src/shadcn/components/ui/dropdown-menu.stories.d.ts +0 -8
  516. package/dist/src/shadcn/components/ui/dropdown-menu.stories.d.ts.map +0 -1
  517. package/dist/src/shadcn/components/ui/form.stories.d.ts +0 -8
  518. package/dist/src/shadcn/components/ui/form.stories.d.ts.map +0 -1
  519. package/dist/src/shadcn/components/ui/hover-card.stories.d.ts +0 -8
  520. package/dist/src/shadcn/components/ui/hover-card.stories.d.ts.map +0 -1
  521. package/dist/src/shadcn/components/ui/input-otp.stories.d.ts +0 -8
  522. package/dist/src/shadcn/components/ui/input-otp.stories.d.ts.map +0 -1
  523. package/dist/src/shadcn/components/ui/input.stories.d.ts +0 -18
  524. package/dist/src/shadcn/components/ui/input.stories.d.ts.map +0 -1
  525. package/dist/src/shadcn/components/ui/label.stories.d.ts +0 -8
  526. package/dist/src/shadcn/components/ui/label.stories.d.ts.map +0 -1
  527. package/dist/src/shadcn/components/ui/menubar.stories.d.ts +0 -8
  528. package/dist/src/shadcn/components/ui/menubar.stories.d.ts.map +0 -1
  529. package/dist/src/shadcn/components/ui/navigation-menu.stories.d.ts +0 -8
  530. package/dist/src/shadcn/components/ui/navigation-menu.stories.d.ts.map +0 -1
  531. package/dist/src/shadcn/components/ui/pagination.stories.d.ts +0 -8
  532. package/dist/src/shadcn/components/ui/pagination.stories.d.ts.map +0 -1
  533. package/dist/src/shadcn/components/ui/popover.stories.d.ts +0 -8
  534. package/dist/src/shadcn/components/ui/popover.stories.d.ts.map +0 -1
  535. package/dist/src/shadcn/components/ui/progress.stories.d.ts +0 -8
  536. package/dist/src/shadcn/components/ui/progress.stories.d.ts.map +0 -1
  537. package/dist/src/shadcn/components/ui/radio-group.stories.d.ts +0 -8
  538. package/dist/src/shadcn/components/ui/radio-group.stories.d.ts.map +0 -1
  539. package/dist/src/shadcn/components/ui/resizable.stories.d.ts +0 -8
  540. package/dist/src/shadcn/components/ui/resizable.stories.d.ts.map +0 -1
  541. package/dist/src/shadcn/components/ui/scroll-area.stories.d.ts +0 -8
  542. package/dist/src/shadcn/components/ui/scroll-area.stories.d.ts.map +0 -1
  543. package/dist/src/shadcn/components/ui/select.stories.d.ts +0 -11
  544. package/dist/src/shadcn/components/ui/select.stories.d.ts.map +0 -1
  545. package/dist/src/shadcn/components/ui/separator.stories.d.ts +0 -8
  546. package/dist/src/shadcn/components/ui/separator.stories.d.ts.map +0 -1
  547. package/dist/src/shadcn/components/ui/sheet.stories.d.ts +0 -8
  548. package/dist/src/shadcn/components/ui/sheet.stories.d.ts.map +0 -1
  549. package/dist/src/shadcn/components/ui/sidebar.stories.d.ts +0 -11
  550. package/dist/src/shadcn/components/ui/sidebar.stories.d.ts.map +0 -1
  551. package/dist/src/shadcn/components/ui/skeleton.stories.d.ts +0 -8
  552. package/dist/src/shadcn/components/ui/skeleton.stories.d.ts.map +0 -1
  553. package/dist/src/shadcn/components/ui/slider.stories.d.ts +0 -8
  554. package/dist/src/shadcn/components/ui/slider.stories.d.ts.map +0 -1
  555. package/dist/src/shadcn/components/ui/sonner.stories.d.ts +0 -8
  556. package/dist/src/shadcn/components/ui/sonner.stories.d.ts.map +0 -1
  557. package/dist/src/shadcn/components/ui/switch.stories.d.ts +0 -8
  558. package/dist/src/shadcn/components/ui/switch.stories.d.ts.map +0 -1
  559. package/dist/src/shadcn/components/ui/table.stories.d.ts +0 -8
  560. package/dist/src/shadcn/components/ui/table.stories.d.ts.map +0 -1
  561. package/dist/src/shadcn/components/ui/tabs.stories.d.ts +0 -32
  562. package/dist/src/shadcn/components/ui/tabs.stories.d.ts.map +0 -1
  563. package/dist/src/shadcn/components/ui/textarea.stories.d.ts +0 -8
  564. package/dist/src/shadcn/components/ui/textarea.stories.d.ts.map +0 -1
  565. package/dist/src/shadcn/components/ui/toggle-group.stories.d.ts +0 -8
  566. package/dist/src/shadcn/components/ui/toggle-group.stories.d.ts.map +0 -1
  567. package/dist/src/shadcn/components/ui/toggle.stories.d.ts +0 -8
  568. package/dist/src/shadcn/components/ui/toggle.stories.d.ts.map +0 -1
  569. package/dist/src/shadcn/components/ui/tooltip.stories.d.ts +0 -8
  570. package/dist/src/shadcn/components/ui/tooltip.stories.d.ts.map +0 -1
  571. package/src/index.stories.tsx +0 -21
@@ -1,40 +1,69 @@
1
+ "use client";
1
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
3
  import * as TabsPrimitive from "@radix-ui/react-tabs";
3
4
  import { cva } from "class-variance-authority";
4
- import { Plus, X } from "lucide-react";
5
+ import { ChevronDownIcon, ChevronLeft, ChevronRight, Plus, X } from "lucide-react";
6
+ import * as React from "react";
5
7
  import { cn } from "../../lib/utils.js";
6
8
  import { Button } from "./button.js";
9
+ import { Command, CommandEmpty, CommandInput, CommandItem, CommandList } from "./command.js";
10
+ import { Popover, PopoverContent, PopoverTrigger } from "./popover.js";
11
+ // Base tabs styles
12
+ const baseTabsStyles = cn("flex", "flex-col", "h-full");
13
+ // Tabs add button container styles
14
+ const tabsAddButtonContainerStyles = cn("grow", "h-full", "bg-bg-secondary", "border-l", "border-b");
15
+ // Tabs list styles
16
+ const tabsListStyles = cn("inline-flex", "w-fit", "items-center", "no-scrollbar");
17
+ // Base tabs trigger styles
18
+ const baseTabsTriggerStyles = cn(// Layout & Sizing
19
+ "box-border", "flex-1", "h-10", "inline-flex", "items-center", "justify-center", "px-3", "whitespace-nowrap", // Spacing & Padding
20
+ "pb-2", "pt-2.5", // Typography
21
+ "typo-body", // Colors & States
22
+ "cursor-pointer", "text-text-tertiary", "hover:bg-bg-secondary/60", "hover:text-text-tertiary_hover", "data-[state=active]:text-text-primary", "data-[state=active]:border-b-border-brand", "disabled:opacity-50", "disabled:pointer-events-none", // Borders
23
+ "border-b-2", "border-b-transparent", // Focus & Accessibility
24
+ "focus-visible:ring-2", "focus-visible:ring-utility-blue/70", "focus-visible:outline-1", // Transitions
25
+ "transition-[color,box-shadow]", // Icons
26
+ "[&_svg]:pointer-events-none", "[&_svg]:shrink-0", "[&_svg:not([class*='size-'])]:size-4", // Groups
27
+ "group/tabs-trigger");
28
+ // Tabs content styles
29
+ const tabsContentStyles = cn("grow", "outline-none", "overflow-auto");
7
30
  const tabsVariants = cva("", {
8
31
  variants: {
9
32
  variant: {
10
33
  browser: cn(// Tabs
11
- `flex-row
12
- items-center
13
- h-10
14
- `, // TabsList
15
- `**:data-[slot=tabs-list]:overflow-x-auto
16
- **:data-[slot=tabs-list]:divide-x`, // TabsTrigger
17
- `**:data-[slot=tabs-trigger]:max-w-80
18
- **:data-[slot=tabs-trigger]:min-w-40
19
- **:data-[slot=tabs-trigger]:data-[state=inactive]:border-b-1
20
- **:data-[slot=tabs-trigger]:data-[state=inactive]:border-b-border-secondary
21
- **:data-[slot=tabs-trigger]:data-[state=inactive]:pt-[9px]
22
- `)
34
+ "flex-row", "items-center", "h-10", // TabsList
35
+ "**:data-[slot=tabs-list]:overflow-x-auto", "**:data-[slot=tabs-list]:divide-x", // TabsTrigger
36
+ "**:data-[slot=tabs-trigger]:max-w-80", "**:data-[slot=tabs-trigger]:w-60", "**:data-[slot=tabs-trigger]:min-w-40", "**:data-[slot=tabs-trigger]:data-[state=inactive]:text-text-secondary", "**:data-[slot=tabs-trigger]:data-[state=inactive]:border-b-1", "**:data-[slot=tabs-trigger]:data-[state=inactive]:border-b-border-secondary", "**:data-[slot=tabs-trigger]:data-[state=inactive]:pt-[9px]"),
37
+ secondary: cn(// TabsList
38
+ "**:data-[slot=tabs-list]:h-10", "**:data-[slot=tabs-list]:bg-bg-tertiary", // TabsTrigger
39
+ "**:data-[slot=tabs-trigger]:h-10", "**:data-[slot=tabs-trigger]:px-3", "**:data-[slot=tabs-trigger]:pb-2", "**:data-[slot=tabs-trigger]:pt-2", "**:data-[slot=tabs-trigger]:text-text-secondary", "**:data-[slot=tabs-trigger]:hover:text-text-primary", "**:data-[slot=tabs-trigger]:data-[state=active]:border-b-2", "**:data-[slot=tabs-trigger]:data-[state=active]:border-b-border-dark", "**:data-[slot=tabs-trigger]:data-[state=active]:text-text-primary"),
40
+ tertiary: cn(// TabsList
41
+ "**:data-[slot=tabs-list]:bg-bg-secondary", "**:data-[slot=tabs-list]:border-b", "**:data-[slot=tabs-list]:border-b-border-separator", "**:data-[slot=tabs-list]:gap-2", "**:data-[slot=tabs-list]:px-4", "**:data-[slot=tabs-list]:py-2", // TabsTrigger
42
+ "**:data-[slot=tabs-trigger]:h-7", "**:data-[slot=tabs-trigger]:px-3", "**:data-[slot=tabs-trigger]:rounded", "**:data-[slot=tabs-trigger]:border-b-0", "**:data-[slot=tabs-trigger]:pb-2", "**:data-[slot=tabs-trigger]:pt-2", "**:data-[slot=tabs-trigger]:border", "**:data-[slot=tabs-trigger]:border-transparent", "**:data-[slot=tabs-trigger]:text-text-secondary", "**:data-[slot=tabs-trigger]:hover:text-text-primary", "**:data-[slot=tabs-trigger]:data-[state=active]:bg-bg-primary", "**:data-[slot=tabs-trigger]:data-[state=active]:border-border-secondary", "**:data-[slot=tabs-trigger]:data-[state=active]:text-text-primary")
23
43
  }
24
44
  }
25
45
  });
46
+ // Context for variant
47
+ const TabsVariantContext = /*#__PURE__*/ React.createContext(undefined);
26
48
  function Tabs({ className, variant, ...props }) {
27
- return /*#__PURE__*/ _jsx(TabsPrimitive.Root, {
49
+ const tabProps = {
28
50
  "data-slot": "tabs",
29
- className: cn("flex flex-col", tabsVariants({
51
+ className: cn(baseTabsStyles, tabsVariants({
30
52
  variant
31
53
  }), className),
32
- ...props
54
+ ...props,
55
+ onValueChange: (value)=>props.onValueChange?.(value)
56
+ };
57
+ return /*#__PURE__*/ _jsx(TabsVariantContext.Provider, {
58
+ value: variant,
59
+ children: /*#__PURE__*/ _jsx(TabsPrimitive.Root, {
60
+ ...tabProps
61
+ })
33
62
  });
34
63
  }
35
64
  export function TabsAddButton(props) {
36
65
  return /*#__PURE__*/ _jsx("div", {
37
- className: "grow h-full bg-bg-secondary border-l border-b",
66
+ className: tabsAddButtonContainerStyles,
38
67
  children: /*#__PURE__*/ _jsx(Button, {
39
68
  "data-slot": "tabs-add-button",
40
69
  variant: "link",
@@ -44,17 +73,435 @@ export function TabsAddButton(props) {
44
73
  })
45
74
  });
46
75
  }
47
- function TabsList({ className, ...props }) {
76
+ function horizontalScroll(event) {
77
+ const mode = event.deltaMode;
78
+ let deltaPx = 0;
79
+ if (mode === 0) {
80
+ deltaPx = event.deltaY;
81
+ } else if (mode === 1) {
82
+ deltaPx = event.deltaY * 160;
83
+ } else if (mode === 2) {
84
+ deltaPx = event.currentTarget.clientWidth;
85
+ }
86
+ const newScrollLeft = event.currentTarget.scrollLeft + deltaPx;
87
+ event.currentTarget.scrollTo({
88
+ left: newScrollLeft,
89
+ behavior: "smooth"
90
+ });
91
+ }
92
+ function performHorizontalScroll(tabsListRef, direction) {
93
+ if (!tabsListRef.current) return;
94
+ const scrollAmount = 160;
95
+ let newScrollLeft = tabsListRef.current.scrollLeft;
96
+ if (direction === "left") {
97
+ newScrollLeft -= scrollAmount;
98
+ newScrollLeft -= newScrollLeft % scrollAmount;
99
+ } else {
100
+ newScrollLeft += scrollAmount;
101
+ const rightCoord = newScrollLeft + tabsListRef.current.clientWidth;
102
+ if (rightCoord % scrollAmount !== 0) {
103
+ newScrollLeft += scrollAmount - rightCoord % scrollAmount;
104
+ }
105
+ }
106
+ tabsListRef.current.scrollTo({
107
+ left: newScrollLeft,
108
+ behavior: "smooth"
109
+ });
110
+ }
111
+ function TabsList({ className, onLeftEdge, onRightEdge, onResize, onFlow, onTabChange, ...props }) {
112
+ const tabListRef = React.useRef(null);
113
+ const onLeftEdgeRef = React.useRef(onLeftEdge);
114
+ React.useEffect(()=>{
115
+ onLeftEdgeRef.current = onLeftEdge;
116
+ }, [
117
+ onLeftEdge
118
+ ]);
119
+ const onResizeRef = React.useRef(onResize);
120
+ React.useEffect(()=>{
121
+ onResizeRef.current = onResize;
122
+ }, [
123
+ onResize
124
+ ]);
125
+ const onRightEdgeRef = React.useRef(onRightEdge);
126
+ React.useEffect(()=>{
127
+ onRightEdgeRef.current = onRightEdge;
128
+ }, [
129
+ onRightEdge
130
+ ]);
131
+ const onFlowRef = React.useRef(onFlow);
132
+ React.useEffect(()=>{
133
+ onFlowRef.current = onFlow;
134
+ }, [
135
+ onFlow
136
+ ]);
137
+ const onTabChangeRef = React.useRef(onTabChange);
138
+ React.useEffect(()=>{
139
+ onTabChangeRef.current = onTabChange;
140
+ }, [
141
+ onTabChange
142
+ ]);
143
+ React.useEffect(()=>{
144
+ if (tabListRef.current === null) {
145
+ return;
146
+ }
147
+ const tabList = tabListRef.current;
148
+ let last = null;
149
+ const handleScroll = ()=>{
150
+ if (onLeftEdgeRef.current) {
151
+ const newState = tabList.scrollLeft < 1 ? "touch" : "depart";
152
+ if (last === null) {
153
+ onLeftEdgeRef.current(newState);
154
+ } else {
155
+ const lastState = last.scrollLeft < 1 ? "touch" : "depart";
156
+ if (lastState !== newState) {
157
+ onLeftEdgeRef.current(newState);
158
+ }
159
+ }
160
+ }
161
+ if (onRightEdgeRef.current) {
162
+ const newState = tabList.scrollWidth - tabList.clientWidth - tabList.scrollLeft < 1 ? "touch" : "depart";
163
+ if (last === null) {
164
+ onRightEdgeRef.current(newState);
165
+ } else {
166
+ const lastState = last.scrollWidth - last.clientWidth - last.scrollLeft < 1 ? "touch" : "depart";
167
+ if (lastState !== newState) {
168
+ onRightEdgeRef.current(newState);
169
+ }
170
+ }
171
+ }
172
+ if (onFlowRef.current) {
173
+ const newState = tabList.scrollWidth > tabList.clientWidth ? "overflow" : "underflow";
174
+ if (last === null) {
175
+ onFlowRef.current(newState);
176
+ } else {
177
+ const lastState = last.scrollWidth > last.clientWidth ? "overflow" : "underflow";
178
+ if (lastState !== newState) {
179
+ onFlowRef.current(newState);
180
+ }
181
+ }
182
+ }
183
+ last = {
184
+ scrollLeft: tabList.scrollLeft,
185
+ scrollWidth: tabList.scrollWidth,
186
+ clientWidth: tabList.clientWidth
187
+ };
188
+ };
189
+ const scrollCallback = (_ev)=>handleScroll();
190
+ const resizeObserver = new ResizeObserver((entries)=>{
191
+ handleScroll();
192
+ if (onResizeRef.current) {
193
+ onResizeRef.current(entries);
194
+ }
195
+ });
196
+ const mutationObserver = new MutationObserver((mutationRecords)=>{
197
+ handleScroll();
198
+ if (onTabChangeRef.current) {
199
+ onTabChangeRef.current(mutationRecords);
200
+ }
201
+ });
202
+ tabList.addEventListener("scroll", scrollCallback, {
203
+ passive: true
204
+ });
205
+ resizeObserver.observe(tabList);
206
+ mutationObserver.observe(tabList, {
207
+ childList: true
208
+ });
209
+ return ()=>{
210
+ tabList.removeEventListener("scroll", scrollCallback);
211
+ resizeObserver.disconnect();
212
+ mutationObserver.disconnect();
213
+ };
214
+ }, []);
48
215
  return /*#__PURE__*/ _jsx(TabsPrimitive.List, {
49
216
  "data-slot": "tabs-list",
50
217
  className: cn("inline-flex w-fit items-center", className),
51
- ...props
218
+ ...props,
219
+ ref: (element)=>{
220
+ tabListRef.current = element;
221
+ if (props.ref !== undefined && props.ref !== null) {
222
+ if (typeof props.ref === "function") {
223
+ props.ref(element);
224
+ } else {
225
+ props.ref.current = element;
226
+ }
227
+ }
228
+ }
229
+ });
230
+ }
231
+ function TabScrollLeftButton({ disabled, onClick }) {
232
+ return /*#__PURE__*/ _jsx(Button, {
233
+ variant: "link",
234
+ size: "small",
235
+ disabled: disabled,
236
+ className: "h-full border-r border-b bg-bg-secondary rounded-none",
237
+ onClick: onClick,
238
+ children: /*#__PURE__*/ _jsx(ChevronLeft, {})
239
+ });
240
+ }
241
+ function TabScrollRightButton({ disabled, onClick }) {
242
+ return /*#__PURE__*/ _jsx(Button, {
243
+ variant: "link",
244
+ size: "small",
245
+ disabled: disabled,
246
+ className: "h-full border-l border-b bg-bg-secondary rounded-none",
247
+ onClick: onClick,
248
+ children: /*#__PURE__*/ _jsx(ChevronRight, {})
249
+ });
250
+ }
251
+ const DRAG_THRESHOLD = 5;
252
+ function useTabReorder(onReorder) {
253
+ const [drag, setDrag] = React.useState(null);
254
+ const dragRef = React.useRef(null);
255
+ const pendingRef = React.useRef(false);
256
+ const itemsRef = React.useRef([]);
257
+ const handlePointerDown = React.useCallback((e, index)=>{
258
+ if (!onReorder || e.button !== 0) return;
259
+ const items = itemsRef.current;
260
+ const widths = items.map((el)=>el?.offsetWidth ?? 0);
261
+ const lefts = [];
262
+ let acc = 0;
263
+ for (const w of widths){
264
+ lefts.push(acc);
265
+ acc += w;
266
+ }
267
+ dragRef.current = {
268
+ index,
269
+ startX: e.clientX,
270
+ offsetX: 0,
271
+ currentIndex: index,
272
+ widths,
273
+ lefts
274
+ };
275
+ pendingRef.current = true;
276
+ e.target.setPointerCapture(e.pointerId);
277
+ }, [
278
+ onReorder
279
+ ]);
280
+ const handlePointerMove = React.useCallback((e)=>{
281
+ const d = dragRef.current;
282
+ if (!d) return;
283
+ const dx = e.clientX - d.startX;
284
+ if (pendingRef.current) {
285
+ if (Math.abs(dx) < DRAG_THRESHOLD) return;
286
+ pendingRef.current = false;
287
+ }
288
+ const draggedLeft = d.lefts[d.index] ?? 0;
289
+ const draggedWidth = d.widths[d.index] ?? 0;
290
+ const draggedRightEdge = draggedLeft + draggedWidth + dx;
291
+ const draggedLeftEdge = draggedLeft + dx;
292
+ let newIndex = d.index;
293
+ const TRIGGER_RATIO = 0.3;
294
+ for(let i = 0; i < d.lefts.length; i++){
295
+ if (i === d.index) continue;
296
+ const left = d.lefts[i] ?? 0;
297
+ const width = d.widths[i] ?? 0;
298
+ if (i > d.index) {
299
+ // Dragging right: trigger when right edge enters 30% of target
300
+ if (draggedRightEdge > left + width * TRIGGER_RATIO) newIndex = i;
301
+ } else {
302
+ // Dragging left: trigger when left edge enters 30% from right
303
+ if (draggedLeftEdge < left + width * (1 - TRIGGER_RATIO)) newIndex = Math.min(newIndex, i);
304
+ }
305
+ }
306
+ const next = {
307
+ ...d,
308
+ offsetX: dx,
309
+ currentIndex: newIndex
310
+ };
311
+ dragRef.current = next;
312
+ setDrag(next);
313
+ }, []);
314
+ const handlePointerUp = React.useCallback(()=>{
315
+ const d = dragRef.current;
316
+ if (d && !pendingRef.current && d.index !== d.currentIndex) {
317
+ onReorder?.(d.index, d.currentIndex);
318
+ }
319
+ dragRef.current = null;
320
+ pendingRef.current = false;
321
+ setDrag(null);
322
+ }, [
323
+ onReorder
324
+ ]);
325
+ const getTransform = React.useCallback((index)=>{
326
+ if (!drag || pendingRef.current) return {};
327
+ if (index === drag.index) {
328
+ return {
329
+ transform: `translateX(${drag.offsetX}px)`,
330
+ zIndex: 10,
331
+ position: "relative",
332
+ background: "var(--color-bg-primary)",
333
+ borderLeft: "1px solid var(--color-border-default)"
334
+ };
335
+ }
336
+ const from = drag.index;
337
+ const to = drag.currentIndex;
338
+ const draggedWidth = drag.widths[from] ?? 0;
339
+ if (from < to && index > from && index <= to) {
340
+ return {
341
+ transform: `translateX(${-draggedWidth}px)`,
342
+ transition: "transform 200ms ease"
343
+ };
344
+ }
345
+ if (from > to && index >= to && index < from) {
346
+ return {
347
+ transform: `translateX(${draggedWidth}px)`,
348
+ transition: "transform 200ms ease"
349
+ };
350
+ }
351
+ return {
352
+ transition: "transform 200ms ease"
353
+ };
354
+ }, [
355
+ drag
356
+ ]);
357
+ return {
358
+ drag,
359
+ itemsRef,
360
+ handlePointerDown,
361
+ handlePointerMove,
362
+ handlePointerUp,
363
+ getTransform
364
+ };
365
+ }
366
+ function TabsBrowserList({ className, children, onReorder, ...props }) {
367
+ const tabsListRef = React.useRef(null);
368
+ const [showScrollButtons, setShowScrollButtons] = React.useState(false);
369
+ const [canScrollLeft, setCanScrollLeft] = React.useState(false);
370
+ const [canScrollRight, setCanScrollRight] = React.useState(false);
371
+ const { drag, itemsRef, handlePointerDown, handlePointerMove, handlePointerUp, getTransform } = useTabReorder(onReorder);
372
+ const wrappedChildren = onReorder && React.Children.count(children) > 1 ? React.Children.map(children, (child, index)=>/*#__PURE__*/ _jsx("div", {
373
+ ref: (el)=>{
374
+ itemsRef.current[index] = el;
375
+ },
376
+ style: getTransform(index),
377
+ onPointerDown: (e)=>handlePointerDown(e, index),
378
+ onPointerMove: handlePointerMove,
379
+ onPointerUp: handlePointerUp,
380
+ className: cn(drag?.index === index && "cursor-grabbing"),
381
+ children: child
382
+ })) : children;
383
+ return /*#__PURE__*/ _jsxs(React.Fragment, {
384
+ children: [
385
+ showScrollButtons && /*#__PURE__*/ _jsx(TabScrollLeftButton, {
386
+ disabled: !canScrollLeft,
387
+ onClick: ()=>performHorizontalScroll(tabsListRef, "left")
388
+ }),
389
+ /*#__PURE__*/ _jsx(TabsList, {
390
+ onLeftEdge: (edgeState)=>{
391
+ if (edgeState === "touch") {
392
+ setCanScrollLeft(false);
393
+ } else {
394
+ setCanScrollLeft(true);
395
+ }
396
+ },
397
+ onRightEdge: (edgeState)=>{
398
+ if (edgeState === "touch") {
399
+ setCanScrollRight(false);
400
+ } else {
401
+ setCanScrollRight(true);
402
+ }
403
+ },
404
+ onFlow: (flow)=>{
405
+ if (flow === "overflow") {
406
+ setShowScrollButtons(true);
407
+ } else {
408
+ setShowScrollButtons(false);
409
+ }
410
+ },
411
+ onResize: ()=>{
412
+ tabsListRef.current?.querySelector('button[data-state="active"]')?.scrollIntoView();
413
+ },
414
+ onTabChange: (entries)=>{
415
+ if (entries.filter((entry)=>entry.addedNodes.length !== 0).length !== 0) {
416
+ tabsListRef.current?.querySelector('button[data-state="active"]')?.scrollIntoView();
417
+ }
418
+ },
419
+ "data-slot": "tabs-list",
420
+ className: cn(tabsListStyles, className),
421
+ onWheel: (event)=>horizontalScroll(event),
422
+ ...props,
423
+ ref: tabsListRef,
424
+ children: wrappedChildren
425
+ }),
426
+ showScrollButtons && /*#__PURE__*/ _jsx(TabScrollRightButton, {
427
+ disabled: !canScrollRight,
428
+ onClick: ()=>performHorizontalScroll(tabsListRef, "right")
429
+ })
430
+ ]
431
+ });
432
+ }
433
+ export function TabsListDropdown({ tabs, handleTabSelect, handleCloseTab }) {
434
+ const [isMenuOpen, setIsMenuOpen] = React.useState(false);
435
+ return /*#__PURE__*/ _jsxs(Popover, {
436
+ open: isMenuOpen,
437
+ onOpenChange: setIsMenuOpen,
438
+ children: [
439
+ /*#__PURE__*/ _jsx(PopoverTrigger, {
440
+ asChild: true,
441
+ children: /*#__PURE__*/ _jsx(Button, {
442
+ variant: "link",
443
+ className: "bg-bg-secondary h-full border-b pr-6",
444
+ children: /*#__PURE__*/ _jsx(ChevronDownIcon, {
445
+ className: "size-4"
446
+ })
447
+ })
448
+ }),
449
+ /*#__PURE__*/ _jsx(PopoverContent, {
450
+ className: "w-80 p-0 mr-3",
451
+ align: "end",
452
+ children: /*#__PURE__*/ _jsxs(Command, {
453
+ children: [
454
+ /*#__PURE__*/ _jsx(CommandInput, {
455
+ placeholder: "Search tabs..."
456
+ }),
457
+ /*#__PURE__*/ _jsxs(CommandList, {
458
+ children: [
459
+ /*#__PURE__*/ _jsx(CommandEmpty, {
460
+ children: "Not tabs found."
461
+ }),
462
+ tabs.map((tab)=>/*#__PURE__*/ _jsxs(CommandItem, {
463
+ onSelect: ()=>{
464
+ handleTabSelect?.(tab.id);
465
+ setIsMenuOpen(false);
466
+ },
467
+ className: "group flex items-center justify-between",
468
+ children: [
469
+ tab.content,
470
+ tabs.length > 1 && /*#__PURE__*/ _jsx(Button, {
471
+ variant: "ghost",
472
+ size: "small",
473
+ className: "opacity-0 group-hover:opacity-100 transition-opacity p-1 ml-2",
474
+ onClick: (e)=>{
475
+ e.stopPropagation();
476
+ handleCloseTab?.(tab.id);
477
+ },
478
+ children: /*#__PURE__*/ _jsx(X, {
479
+ className: "size-3"
480
+ })
481
+ })
482
+ ]
483
+ }, tab.id))
484
+ ]
485
+ })
486
+ ]
487
+ })
488
+ })
489
+ ]
52
490
  });
53
491
  }
54
492
  function TabsTrigger({ className, onClose, ...props }) {
493
+ const variant = React.useContext(TabsVariantContext);
494
+ const isSecondary = variant === "secondary";
495
+ const isTertiary = variant === "tertiary";
55
496
  return /*#__PURE__*/ _jsxs(TabsPrimitive.Trigger, {
56
497
  "data-slot": "tabs-trigger",
57
- className: cn("group/tabs-trigger", "box-border h-10 typo-body px-3 pb-2 pt-2.5 cursor-pointer text-text-tertiary data-[state=active]:text-text-primary", "data-[state=active]:border-b-border-brand border-b-2 border-b-transparent hover:text-text-tertiary-hover focus-visible:border-ring", "focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:text-muted-foreground", "inline-flex flex-1 items-center justify-center whitespace-nowrap transition-[color,box-shadow]", "focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50", "[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", "hover:bg-bg-secondary/60", onClose ? "justify-between" : "", className),
498
+ className: cn(baseTabsTriggerStyles, onClose ? "justify-between" : "justify-start", isSecondary && [
499
+ "body14",
500
+ "data-[state=active]:body14bold"
501
+ ], isTertiary && [
502
+ "typo-body",
503
+ "data-[state=active]:typo-label"
504
+ ], className),
58
505
  ...props,
59
506
  children: [
60
507
  props.children,
@@ -65,7 +512,7 @@ function TabsTrigger({ className, onClose, ...props }) {
65
512
  },
66
513
  variant: "link",
67
514
  size: "small",
68
- className: "p-0 ml-2",
515
+ className: "p-0 ml-2 opacity-0 group-hover/tabs-trigger:opacity-100 transition-opacity",
69
516
  asChild: true,
70
517
  children: /*#__PURE__*/ _jsx("span", {
71
518
  children: /*#__PURE__*/ _jsx(X, {})
@@ -77,10 +524,10 @@ function TabsTrigger({ className, onClose, ...props }) {
77
524
  function TabsContent({ className, ...props }) {
78
525
  return /*#__PURE__*/ _jsx(TabsPrimitive.Content, {
79
526
  "data-slot": "tabs-content",
80
- className: cn("flex-1 outline-none", className),
527
+ className: cn(tabsContentStyles, className),
81
528
  ...props
82
529
  });
83
530
  }
84
- export { Tabs, TabsList, TabsTrigger, TabsContent };
531
+ export { Tabs, TabsList, TabsTrigger, TabsContent, TabsBrowserList };
85
532
 
86
533
  //# sourceMappingURL=tabs.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/shadcn/components/ui/tabs.tsx"],"sourcesContent":["import * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Plus, X } from \"lucide-react\";\nimport type * as React from \"react\";\nimport { cn } from \"#shadcn/lib/utils\";\nimport { Button } from \"./button\";\n\nconst tabsVariants = cva(\"\", {\n\tvariants: {\n\t\tvariant: {\n\t\t\tbrowser: cn(\n\t\t\t\t// Tabs\n\t\t\t\t`flex-row \n\t\t\t\t items-center\n\t\t\t\t h-10\n\t\t\t\t `,\n\t\t\t\t// TabsList\n\t\t\t\t`**:data-[slot=tabs-list]:overflow-x-auto\n\t\t\t\t **:data-[slot=tabs-list]:divide-x`,\n\t\t\t\t// TabsTrigger\n\t\t\t\t`**:data-[slot=tabs-trigger]:max-w-80 \n\t\t\t\t **:data-[slot=tabs-trigger]:min-w-40\n\t\t\t\t **:data-[slot=tabs-trigger]:data-[state=inactive]:border-b-1\n\t\t\t\t **:data-[slot=tabs-trigger]:data-[state=inactive]:border-b-border-secondary\n\t\t\t\t **:data-[slot=tabs-trigger]:data-[state=inactive]:pt-[9px]\n\t\t\t\t `, // TODO: Try to implement this without using pt-[9px].\n\t\t\t),\n\t\t},\n\t},\n});\n\nfunction Tabs({\n\tclassName,\n\tvariant,\n\t...props\n}: React.ComponentProps<typeof TabsPrimitive.Root> &\n\tVariantProps<typeof tabsVariants>) {\n\treturn (\n\t\t<TabsPrimitive.Root\n\t\t\tdata-slot=\"tabs\"\n\t\t\tclassName={cn(\"flex flex-col\", tabsVariants({ variant }), className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport function TabsAddButton(props: React.ComponentProps<typeof Button>) {\n\treturn (\n\t\t<div className=\"grow h-full bg-bg-secondary border-l border-b\">\n\t\t\t<Button\n\t\t\t\tdata-slot=\"tabs-add-button\"\n\t\t\t\tvariant=\"link\"\n\t\t\t\tclassName=\"h-full\"\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<Plus />\n\t\t\t</Button>\n\t\t</div>\n\t);\n}\n\nfunction TabsList({\n\tclassName,\n\t...props\n}: React.ComponentProps<typeof TabsPrimitive.List>) {\n\treturn (\n\t\t<TabsPrimitive.List\n\t\t\tdata-slot=\"tabs-list\"\n\t\t\tclassName={cn(\"inline-flex w-fit items-center\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction TabsTrigger({\n\tclassName,\n\tonClose,\n\t...props\n}: React.ComponentProps<typeof TabsPrimitive.Trigger> & {\n\tonClose?: (value: string) => void;\n}) {\n\treturn (\n\t\t<TabsPrimitive.Trigger\n\t\t\tdata-slot=\"tabs-trigger\"\n\t\t\tclassName={cn(\n\t\t\t\t\"group/tabs-trigger\",\n\t\t\t\t\"box-border h-10 typo-body px-3 pb-2 pt-2.5 cursor-pointer text-text-tertiary data-[state=active]:text-text-primary\",\n\t\t\t\t\"data-[state=active]:border-b-border-brand border-b-2 border-b-transparent hover:text-text-tertiary-hover focus-visible:border-ring\",\n\t\t\t\t\"focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:text-muted-foreground\",\n\t\t\t\t\"inline-flex flex-1 items-center justify-center whitespace-nowrap transition-[color,box-shadow]\",\n\t\t\t\t\"focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50\",\n\t\t\t\t\"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n\t\t\t\t\"hover:bg-bg-secondary/60\",\n\t\t\t\tonClose ? \"justify-between\" : \"\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{props.children}\n\n\t\t\t{onClose && (\n\t\t\t\t<Button\n\t\t\t\t\tonClick={(event) => {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\tonClose(props.value);\n\t\t\t\t\t}}\n\t\t\t\t\tvariant=\"link\"\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\tclassName=\"p-0 ml-2\"\n\t\t\t\t\tasChild\n\t\t\t\t>\n\t\t\t\t\t<span>\n\t\t\t\t\t\t<X />\n\t\t\t\t\t</span>\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t</TabsPrimitive.Trigger>\n\t);\n}\n\nfunction TabsContent({\n\tclassName,\n\t...props\n}: React.ComponentProps<typeof TabsPrimitive.Content>) {\n\treturn (\n\t\t<TabsPrimitive.Content\n\t\t\tdata-slot=\"tabs-content\"\n\t\t\tclassName={cn(\"flex-1 outline-none\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n"],"names":["TabsPrimitive","cva","Plus","X","cn","Button","tabsVariants","variants","variant","browser","Tabs","className","props","Root","data-slot","TabsAddButton","div","TabsList","List","TabsTrigger","onClose","Trigger","children","onClick","event","stopPropagation","value","size","asChild","span","TabsContent","Content"],"mappings":";AAAA,YAAYA,mBAAmB,uBAAuB;AACtD,SAASC,GAAG,QAA2B,2BAA2B;AAClE,SAASC,IAAI,EAAEC,CAAC,QAAQ,eAAe;AAEvC,SAASC,EAAE,QAAQ,qBAAoB;AACvC,SAASC,MAAM,QAAQ,cAAW;AAElC,MAAMC,eAAeL,IAAI,IAAI;IAC5BM,UAAU;QACTC,SAAS;YACRC,SAASL,GACR,OAAO;YACP,CAAC;;;KAGA,CAAC,EACF,WAAW;YACX,CAAC;sCACiC,CAAC,EACnC,cAAc;YACd,CAAC;;;;;KAKA,CAAC;QAEJ;IACD;AACD;AAEA,SAASM,KAAK,EACbC,SAAS,EACTH,OAAO,EACP,GAAGI,OAE8B;IACjC,qBACC,KAACZ,cAAca,IAAI;QAClBC,aAAU;QACVH,WAAWP,GAAG,iBAAiBE,aAAa;YAAEE;QAAQ,IAAIG;QACzD,GAAGC,KAAK;;AAGZ;AAEA,OAAO,SAASG,cAAcH,KAA0C;IACvE,qBACC,KAACI;QAAIL,WAAU;kBACd,cAAA,KAACN;YACAS,aAAU;YACVN,SAAQ;YACRG,WAAU;YACT,GAAGC,KAAK;sBAET,cAAA,KAACV;;;AAIL;AAEA,SAASe,SAAS,EACjBN,SAAS,EACT,GAAGC,OAC8C;IACjD,qBACC,KAACZ,cAAckB,IAAI;QAClBJ,aAAU;QACVH,WAAWP,GAAG,kCAAkCO;QAC/C,GAAGC,KAAK;;AAGZ;AAEA,SAASO,YAAY,EACpBR,SAAS,EACTS,OAAO,EACP,GAAGR,OAGH;IACA,qBACC,MAACZ,cAAcqB,OAAO;QACrBP,aAAU;QACVH,WAAWP,GACV,sBACA,sHACA,sIACA,0HACA,kGACA,qGACA,qFACA,4BACAgB,UAAU,oBAAoB,IAC9BT;QAEA,GAAGC,KAAK;;YAERA,MAAMU,QAAQ;YAEdF,yBACA,KAACf;gBACAkB,SAAS,CAACC;oBACTA,MAAMC,eAAe;oBACrBL,QAAQR,MAAMc,KAAK;gBACpB;gBACAlB,SAAQ;gBACRmB,MAAK;gBACLhB,WAAU;gBACViB,OAAO;0BAEP,cAAA,KAACC;8BACA,cAAA,KAAC1B;;;;;AAMP;AAEA,SAAS2B,YAAY,EACpBnB,SAAS,EACT,GAAGC,OACiD;IACpD,qBACC,KAACZ,cAAc+B,OAAO;QACrBjB,aAAU;QACVH,WAAWP,GAAG,uBAAuBO;QACpC,GAAGC,KAAK;;AAGZ;AAEA,SAASF,IAAI,EAAEO,QAAQ,EAAEE,WAAW,EAAEW,WAAW,GAAG"}
1
+ {"version":3,"sources":["../../../../../src/shadcn/components/ui/tabs.tsx"],"sourcesContent":["\"use client\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n\tChevronDownIcon,\n\tChevronLeft,\n\tChevronRight,\n\tPlus,\n\tX,\n} from \"lucide-react\";\nimport * as React from \"react\";\nimport { cn } from \"#shadcn/lib/utils\";\nimport { Button } from \"./button\";\nimport {\n\tCommand,\n\tCommandEmpty,\n\tCommandInput,\n\tCommandItem,\n\tCommandList,\n} from \"./command\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"./popover\";\n\n// Base tabs styles\nconst baseTabsStyles = cn(\"flex\", \"flex-col\", \"h-full\");\n\n// Tabs add button container styles\nconst tabsAddButtonContainerStyles = cn(\n\t\"grow\",\n\t\"h-full\",\n\t\"bg-bg-secondary\",\n\t\"border-l\",\n\t\"border-b\",\n);\n\n// Tabs list styles\nconst tabsListStyles = cn(\n\t\"inline-flex\",\n\t\"w-fit\",\n\t\"items-center\",\n\t\"no-scrollbar\",\n);\n\n// Base tabs trigger styles\nconst baseTabsTriggerStyles = cn(\n\t// Layout & Sizing\n\t\"box-border\",\n\t\"flex-1\",\n\t\"h-10\",\n\t\"inline-flex\",\n\t\"items-center\",\n\t\"justify-center\",\n\t\"px-3\",\n\t\"whitespace-nowrap\",\n\t// Spacing & Padding\n\t\"pb-2\",\n\t\"pt-2.5\",\n\t// Typography\n\t\"typo-body\",\n\t// Colors & States\n\t\"cursor-pointer\",\n\t\"text-text-tertiary\",\n\t\"hover:bg-bg-secondary/60\",\n\t\"hover:text-text-tertiary_hover\",\n\t\"data-[state=active]:text-text-primary\",\n\t\"data-[state=active]:border-b-border-brand\",\n\t\"disabled:opacity-50\",\n\t\"disabled:pointer-events-none\",\n\t// Borders\n\t\"border-b-2\",\n\t\"border-b-transparent\",\n\t// Focus & Accessibility\n\t\"focus-visible:ring-2\",\n\t\"focus-visible:ring-utility-blue/70\",\n\t\"focus-visible:outline-1\",\n\t// Transitions\n\t\"transition-[color,box-shadow]\",\n\t// Icons\n\t\"[&_svg]:pointer-events-none\",\n\t\"[&_svg]:shrink-0\",\n\t\"[&_svg:not([class*='size-'])]:size-4\",\n\t// Groups\n\t\"group/tabs-trigger\",\n);\n\n// Tabs content styles\nconst tabsContentStyles = cn(\"grow\", \"outline-none\", \"overflow-auto\");\n\nconst tabsVariants = cva(\"\", {\n\tvariants: {\n\t\tvariant: {\n\t\t\tbrowser: cn(\n\t\t\t\t// Tabs\n\t\t\t\t\"flex-row\",\n\t\t\t\t\"items-center\",\n\t\t\t\t\"h-10\",\n\t\t\t\t// TabsList\n\t\t\t\t\"**:data-[slot=tabs-list]:overflow-x-auto\",\n\t\t\t\t\"**:data-[slot=tabs-list]:divide-x\",\n\t\t\t\t// TabsTrigger\n\t\t\t\t\"**:data-[slot=tabs-trigger]:max-w-80\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:w-60\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:min-w-40\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:data-[state=inactive]:text-text-secondary\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:data-[state=inactive]:border-b-1\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:data-[state=inactive]:border-b-border-secondary\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:data-[state=inactive]:pt-[9px]\", // TODO: Try to implement this without using pt-[9px].\n\t\t\t),\n\t\t\tsecondary: cn(\n\t\t\t\t// TabsList\n\t\t\t\t\"**:data-[slot=tabs-list]:h-10\",\n\t\t\t\t\"**:data-[slot=tabs-list]:bg-bg-tertiary\",\n\t\t\t\t// TabsTrigger\n\t\t\t\t\"**:data-[slot=tabs-trigger]:h-10\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:px-3\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:pb-2\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:pt-2\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:text-text-secondary\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:hover:text-text-primary\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:data-[state=active]:border-b-2\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:data-[state=active]:border-b-border-dark\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:data-[state=active]:text-text-primary\",\n\t\t\t),\n\t\t\ttertiary: cn(\n\t\t\t\t// TabsList\n\t\t\t\t\"**:data-[slot=tabs-list]:bg-bg-secondary\",\n\t\t\t\t\"**:data-[slot=tabs-list]:border-b\",\n\t\t\t\t\"**:data-[slot=tabs-list]:border-b-border-separator\",\n\t\t\t\t\"**:data-[slot=tabs-list]:gap-2\",\n\t\t\t\t\"**:data-[slot=tabs-list]:px-4\",\n\t\t\t\t\"**:data-[slot=tabs-list]:py-2\",\n\t\t\t\t// TabsTrigger\n\t\t\t\t\"**:data-[slot=tabs-trigger]:h-7\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:px-3\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:rounded\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:border-b-0\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:pb-2\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:pt-2\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:border\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:border-transparent\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:text-text-secondary\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:hover:text-text-primary\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:data-[state=active]:bg-bg-primary\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:data-[state=active]:border-border-secondary\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:data-[state=active]:text-text-primary\",\n\t\t\t),\n\t\t},\n\t},\n});\n\n// Context for variant\nconst TabsVariantContext = React.createContext<\n\tVariantProps<typeof tabsVariants>[\"variant\"] | undefined\n>(undefined);\n\ntype TabsProps<T extends string> = Omit<\n\tReact.ComponentProps<typeof TabsPrimitive.Root> &\n\t\tVariantProps<typeof tabsVariants>,\n\t\"value\" | \"defaultValue\" | \"onValueChange\"\n> & {\n\tvalue?: T;\n\tdefaultValue?: T;\n\tonValueChange?: (value: T) => void;\n};\n\nfunction Tabs<T extends string = string>({\n\tclassName,\n\tvariant,\n\t...props\n}: TabsProps<T>) {\n\tconst tabProps = {\n\t\t\"data-slot\": \"tabs\",\n\t\tclassName: cn(baseTabsStyles, tabsVariants({ variant }), className),\n\t\t...props,\n\t\tonValueChange: (value: string) => props.onValueChange?.(value as T),\n\t};\n\treturn (\n\t\t<TabsVariantContext.Provider value={variant}>\n\t\t\t<TabsPrimitive.Root {...tabProps} />\n\t\t</TabsVariantContext.Provider>\n\t);\n}\n\nexport function TabsAddButton(props: React.ComponentProps<typeof Button>) {\n\treturn (\n\t\t<div className={tabsAddButtonContainerStyles}>\n\t\t\t<Button\n\t\t\t\tdata-slot=\"tabs-add-button\"\n\t\t\t\tvariant=\"link\"\n\t\t\t\tclassName=\"h-full\"\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<Plus />\n\t\t\t</Button>\n\t\t</div>\n\t);\n}\n\nfunction horizontalScroll(event: React.WheelEvent) {\n\tconst mode = event.deltaMode;\n\tlet deltaPx = 0;\n\n\tif (mode === 0) {\n\t\tdeltaPx = event.deltaY;\n\t} else if (mode === 1) {\n\t\tdeltaPx = event.deltaY * 160;\n\t} else if (mode === 2) {\n\t\tdeltaPx = event.currentTarget.clientWidth;\n\t}\n\n\tconst newScrollLeft = event.currentTarget.scrollLeft + deltaPx;\n\n\tevent.currentTarget.scrollTo({\n\t\tleft: newScrollLeft,\n\t\tbehavior: \"smooth\",\n\t});\n}\n\nfunction performHorizontalScroll(\n\ttabsListRef: React.RefObject<HTMLDivElement | null>,\n\tdirection: \"left\" | \"right\",\n) {\n\tif (!tabsListRef.current) return;\n\tconst scrollAmount = 160;\n\tlet newScrollLeft = tabsListRef.current.scrollLeft;\n\n\tif (direction === \"left\") {\n\t\tnewScrollLeft -= scrollAmount;\n\t\tnewScrollLeft -= newScrollLeft % scrollAmount;\n\t} else {\n\t\tnewScrollLeft += scrollAmount;\n\n\t\tconst rightCoord = newScrollLeft + tabsListRef.current.clientWidth;\n\n\t\tif (rightCoord % scrollAmount !== 0) {\n\t\t\tnewScrollLeft += scrollAmount - (rightCoord % scrollAmount);\n\t\t}\n\t}\n\n\ttabsListRef.current.scrollTo({\n\t\tleft: newScrollLeft,\n\t\tbehavior: \"smooth\",\n\t});\n}\n\ntype EdgeScrollPosition = \"touch\" | \"depart\";\ntype FlowType = \"overflow\" | \"underflow\";\n\ntype TabsListProps = {\n\tonLeftEdge?: (position: EdgeScrollPosition) => void;\n\tonRightEdge?: (position: EdgeScrollPosition) => void;\n\tonFlow?: (flow: FlowType) => void;\n\tonResize?: (entries: ResizeObserverEntry[]) => void;\n\tonTabChange?: (mutationRecords: MutationRecord[]) => void;\n} & React.ComponentProps<typeof TabsPrimitive.List>;\n\nfunction TabsList({\n\tclassName,\n\tonLeftEdge,\n\tonRightEdge,\n\tonResize,\n\tonFlow,\n\tonTabChange,\n\t...props\n}: TabsListProps) {\n\tconst tabListRef = React.useRef<HTMLDivElement | null>(null);\n\n\tconst onLeftEdgeRef = React.useRef(onLeftEdge);\n\tReact.useEffect(() => {\n\t\tonLeftEdgeRef.current = onLeftEdge;\n\t}, [onLeftEdge]);\n\n\tconst onResizeRef = React.useRef(onResize);\n\tReact.useEffect(() => {\n\t\tonResizeRef.current = onResize;\n\t}, [onResize]);\n\n\tconst onRightEdgeRef = React.useRef(onRightEdge);\n\tReact.useEffect(() => {\n\t\tonRightEdgeRef.current = onRightEdge;\n\t}, [onRightEdge]);\n\n\tconst onFlowRef = React.useRef(onFlow);\n\tReact.useEffect(() => {\n\t\tonFlowRef.current = onFlow;\n\t}, [onFlow]);\n\n\tconst onTabChangeRef = React.useRef(onTabChange);\n\tReact.useEffect(() => {\n\t\tonTabChangeRef.current = onTabChange;\n\t}, [onTabChange]);\n\n\tReact.useEffect(() => {\n\t\tif (tabListRef.current === null) {\n\t\t\treturn;\n\t\t}\n\t\tconst tabList = tabListRef.current;\n\n\t\tlet last: {\n\t\t\tscrollLeft: number;\n\t\t\tscrollWidth: number;\n\t\t\tclientWidth: number;\n\t\t} | null = null;\n\n\t\tconst handleScroll = () => {\n\t\t\tif (onLeftEdgeRef.current) {\n\t\t\t\tconst newState: EdgeScrollPosition =\n\t\t\t\t\ttabList.scrollLeft < 1 ? \"touch\" : \"depart\";\n\n\t\t\t\tif (last === null) {\n\t\t\t\t\tonLeftEdgeRef.current(newState);\n\t\t\t\t} else {\n\t\t\t\t\tconst lastState: EdgeScrollPosition =\n\t\t\t\t\t\tlast.scrollLeft < 1 ? \"touch\" : \"depart\";\n\n\t\t\t\t\tif (lastState !== newState) {\n\t\t\t\t\t\tonLeftEdgeRef.current(newState);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (onRightEdgeRef.current) {\n\t\t\t\tconst newState: EdgeScrollPosition =\n\t\t\t\t\ttabList.scrollWidth - tabList.clientWidth - tabList.scrollLeft < 1\n\t\t\t\t\t\t? \"touch\"\n\t\t\t\t\t\t: \"depart\";\n\n\t\t\t\tif (last === null) {\n\t\t\t\t\tonRightEdgeRef.current(newState);\n\t\t\t\t} else {\n\t\t\t\t\tconst lastState: EdgeScrollPosition =\n\t\t\t\t\t\tlast.scrollWidth - last.clientWidth - last.scrollLeft < 1\n\t\t\t\t\t\t\t? \"touch\"\n\t\t\t\t\t\t\t: \"depart\";\n\n\t\t\t\t\tif (lastState !== newState) {\n\t\t\t\t\t\tonRightEdgeRef.current(newState);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (onFlowRef.current) {\n\t\t\t\tconst newState: FlowType =\n\t\t\t\t\ttabList.scrollWidth > tabList.clientWidth ? \"overflow\" : \"underflow\";\n\n\t\t\t\tif (last === null) {\n\t\t\t\t\tonFlowRef.current(newState);\n\t\t\t\t} else {\n\t\t\t\t\tconst lastState =\n\t\t\t\t\t\tlast.scrollWidth > last.clientWidth ? \"overflow\" : \"underflow\";\n\t\t\t\t\tif (lastState !== newState) {\n\t\t\t\t\t\tonFlowRef.current(newState);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlast = {\n\t\t\t\tscrollLeft: tabList.scrollLeft,\n\t\t\t\tscrollWidth: tabList.scrollWidth,\n\t\t\t\tclientWidth: tabList.clientWidth,\n\t\t\t};\n\t\t};\n\n\t\tconst scrollCallback = (_ev: unknown) => handleScroll();\n\t\tconst resizeObserver = new ResizeObserver((entries) => {\n\t\t\thandleScroll();\n\t\t\tif (onResizeRef.current) {\n\t\t\t\tonResizeRef.current(entries);\n\t\t\t}\n\t\t});\n\t\tconst mutationObserver = new MutationObserver((mutationRecords) => {\n\t\t\thandleScroll();\n\t\t\tif (onTabChangeRef.current) {\n\t\t\t\tonTabChangeRef.current(mutationRecords);\n\t\t\t}\n\t\t});\n\n\t\ttabList.addEventListener(\"scroll\", scrollCallback, { passive: true });\n\t\tresizeObserver.observe(tabList);\n\t\tmutationObserver.observe(tabList, { childList: true });\n\n\t\treturn () => {\n\t\t\ttabList.removeEventListener(\"scroll\", scrollCallback);\n\t\t\tresizeObserver.disconnect();\n\t\t\tmutationObserver.disconnect();\n\t\t};\n\t}, []);\n\n\treturn (\n\t\t<TabsPrimitive.List\n\t\t\tdata-slot=\"tabs-list\"\n\t\t\tclassName={cn(\"inline-flex w-fit items-center\", className)}\n\t\t\t{...props}\n\t\t\tref={(element) => {\n\t\t\t\ttabListRef.current = element;\n\t\t\t\tif (props.ref !== undefined && props.ref !== null) {\n\t\t\t\t\tif (typeof props.ref === \"function\") {\n\t\t\t\t\t\tprops.ref(element);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tprops.ref.current = element;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}}\n\t\t/>\n\t);\n}\n\ntype TabScrollButtonProps = {\n\tdisabled: boolean;\n\tonClick: () => void;\n};\n\nfunction TabScrollLeftButton({\n\tdisabled,\n\tonClick,\n}: TabScrollButtonProps): React.ReactElement {\n\treturn (\n\t\t<Button\n\t\t\tvariant=\"link\"\n\t\t\tsize=\"small\"\n\t\t\tdisabled={disabled}\n\t\t\tclassName=\"h-full border-r border-b bg-bg-secondary rounded-none\"\n\t\t\tonClick={onClick}\n\t\t>\n\t\t\t<ChevronLeft />\n\t\t</Button>\n\t);\n}\n\nfunction TabScrollRightButton({\n\tdisabled,\n\tonClick,\n}: TabScrollButtonProps): React.ReactElement {\n\treturn (\n\t\t<Button\n\t\t\tvariant=\"link\"\n\t\t\tsize=\"small\"\n\t\t\tdisabled={disabled}\n\t\t\tclassName=\"h-full border-l border-b bg-bg-secondary rounded-none\"\n\t\t\tonClick={onClick}\n\t\t>\n\t\t\t<ChevronRight />\n\t\t</Button>\n\t);\n}\n\ntype DragState = {\n\tindex: number;\n\tstartX: number;\n\toffsetX: number;\n\tcurrentIndex: number;\n\twidths: number[];\n\tlefts: number[];\n};\n\nconst DRAG_THRESHOLD = 5;\n\nfunction useTabReorder(\n\tonReorder: ((fromIndex: number, toIndex: number) => void) | undefined,\n) {\n\tconst [drag, setDrag] = React.useState<DragState | null>(null);\n\tconst dragRef = React.useRef<DragState | null>(null);\n\tconst pendingRef = React.useRef(false);\n\tconst itemsRef = React.useRef<(HTMLDivElement | null)[]>([]);\n\n\tconst handlePointerDown = React.useCallback(\n\t\t(e: React.PointerEvent, index: number) => {\n\t\t\tif (!onReorder || e.button !== 0) return;\n\t\t\tconst items = itemsRef.current;\n\t\t\tconst widths = items.map((el) => el?.offsetWidth ?? 0);\n\t\t\tconst lefts: number[] = [];\n\t\t\tlet acc = 0;\n\t\t\tfor (const w of widths) {\n\t\t\t\tlefts.push(acc);\n\t\t\t\tacc += w;\n\t\t\t}\n\t\t\tdragRef.current = {\n\t\t\t\tindex,\n\t\t\t\tstartX: e.clientX,\n\t\t\t\toffsetX: 0,\n\t\t\t\tcurrentIndex: index,\n\t\t\t\twidths,\n\t\t\t\tlefts,\n\t\t\t};\n\t\t\tpendingRef.current = true;\n\t\t\t(e.target as HTMLElement).setPointerCapture(e.pointerId);\n\t\t},\n\t\t[onReorder],\n\t);\n\n\tconst handlePointerMove = React.useCallback((e: React.PointerEvent) => {\n\t\tconst d = dragRef.current;\n\t\tif (!d) return;\n\t\tconst dx = e.clientX - d.startX;\n\t\tif (pendingRef.current) {\n\t\t\tif (Math.abs(dx) < DRAG_THRESHOLD) return;\n\t\t\tpendingRef.current = false;\n\t\t}\n\t\tconst draggedLeft = d.lefts[d.index] ?? 0;\n\t\tconst draggedWidth = d.widths[d.index] ?? 0;\n\t\tconst draggedRightEdge = draggedLeft + draggedWidth + dx;\n\t\tconst draggedLeftEdge = draggedLeft + dx;\n\t\tlet newIndex = d.index;\n\t\tconst TRIGGER_RATIO = 0.3;\n\t\tfor (let i = 0; i < d.lefts.length; i++) {\n\t\t\tif (i === d.index) continue;\n\t\t\tconst left = d.lefts[i] ?? 0;\n\t\t\tconst width = d.widths[i] ?? 0;\n\t\t\tif (i > d.index) {\n\t\t\t\t// Dragging right: trigger when right edge enters 30% of target\n\t\t\t\tif (draggedRightEdge > left + width * TRIGGER_RATIO) newIndex = i;\n\t\t\t} else {\n\t\t\t\t// Dragging left: trigger when left edge enters 30% from right\n\t\t\t\tif (draggedLeftEdge < left + width * (1 - TRIGGER_RATIO))\n\t\t\t\t\tnewIndex = Math.min(newIndex, i);\n\t\t\t}\n\t\t}\n\t\tconst next: DragState = { ...d, offsetX: dx, currentIndex: newIndex };\n\t\tdragRef.current = next;\n\t\tsetDrag(next);\n\t}, []);\n\n\tconst handlePointerUp = React.useCallback(() => {\n\t\tconst d = dragRef.current;\n\t\tif (d && !pendingRef.current && d.index !== d.currentIndex) {\n\t\t\tonReorder?.(d.index, d.currentIndex);\n\t\t}\n\t\tdragRef.current = null;\n\t\tpendingRef.current = false;\n\t\tsetDrag(null);\n\t}, [onReorder]);\n\n\tconst getTransform = React.useCallback(\n\t\t(index: number): React.CSSProperties => {\n\t\t\tif (!drag || pendingRef.current) return {};\n\t\t\tif (index === drag.index) {\n\t\t\t\treturn {\n\t\t\t\t\ttransform: `translateX(${drag.offsetX}px)`,\n\t\t\t\t\tzIndex: 10,\n\t\t\t\t\tposition: \"relative\",\n\t\t\t\t\tbackground: \"var(--color-bg-primary)\",\n\t\t\t\t\tborderLeft: \"1px solid var(--color-border-default)\",\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst from = drag.index;\n\t\t\tconst to = drag.currentIndex;\n\t\t\tconst draggedWidth = drag.widths[from] ?? 0;\n\t\t\tif (from < to && index > from && index <= to) {\n\t\t\t\treturn {\n\t\t\t\t\ttransform: `translateX(${-draggedWidth}px)`,\n\t\t\t\t\ttransition: \"transform 200ms ease\",\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (from > to && index >= to && index < from) {\n\t\t\t\treturn {\n\t\t\t\t\ttransform: `translateX(${draggedWidth}px)`,\n\t\t\t\t\ttransition: \"transform 200ms ease\",\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn { transition: \"transform 200ms ease\" };\n\t\t},\n\t\t[drag],\n\t);\n\n\treturn {\n\t\tdrag,\n\t\titemsRef,\n\t\thandlePointerDown,\n\t\thandlePointerMove,\n\t\thandlePointerUp,\n\t\tgetTransform,\n\t};\n}\n\nfunction TabsBrowserList({\n\tclassName,\n\tchildren,\n\tonReorder,\n\t...props\n}: React.ComponentProps<typeof TabsPrimitive.List> & {\n\tonReorder?: (fromIndex: number, toIndex: number) => void;\n}) {\n\tconst tabsListRef = React.useRef<HTMLDivElement | null>(null);\n\n\tconst [showScrollButtons, setShowScrollButtons] = React.useState(false);\n\tconst [canScrollLeft, setCanScrollLeft] = React.useState(false);\n\tconst [canScrollRight, setCanScrollRight] = React.useState(false);\n\n\tconst {\n\t\tdrag,\n\t\titemsRef,\n\t\thandlePointerDown,\n\t\thandlePointerMove,\n\t\thandlePointerUp,\n\t\tgetTransform,\n\t} = useTabReorder(onReorder);\n\n\tconst wrappedChildren =\n\t\tonReorder && React.Children.count(children) > 1\n\t\t\t? React.Children.map(children, (child, index) => (\n\t\t\t\t\t<div\n\t\t\t\t\t\tref={(el) => {\n\t\t\t\t\t\t\titemsRef.current[index] = el;\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tstyle={getTransform(index)}\n\t\t\t\t\t\tonPointerDown={(e) => handlePointerDown(e, index)}\n\t\t\t\t\t\tonPointerMove={handlePointerMove}\n\t\t\t\t\t\tonPointerUp={handlePointerUp}\n\t\t\t\t\t\tclassName={cn(drag?.index === index && \"cursor-grabbing\")}\n\t\t\t\t\t>\n\t\t\t\t\t\t{child}\n\t\t\t\t\t</div>\n\t\t\t\t))\n\t\t\t: children;\n\n\treturn (\n\t\t<React.Fragment>\n\t\t\t{showScrollButtons && (\n\t\t\t\t<TabScrollLeftButton\n\t\t\t\t\tdisabled={!canScrollLeft}\n\t\t\t\t\tonClick={() => performHorizontalScroll(tabsListRef, \"left\")}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t<TabsList\n\t\t\t\tonLeftEdge={(edgeState) => {\n\t\t\t\t\tif (edgeState === \"touch\") {\n\t\t\t\t\t\tsetCanScrollLeft(false);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsetCanScrollLeft(true);\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\tonRightEdge={(edgeState) => {\n\t\t\t\t\tif (edgeState === \"touch\") {\n\t\t\t\t\t\tsetCanScrollRight(false);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsetCanScrollRight(true);\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\tonFlow={(flow) => {\n\t\t\t\t\tif (flow === \"overflow\") {\n\t\t\t\t\t\tsetShowScrollButtons(true);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsetShowScrollButtons(false);\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\tonResize={() => {\n\t\t\t\t\ttabsListRef.current\n\t\t\t\t\t\t?.querySelector<HTMLButtonElement>('button[data-state=\"active\"]')\n\t\t\t\t\t\t?.scrollIntoView();\n\t\t\t\t}}\n\t\t\t\tonTabChange={(entries) => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tentries.filter((entry) => entry.addedNodes.length !== 0).length !==\n\t\t\t\t\t\t0\n\t\t\t\t\t) {\n\t\t\t\t\t\ttabsListRef.current\n\t\t\t\t\t\t\t?.querySelector<HTMLButtonElement>('button[data-state=\"active\"]')\n\t\t\t\t\t\t\t?.scrollIntoView();\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\tdata-slot=\"tabs-list\"\n\t\t\t\tclassName={cn(tabsListStyles, className)}\n\t\t\t\tonWheel={(event) => horizontalScroll(event)}\n\t\t\t\t{...props}\n\t\t\t\tref={tabsListRef}\n\t\t\t>\n\t\t\t\t{wrappedChildren}\n\t\t\t</TabsList>\n\n\t\t\t{showScrollButtons && (\n\t\t\t\t<TabScrollRightButton\n\t\t\t\t\tdisabled={!canScrollRight}\n\t\t\t\t\tonClick={() => performHorizontalScroll(tabsListRef, \"right\")}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</React.Fragment>\n\t);\n}\n\nexport function TabsListDropdown({\n\ttabs,\n\thandleTabSelect,\n\thandleCloseTab,\n}: {\n\ttabs: { id: string; content: React.ReactNode }[];\n\thandleTabSelect?: (tabId: string) => void;\n\thandleCloseTab?: (tabId: string) => void;\n}) {\n\tconst [isMenuOpen, setIsMenuOpen] = React.useState(false);\n\treturn (\n\t\t<Popover open={isMenuOpen} onOpenChange={setIsMenuOpen}>\n\t\t\t<PopoverTrigger asChild>\n\t\t\t\t<Button variant=\"link\" className=\"bg-bg-secondary h-full border-b pr-6\">\n\t\t\t\t\t<ChevronDownIcon className=\"size-4\" />\n\t\t\t\t</Button>\n\t\t\t</PopoverTrigger>\n\t\t\t<PopoverContent className=\"w-80 p-0 mr-3\" align=\"end\">\n\t\t\t\t<Command>\n\t\t\t\t\t<CommandInput placeholder=\"Search tabs...\" />\n\t\t\t\t\t<CommandList>\n\t\t\t\t\t\t<CommandEmpty>Not tabs found.</CommandEmpty>\n\t\t\t\t\t\t{tabs.map((tab) => (\n\t\t\t\t\t\t\t<CommandItem\n\t\t\t\t\t\t\t\tkey={tab.id}\n\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\thandleTabSelect?.(tab.id);\n\t\t\t\t\t\t\t\t\tsetIsMenuOpen(false);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tclassName=\"group flex items-center justify-between\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{tab.content}\n\t\t\t\t\t\t\t\t{tabs.length > 1 && (\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"opacity-0 group-hover:opacity-100 transition-opacity p-1 ml-2\"\n\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\thandleCloseTab?.(tab.id);\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<X className=\"size-3\" />\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</CommandItem>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</CommandList>\n\t\t\t\t</Command>\n\t\t\t</PopoverContent>\n\t\t</Popover>\n\t);\n}\n\nfunction TabsTrigger({\n\tclassName,\n\tonClose,\n\t...props\n}: React.ComponentProps<typeof TabsPrimitive.Trigger> & {\n\tonClose?: (value: string) => void;\n}) {\n\tconst variant = React.useContext(TabsVariantContext);\n\tconst isSecondary = variant === \"secondary\";\n\tconst isTertiary = variant === \"tertiary\";\n\n\treturn (\n\t\t<TabsPrimitive.Trigger\n\t\t\tdata-slot=\"tabs-trigger\"\n\t\t\tclassName={cn(\n\t\t\t\tbaseTabsTriggerStyles,\n\t\t\t\tonClose ? \"justify-between\" : \"justify-start\",\n\t\t\t\tisSecondary && [\"body14\", \"data-[state=active]:body14bold\"],\n\t\t\t\tisTertiary && [\"typo-body\", \"data-[state=active]:typo-label\"],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{props.children}\n\n\t\t\t{onClose && (\n\t\t\t\t<Button\n\t\t\t\t\tonClick={(event) => {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\tonClose(props.value);\n\t\t\t\t\t}}\n\t\t\t\t\tvariant=\"link\"\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\tclassName=\"p-0 ml-2 opacity-0 group-hover/tabs-trigger:opacity-100 transition-opacity\"\n\t\t\t\t\tasChild\n\t\t\t\t>\n\t\t\t\t\t<span>\n\t\t\t\t\t\t<X />\n\t\t\t\t\t</span>\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t</TabsPrimitive.Trigger>\n\t);\n}\n\nfunction TabsContent({\n\tclassName,\n\t...props\n}: React.ComponentProps<typeof TabsPrimitive.Content>) {\n\treturn (\n\t\t<TabsPrimitive.Content\n\t\t\tdata-slot=\"tabs-content\"\n\t\t\tclassName={cn(tabsContentStyles, className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent, TabsBrowserList };\n"],"names":["TabsPrimitive","cva","ChevronDownIcon","ChevronLeft","ChevronRight","Plus","X","React","cn","Button","Command","CommandEmpty","CommandInput","CommandItem","CommandList","Popover","PopoverContent","PopoverTrigger","baseTabsStyles","tabsAddButtonContainerStyles","tabsListStyles","baseTabsTriggerStyles","tabsContentStyles","tabsVariants","variants","variant","browser","secondary","tertiary","TabsVariantContext","createContext","undefined","Tabs","className","props","tabProps","onValueChange","value","Provider","Root","TabsAddButton","div","data-slot","horizontalScroll","event","mode","deltaMode","deltaPx","deltaY","currentTarget","clientWidth","newScrollLeft","scrollLeft","scrollTo","left","behavior","performHorizontalScroll","tabsListRef","direction","current","scrollAmount","rightCoord","TabsList","onLeftEdge","onRightEdge","onResize","onFlow","onTabChange","tabListRef","useRef","onLeftEdgeRef","useEffect","onResizeRef","onRightEdgeRef","onFlowRef","onTabChangeRef","tabList","last","handleScroll","newState","lastState","scrollWidth","scrollCallback","_ev","resizeObserver","ResizeObserver","entries","mutationObserver","MutationObserver","mutationRecords","addEventListener","passive","observe","childList","removeEventListener","disconnect","List","ref","element","TabScrollLeftButton","disabled","onClick","size","TabScrollRightButton","DRAG_THRESHOLD","useTabReorder","onReorder","drag","setDrag","useState","dragRef","pendingRef","itemsRef","handlePointerDown","useCallback","e","index","button","items","widths","map","el","offsetWidth","lefts","acc","w","push","startX","clientX","offsetX","currentIndex","target","setPointerCapture","pointerId","handlePointerMove","d","dx","Math","abs","draggedLeft","draggedWidth","draggedRightEdge","draggedLeftEdge","newIndex","TRIGGER_RATIO","i","length","width","min","next","handlePointerUp","getTransform","transform","zIndex","position","background","borderLeft","from","to","transition","TabsBrowserList","children","showScrollButtons","setShowScrollButtons","canScrollLeft","setCanScrollLeft","canScrollRight","setCanScrollRight","wrappedChildren","Children","count","child","style","onPointerDown","onPointerMove","onPointerUp","Fragment","edgeState","flow","querySelector","scrollIntoView","filter","entry","addedNodes","onWheel","TabsListDropdown","tabs","handleTabSelect","handleCloseTab","isMenuOpen","setIsMenuOpen","open","onOpenChange","asChild","align","placeholder","tab","onSelect","id","content","stopPropagation","TabsTrigger","onClose","useContext","isSecondary","isTertiary","Trigger","span","TabsContent","Content"],"mappings":"AAAA;;AACA,YAAYA,mBAAmB,uBAAuB;AACtD,SAASC,GAAG,QAA2B,2BAA2B;AAClE,SACCC,eAAe,EACfC,WAAW,EACXC,YAAY,EACZC,IAAI,EACJC,CAAC,QACK,eAAe;AACtB,YAAYC,WAAW,QAAQ;AAC/B,SAASC,EAAE,QAAQ,qBAAoB;AACvC,SAASC,MAAM,QAAQ,cAAW;AAClC,SACCC,OAAO,EACPC,YAAY,EACZC,YAAY,EACZC,WAAW,EACXC,WAAW,QACL,eAAY;AACnB,SAASC,OAAO,EAAEC,cAAc,EAAEC,cAAc,QAAQ,eAAY;AAEpE,mBAAmB;AACnB,MAAMC,iBAAiBV,GAAG,QAAQ,YAAY;AAE9C,mCAAmC;AACnC,MAAMW,+BAA+BX,GACpC,QACA,UACA,mBACA,YACA;AAGD,mBAAmB;AACnB,MAAMY,iBAAiBZ,GACtB,eACA,SACA,gBACA;AAGD,2BAA2B;AAC3B,MAAMa,wBAAwBb,GAC7B,kBAAkB;AAClB,cACA,UACA,QACA,eACA,gBACA,kBACA,QACA,qBACA,oBAAoB;AACpB,QACA,UACA,aAAa;AACb,aACA,kBAAkB;AAClB,kBACA,sBACA,4BACA,kCACA,yCACA,6CACA,uBACA,gCACA,UAAU;AACV,cACA,wBACA,wBAAwB;AACxB,wBACA,sCACA,2BACA,cAAc;AACd,iCACA,QAAQ;AACR,+BACA,oBACA,wCACA,SAAS;AACT;AAGD,sBAAsB;AACtB,MAAMc,oBAAoBd,GAAG,QAAQ,gBAAgB;AAErD,MAAMe,eAAetB,IAAI,IAAI;IAC5BuB,UAAU;QACTC,SAAS;YACRC,SAASlB,GACR,OAAO;YACP,YACA,gBACA,QACA,WAAW;YACX,4CACA,qCACA,cAAc;YACd,wCACA,oCACA,wCACA,yEACA,gEACA,+EACA;YAEDmB,WAAWnB,GACV,WAAW;YACX,iCACA,2CACA,cAAc;YACd,oCACA,oCACA,oCACA,oCACA,mDACA,uDACA,8DACA,wEACA;YAEDoB,UAAUpB,GACT,WAAW;YACX,4CACA,qCACA,sDACA,kCACA,iCACA,iCACA,cAAc;YACd,mCACA,oCACA,uCACA,0CA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"}