@keboola/design 11.0.0 → 11.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (662) hide show
  1. package/dist/AIKit-Dre37SJr.js +1320 -0
  2. package/dist/AIKit-Dre37SJr.js.map +1 -0
  3. package/dist/Alert-DfZq9kGe.js +133 -0
  4. package/dist/Alert-DfZq9kGe.js.map +1 -0
  5. package/dist/AlertModal-BUC4Es8o.js +222 -0
  6. package/dist/AlertModal-BUC4Es8o.js.map +1 -0
  7. package/dist/AppShell-B5GQN6Zs.js +143 -0
  8. package/dist/AppShell-B5GQN6Zs.js.map +1 -0
  9. package/dist/AutoSaveTextarea-BeuWuszr.js +58 -0
  10. package/dist/{chunk-UGT6DKWM.js.map → AutoSaveTextarea-BeuWuszr.js.map} +1 -1
  11. package/dist/Badge-Ch26CXoP.js +195 -0
  12. package/dist/Badge-Ch26CXoP.js.map +1 -0
  13. package/dist/BrandEditor-B8o9zdZO.js +903 -0
  14. package/dist/BrandEditor-B8o9zdZO.js.map +1 -0
  15. package/dist/BrandLogo-CJkRd0F8.js +46 -0
  16. package/dist/BrandLogo-CJkRd0F8.js.map +1 -0
  17. package/dist/Breadcrumb-DJp7WwSv.js +330 -0
  18. package/dist/Breadcrumb-DJp7WwSv.js.map +1 -0
  19. package/dist/Button-nzmDNS2q.js +391 -0
  20. package/dist/Button-nzmDNS2q.js.map +1 -0
  21. package/dist/Calendar-cG5NIJ4O.js +6768 -0
  22. package/dist/Calendar-cG5NIJ4O.js.map +1 -0
  23. package/dist/Card-BAoZ35CV.js +105 -0
  24. package/dist/Card-BAoZ35CV.js.map +1 -0
  25. package/dist/Checkbox-GJ8-srt4.js +97 -0
  26. package/dist/Checkbox-GJ8-srt4.js.map +1 -0
  27. package/dist/Clipboard-CBJZiviP.js +58 -0
  28. package/dist/Clipboard-CBJZiviP.js.map +1 -0
  29. package/dist/ClipboardButton-ez5V3fkk.js +43 -0
  30. package/dist/ClipboardButton-ez5V3fkk.js.map +1 -0
  31. package/dist/CodeEditor-BfQJfbhL.js +952 -0
  32. package/dist/CodeEditor-BfQJfbhL.js.map +1 -0
  33. package/dist/Collapsible-BQXWEOBC.js +34 -0
  34. package/dist/Collapsible-BQXWEOBC.js.map +1 -0
  35. package/dist/ColorInput-Dx8Dsv7Y.js +180 -0
  36. package/dist/ColorInput-Dx8Dsv7Y.js.map +1 -0
  37. package/dist/ColorModeSwitch-CCqj7tjE.js +77 -0
  38. package/dist/ColorModeSwitch-CCqj7tjE.js.map +1 -0
  39. package/dist/Combobox-c_xBjf0P.js +439 -0
  40. package/dist/Combobox-c_xBjf0P.js.map +1 -0
  41. package/dist/Command-CQ_bQsJp.js +102 -0
  42. package/dist/Command-CQ_bQsJp.js.map +1 -0
  43. package/dist/CopyField-BJ96zvXs.js +322 -0
  44. package/dist/CopyField-BJ96zvXs.js.map +1 -0
  45. package/dist/DateInput-CMD3dY-T.js +141 -0
  46. package/dist/DateInput-CMD3dY-T.js.map +1 -0
  47. package/dist/DatePicker-BbFbmsGl.js +24 -0
  48. package/dist/DatePicker-BbFbmsGl.js.map +1 -0
  49. package/dist/DateRangeInput-D3BhiKyk.js +139 -0
  50. package/dist/DateRangeInput-D3BhiKyk.js.map +1 -0
  51. package/dist/DateRangePicker-BiUgtt_M.js +159 -0
  52. package/dist/DateRangePicker-BiUgtt_M.js.map +1 -0
  53. package/dist/DiagramSkeleton-lwBS2YBa.js +11 -0
  54. package/dist/DiagramSkeleton-lwBS2YBa.js.map +1 -0
  55. package/dist/DiffView-ppTIzh2h.js +429 -0
  56. package/dist/DiffView-ppTIzh2h.js.map +1 -0
  57. package/dist/DropdownMenu-B6ZbYvaM.js +327 -0
  58. package/dist/DropdownMenu-B6ZbYvaM.js.map +1 -0
  59. package/dist/FieldBox-D7DYtX_m.js +70 -0
  60. package/dist/FieldBox-D7DYtX_m.js.map +1 -0
  61. package/dist/FileUpload-sXRv7JiY.js +2527 -0
  62. package/dist/FileUpload-sXRv7JiY.js.map +1 -0
  63. package/dist/Form-BDCef6O9.js +371 -0
  64. package/dist/Form-BDCef6O9.js.map +1 -0
  65. package/dist/FormGroup-S9mPNHKH.js +124 -0
  66. package/dist/FormGroup-S9mPNHKH.js.map +1 -0
  67. package/dist/FullScreenModal-CJa2VkJ2.js +96 -0
  68. package/dist/FullScreenModal-CJa2VkJ2.js.map +1 -0
  69. package/dist/HoverCard-WfDkLK1s.js +31 -0
  70. package/dist/HoverCard-WfDkLK1s.js.map +1 -0
  71. package/dist/InputGroup-BJWsI35s.js +292 -0
  72. package/dist/InputGroup-BJWsI35s.js.map +1 -0
  73. package/dist/Kbd-CxHAo1oo.js +111 -0
  74. package/dist/Kbd-CxHAo1oo.js.map +1 -0
  75. package/dist/MarkedText-Ckbft5mw.js +44 -0
  76. package/dist/MarkedText-Ckbft5mw.js.map +1 -0
  77. package/dist/MermaidDiagram-BB06gymm.js +399 -0
  78. package/dist/MermaidDiagram-BB06gymm.js.map +1 -0
  79. package/dist/Modal-BA5Wc3sx.js +185 -0
  80. package/dist/Modal-BA5Wc3sx.js.map +1 -0
  81. package/dist/ModalTitle-C76ke2eo.js +28 -0
  82. package/dist/ModalTitle-C76ke2eo.js.map +1 -0
  83. package/dist/MultiActionButtonGroup-CiBHxsSk.js +33 -0
  84. package/dist/MultiActionButtonGroup-CiBHxsSk.js.map +1 -0
  85. package/dist/Navbar-t16usFZQ.js +322 -0
  86. package/dist/Navbar-t16usFZQ.js.map +1 -0
  87. package/dist/OtpInput-CbbymqYs.js +93 -0
  88. package/dist/OtpInput-CbbymqYs.js.map +1 -0
  89. package/dist/PageHeader-Q3IpCnQd.js +177 -0
  90. package/dist/PageHeader-Q3IpCnQd.js.map +1 -0
  91. package/dist/PageLayout-DSVM-ASz.js +176 -0
  92. package/dist/PageLayout-DSVM-ASz.js.map +1 -0
  93. package/dist/PageToolbar-0_1OBzaZ.js +153 -0
  94. package/dist/PageToolbar-0_1OBzaZ.js.map +1 -0
  95. package/dist/Pagination-CM_Rszz-.js +70 -0
  96. package/dist/Pagination-CM_Rszz-.js.map +1 -0
  97. package/dist/Popconfirm-BGe1jLov.js +170 -0
  98. package/dist/Popconfirm-BGe1jLov.js.map +1 -0
  99. package/dist/Popover-Ca0V6AD1.js +92 -0
  100. package/dist/Popover-Ca0V6AD1.js.map +1 -0
  101. package/dist/RadioGroup-sIveSsNa.js +233 -0
  102. package/dist/RadioGroup-sIveSsNa.js.map +1 -0
  103. package/dist/Resizable-D3vYToZH.js +52 -0
  104. package/dist/Resizable-D3vYToZH.js.map +1 -0
  105. package/dist/Search-3UiqNZRj.js +184 -0
  106. package/dist/Search-3UiqNZRj.js.map +1 -0
  107. package/dist/SearchInput-D2fcOv7E.js +102 -0
  108. package/dist/SearchInput-D2fcOv7E.js.map +1 -0
  109. package/dist/SectionNav--7bw2b6u.js +276 -0
  110. package/dist/SectionNav--7bw2b6u.js.map +1 -0
  111. package/dist/Select-4YX38G5h.js +181 -0
  112. package/dist/Select-4YX38G5h.js.map +1 -0
  113. package/dist/Sheet-BQrX8-h5.js +169 -0
  114. package/dist/Sheet-BQrX8-h5.js.map +1 -0
  115. package/dist/Sidebar-ROaR_AqC.js +799 -0
  116. package/dist/Sidebar-ROaR_AqC.js.map +1 -0
  117. package/dist/Slider-Da_3mS5v.js +127 -0
  118. package/dist/Slider-Da_3mS5v.js.map +1 -0
  119. package/dist/Stepper-C8sm9ZFM.js +325 -0
  120. package/dist/Stepper-C8sm9ZFM.js.map +1 -0
  121. package/dist/Switch-CX2A0v50.js +201 -0
  122. package/dist/Switch-CX2A0v50.js.map +1 -0
  123. package/dist/Table-CvYuTuNU.js +104 -0
  124. package/dist/Table-CvYuTuNU.js.map +1 -0
  125. package/dist/Tabs-EAihyqCt.js +74 -0
  126. package/dist/Tabs-EAihyqCt.js.map +1 -0
  127. package/dist/TextInput-BGed-V13.js +110 -0
  128. package/dist/TextInput-BGed-V13.js.map +1 -0
  129. package/dist/ThemeProvider-QncUrfJn.js +203 -0
  130. package/dist/ThemeProvider-QncUrfJn.js.map +1 -0
  131. package/dist/TimePicker-B_NegL-7.js +98 -0
  132. package/dist/TimePicker-B_NegL-7.js.map +1 -0
  133. package/dist/Timeline-6btyJl4D.js +154 -0
  134. package/dist/Timeline-6btyJl4D.js.map +1 -0
  135. package/dist/Toast-DQSbs3oA.js +49 -0
  136. package/dist/Toast-DQSbs3oA.js.map +1 -0
  137. package/dist/ToggleGroup-Cy_10Mvu.js +47 -0
  138. package/dist/ToggleGroup-Cy_10Mvu.js.map +1 -0
  139. package/dist/Workbench-BzE-Vvd9.js +293 -0
  140. package/dist/Workbench-BzE-Vvd9.js.map +1 -0
  141. package/dist/ZoomableSvg-DG9PnAm8.js +248 -0
  142. package/dist/ZoomableSvg-DG9PnAm8.js.map +1 -0
  143. package/dist/charts.d.ts +110 -103
  144. package/dist/charts.js +303 -254
  145. package/dist/charts.js.map +1 -1
  146. package/dist/classNames-BzrkDnOD.js +9 -0
  147. package/dist/classNames-BzrkDnOD.js.map +1 -0
  148. package/dist/constants-D6JcsD4_.d.ts +41 -0
  149. package/dist/context-KxxeMHbR.js +62 -0
  150. package/dist/context-KxxeMHbR.js.map +1 -0
  151. package/dist/editors.d.ts +180 -173
  152. package/dist/editors.js +747 -428
  153. package/dist/editors.js.map +1 -1
  154. package/dist/escapeStringRegexp-8MxP2knR.js +6 -0
  155. package/dist/escapeStringRegexp-8MxP2knR.js.map +1 -0
  156. package/dist/icons-Cek151jC.js +640 -0
  157. package/dist/icons-Cek151jC.js.map +1 -0
  158. package/dist/icons.d.ts +2 -41
  159. package/dist/icons.js +2 -9
  160. package/dist/index-m-kQEWiY.d.ts +54 -0
  161. package/dist/index.d.ts +6183 -9885
  162. package/dist/index.js +112 -124
  163. package/dist/internal/blocks/AIKit.js +2 -30
  164. package/dist/internal/blocks/AppShell.js +2 -11
  165. package/dist/internal/blocks/AutoSaveTextarea.js +2 -14
  166. package/dist/internal/blocks/BrandEditor.js +2 -23
  167. package/dist/internal/blocks/ChartPanel.js +45 -9
  168. package/dist/internal/blocks/ChartPanel.js.map +1 -1
  169. package/dist/internal/blocks/ClipboardButton.js +2 -12
  170. package/dist/internal/blocks/ColorInput.js +2 -13
  171. package/dist/internal/blocks/ColorModeSwitch.js +2 -13
  172. package/dist/internal/blocks/Command.js +2 -15
  173. package/dist/internal/blocks/CopyField.js +2 -11
  174. package/dist/internal/blocks/DashboardHero.js +58 -8
  175. package/dist/internal/blocks/DashboardHero.js.map +1 -1
  176. package/dist/internal/blocks/DateInput.js +2 -16
  177. package/dist/internal/blocks/DateRangeInput.js +2 -16
  178. package/dist/internal/blocks/EmptyConfigurationActionCard.js +15 -9
  179. package/dist/internal/blocks/EmptyConfigurationActionCard.js.map +1 -1
  180. package/dist/internal/blocks/EmptyState.js +141 -3
  181. package/dist/internal/blocks/EmptyState.js.map +1 -1
  182. package/dist/internal/blocks/ErrorState.js +178 -4
  183. package/dist/internal/blocks/ErrorState.js.map +1 -1
  184. package/dist/internal/blocks/ExportMenu.js +40 -12
  185. package/dist/internal/blocks/ExportMenu.js.map +1 -1
  186. package/dist/internal/blocks/Form.js +2 -29
  187. package/dist/internal/blocks/FormGroup.js +2 -18
  188. package/dist/internal/blocks/GoogleButton.js +94 -9
  189. package/dist/internal/blocks/GoogleButton.js.map +1 -1
  190. package/dist/internal/blocks/MicrosoftButton.js +63 -9
  191. package/dist/internal/blocks/MicrosoftButton.js.map +1 -1
  192. package/dist/internal/blocks/MultiActionButtonGroup.js +2 -12
  193. package/dist/internal/blocks/MultiCombobox.js +187 -13
  194. package/dist/internal/blocks/MultiCombobox.js.map +1 -1
  195. package/dist/internal/blocks/NumberInput.js +43 -11
  196. package/dist/internal/blocks/NumberInput.js.map +1 -1
  197. package/dist/internal/blocks/OtpInput.js +2 -10
  198. package/dist/internal/blocks/PageHeader.js +2 -9
  199. package/dist/internal/blocks/PageLayout.js +2 -9
  200. package/dist/internal/blocks/PageToolbar.js +2 -13
  201. package/dist/internal/blocks/PasswordInput.js +96 -12
  202. package/dist/internal/blocks/PasswordInput.js.map +1 -1
  203. package/dist/internal/blocks/SearchInput.js +2 -12
  204. package/dist/internal/blocks/SearchInputWithNavigation.js +64 -15
  205. package/dist/internal/blocks/SearchInputWithNavigation.js.map +1 -1
  206. package/dist/internal/blocks/SectionNav.js +2 -15
  207. package/dist/internal/blocks/SplitButton.js +45 -13
  208. package/dist/internal/blocks/SplitButton.js.map +1 -1
  209. package/dist/internal/blocks/StatCard.js +96 -9
  210. package/dist/internal/blocks/StatCard.js.map +1 -1
  211. package/dist/internal/blocks/TextInput.js +2 -13
  212. package/dist/internal/blocks/Textarea.js +31 -12
  213. package/dist/internal/blocks/Textarea.js.map +1 -1
  214. package/dist/internal/blocks/TimeInput.js +76 -16
  215. package/dist/internal/blocks/TimeInput.js.map +1 -1
  216. package/dist/internal/components/Alert.js +2 -11
  217. package/dist/internal/components/AlertModal.js +2 -11
  218. package/dist/internal/components/Avatar.js +52 -8
  219. package/dist/internal/components/Avatar.js.map +1 -1
  220. package/dist/internal/components/Badge.js +2 -9
  221. package/dist/internal/components/BrandLogo.js +2 -11
  222. package/dist/internal/components/Breadcrumb.js +2 -14
  223. package/dist/internal/components/Button.js +2 -10
  224. package/dist/internal/components/ButtonGroup.js +65 -8
  225. package/dist/internal/components/ButtonGroup.js.map +1 -1
  226. package/dist/internal/components/Calendar.js +2 -9
  227. package/dist/internal/components/Card.js +2 -9
  228. package/dist/internal/components/Checkbox.js +2 -11
  229. package/dist/internal/components/Clipboard.js +2 -9
  230. package/dist/internal/components/Collapsible.js +2 -9
  231. package/dist/internal/components/CollapsiblePanel.js +86 -10
  232. package/dist/internal/components/CollapsiblePanel.js.map +1 -1
  233. package/dist/internal/components/Combobox.js +2 -13
  234. package/dist/internal/components/DatePicker.js +2 -11
  235. package/dist/internal/components/DateRangePicker.js +2 -17
  236. package/dist/internal/components/DiffView.js +2 -9
  237. package/dist/internal/components/DotsLoader.js +17 -4
  238. package/dist/internal/components/DotsLoader.js.map +1 -1
  239. package/dist/internal/components/DropdownMenu.js +2 -11
  240. package/dist/internal/components/EmptySearchContent.js +11 -3
  241. package/dist/internal/components/EmptySearchContent.js.map +1 -1
  242. package/dist/internal/components/FileUpload.js +2 -11
  243. package/dist/internal/components/FullScreenModal.js +2 -12
  244. package/dist/internal/components/HelpBlock.js +24 -3
  245. package/dist/internal/components/HelpBlock.js.map +1 -1
  246. package/dist/internal/components/HoverCard.js +2 -9
  247. package/dist/internal/components/InputGroup.js +2 -11
  248. package/dist/internal/components/Kbd.js +2 -9
  249. package/dist/internal/components/Label.js +38 -8
  250. package/dist/internal/components/Label.js.map +1 -1
  251. package/dist/internal/components/Link.js +21 -8
  252. package/dist/internal/components/Link.js.map +1 -1
  253. package/dist/internal/components/MarkedText.js +2 -5
  254. package/dist/internal/components/MergeEditor/ConflictStatus/ConflictStatusIndicator.js +19 -9
  255. package/dist/internal/components/MergeEditor/ConflictStatus/ConflictStatusIndicator.js.map +1 -1
  256. package/dist/internal/components/MergeEditor/PaneHeader.js +12 -3
  257. package/dist/internal/components/MergeEditor/PaneHeader.js.map +1 -1
  258. package/dist/internal/components/MergeEditor/constants.js +17 -3
  259. package/dist/internal/components/MergeEditor/constants.js.map +1 -1
  260. package/dist/internal/components/MergeEditor/useMergeDiff.js +2 -5
  261. package/dist/internal/components/Modal.js +2 -13
  262. package/dist/internal/components/Navbar.js +2 -14
  263. package/dist/internal/components/Pagination.js +2 -11
  264. package/dist/internal/components/PanelWithDetails.js +30 -10
  265. package/dist/internal/components/PanelWithDetails.js.map +1 -1
  266. package/dist/internal/components/Popconfirm.js +2 -12
  267. package/dist/internal/components/Popover.js +2 -9
  268. package/dist/internal/components/Progress.js +46 -8
  269. package/dist/internal/components/Progress.js.map +1 -1
  270. package/dist/internal/components/RadioGroup.js +2 -12
  271. package/dist/internal/components/Resizable.js +2 -9
  272. package/dist/internal/components/ScrollArea.js +41 -8
  273. package/dist/internal/components/ScrollArea.js.map +1 -1
  274. package/dist/internal/components/Search.js +2 -10
  275. package/dist/internal/components/Select.js +2 -12
  276. package/dist/internal/components/Separator.js +83 -8
  277. package/dist/internal/components/Separator.js.map +1 -1
  278. package/dist/internal/components/Sheet.js +2 -12
  279. package/dist/internal/components/Sidebar.js +2 -20
  280. package/dist/internal/components/Skeleton/Skeleton.js +38 -8
  281. package/dist/internal/components/Skeleton/Skeleton.js.map +1 -1
  282. package/dist/internal/components/Skeleton/SkeletonList.js +40 -9
  283. package/dist/internal/components/Skeleton/SkeletonList.js.map +1 -1
  284. package/dist/internal/components/Slider.js +2 -11
  285. package/dist/internal/components/SpotlightBackdrop.js +131 -8
  286. package/dist/internal/components/SpotlightBackdrop.js.map +1 -1
  287. package/dist/internal/components/Stepper.js +2 -10
  288. package/dist/internal/components/Switch.js +2 -10
  289. package/dist/internal/components/Table.js +2 -10
  290. package/dist/internal/components/Tabs.js +2 -12
  291. package/dist/internal/components/ThemeProvider.js +3 -10
  292. package/dist/internal/components/TimePicker.js +2 -12
  293. package/dist/internal/components/Timeline.js +2 -10
  294. package/dist/internal/components/Toast.js +3 -11
  295. package/dist/internal/components/Toggle.js +168 -8
  296. package/dist/internal/components/Toggle.js.map +1 -1
  297. package/dist/internal/components/ToggleGroup.js +2 -9
  298. package/dist/internal/components/Tooltip.js +2 -8
  299. package/dist/internal/components/Truncated.js +44 -8
  300. package/dist/internal/components/Truncated.js.map +1 -1
  301. package/dist/internal/components/Workbench.js +2 -11
  302. package/dist/internal/components/ZoomableSvg.js +2 -13
  303. package/dist/internal/hooks/useAutosizeInput.js +76 -3
  304. package/dist/internal/hooks/useAutosizeInput.js.map +1 -1
  305. package/dist/internal/hooks/useScrollbarPosition.js +44 -4
  306. package/dist/internal/hooks/useScrollbarPosition.js.map +1 -1
  307. package/dist/internal/hooks/useStableCallback.js +28 -3
  308. package/dist/internal/hooks/useStableCallback.js.map +1 -1
  309. package/dist/internal/utils/mergeRefs.js +19 -3
  310. package/dist/internal/utils/mergeRefs.js.map +1 -1
  311. package/dist/internal/utils.js +5 -8
  312. package/dist/markdown-editor.d.ts +72 -72
  313. package/dist/markdown-editor.js +1122 -1207
  314. package/dist/markdown-editor.js.map +1 -1
  315. package/dist/mermaid.d.ts +12 -12
  316. package/dist/mermaid.js +2 -18
  317. package/dist/rjsf.d.ts +33 -34
  318. package/dist/rjsf.js +1541 -1671
  319. package/dist/rjsf.js.map +1 -1
  320. package/dist/rolldown-runtime-Bdc48AWt.js +33 -0
  321. package/dist/styles-DSUP_-9Z.js +158 -0
  322. package/dist/styles-DSUP_-9Z.js.map +1 -0
  323. package/dist/testing.d.ts +8 -7
  324. package/dist/testing.js +36 -21
  325. package/dist/testing.js.map +1 -1
  326. package/dist/themeTokens-BNg98Mu9.js +85 -0
  327. package/dist/themeTokens-BNg98Mu9.js.map +1 -0
  328. package/dist/toast-CjkURw0M.js +184 -0
  329. package/dist/toast-CjkURw0M.js.map +1 -0
  330. package/dist/useColorSchemeState-CYqcUfSH.js +61 -0
  331. package/dist/useColorSchemeState-CYqcUfSH.js.map +1 -0
  332. package/dist/useControllableState-M6494mCT.js +31 -0
  333. package/dist/useControllableState-M6494mCT.js.map +1 -0
  334. package/dist/useElement-DkF6esWL.js +15 -0
  335. package/dist/useElement-DkF6esWL.js.map +1 -0
  336. package/dist/useMergeDiff-CvowEXJ1.js +465 -0
  337. package/dist/useMergeDiff-CvowEXJ1.js.map +1 -0
  338. package/dist/utils-D0c5VAyF.js +308 -0
  339. package/dist/utils-D0c5VAyF.js.map +1 -0
  340. package/package.json +8 -8
  341. package/dist/MermaidDiagram-ZU5KAVRT.js +0 -18
  342. package/dist/MermaidDiagram-ZU5KAVRT.js.map +0 -1
  343. package/dist/chunk-2YYJDKSP.js +0 -51
  344. package/dist/chunk-2YYJDKSP.js.map +0 -1
  345. package/dist/chunk-3P5UUCFI.js +0 -385
  346. package/dist/chunk-3P5UUCFI.js.map +0 -1
  347. package/dist/chunk-3QDFDDWZ.js +0 -99
  348. package/dist/chunk-3QDFDDWZ.js.map +0 -1
  349. package/dist/chunk-3W27OLK5.js +0 -15
  350. package/dist/chunk-3W27OLK5.js.map +0 -1
  351. package/dist/chunk-4FIZZONW.js +0 -40
  352. package/dist/chunk-4FIZZONW.js.map +0 -1
  353. package/dist/chunk-4GIAXOJG.js +0 -133
  354. package/dist/chunk-4GIAXOJG.js.map +0 -1
  355. package/dist/chunk-52NDNMK7.js +0 -99
  356. package/dist/chunk-52NDNMK7.js.map +0 -1
  357. package/dist/chunk-576G5OES.js +0 -201
  358. package/dist/chunk-576G5OES.js.map +0 -1
  359. package/dist/chunk-5AIE6SET.js +0 -659
  360. package/dist/chunk-5AIE6SET.js.map +0 -1
  361. package/dist/chunk-5FTNAZRW.js +0 -327
  362. package/dist/chunk-5FTNAZRW.js.map +0 -1
  363. package/dist/chunk-5IG2S7ZY.js +0 -70
  364. package/dist/chunk-5IG2S7ZY.js.map +0 -1
  365. package/dist/chunk-5QCXHNCW.js +0 -404
  366. package/dist/chunk-5QCXHNCW.js.map +0 -1
  367. package/dist/chunk-6DUMGC7Y.js +0 -105
  368. package/dist/chunk-6DUMGC7Y.js.map +0 -1
  369. package/dist/chunk-6J25CVST.js +0 -174
  370. package/dist/chunk-6J25CVST.js.map +0 -1
  371. package/dist/chunk-6NN35XOP.js +0 -120
  372. package/dist/chunk-6NN35XOP.js.map +0 -1
  373. package/dist/chunk-6NZBVA4T.js +0 -24
  374. package/dist/chunk-6NZBVA4T.js.map +0 -1
  375. package/dist/chunk-6W5BHRCL.js +0 -295
  376. package/dist/chunk-6W5BHRCL.js.map +0 -1
  377. package/dist/chunk-72BKRCEG.js +0 -409
  378. package/dist/chunk-72BKRCEG.js.map +0 -1
  379. package/dist/chunk-7GTI3PPI.js +0 -95
  380. package/dist/chunk-7GTI3PPI.js.map +0 -1
  381. package/dist/chunk-7P6PLZ4B.js +0 -74
  382. package/dist/chunk-7P6PLZ4B.js.map +0 -1
  383. package/dist/chunk-7WZWY5IA.js +0 -46
  384. package/dist/chunk-7WZWY5IA.js.map +0 -1
  385. package/dist/chunk-AIYO2632.js +0 -489
  386. package/dist/chunk-AIYO2632.js.map +0 -1
  387. package/dist/chunk-ANFZWPNE.js +0 -112
  388. package/dist/chunk-ANFZWPNE.js.map +0 -1
  389. package/dist/chunk-ANZTVAJU.js +0 -73
  390. package/dist/chunk-ANZTVAJU.js.map +0 -1
  391. package/dist/chunk-BD5BTJKX.js +0 -166
  392. package/dist/chunk-BD5BTJKX.js.map +0 -1
  393. package/dist/chunk-BHGIDSRJ.js +0 -140
  394. package/dist/chunk-BHGIDSRJ.js.map +0 -1
  395. package/dist/chunk-BSQWZITZ.js +0 -507
  396. package/dist/chunk-BSQWZITZ.js.map +0 -1
  397. package/dist/chunk-D3LAIK62.js +0 -23
  398. package/dist/chunk-D3LAIK62.js.map +0 -1
  399. package/dist/chunk-DODCR43C.js +0 -155
  400. package/dist/chunk-DODCR43C.js.map +0 -1
  401. package/dist/chunk-EEK5NGZF.js +0 -40
  402. package/dist/chunk-EEK5NGZF.js.map +0 -1
  403. package/dist/chunk-ENRG7TXA.js +0 -11
  404. package/dist/chunk-ENRG7TXA.js.map +0 -1
  405. package/dist/chunk-EQRMGIGY.js +0 -239
  406. package/dist/chunk-EQRMGIGY.js.map +0 -1
  407. package/dist/chunk-ERAHK5YQ.js +0 -495
  408. package/dist/chunk-ERAHK5YQ.js.map +0 -1
  409. package/dist/chunk-F3FOFY2P.js +0 -124
  410. package/dist/chunk-F3FOFY2P.js.map +0 -1
  411. package/dist/chunk-F6BTWFOC.js +0 -507
  412. package/dist/chunk-F6BTWFOC.js.map +0 -1
  413. package/dist/chunk-F6J6NNAL.js +0 -34
  414. package/dist/chunk-F6J6NNAL.js.map +0 -1
  415. package/dist/chunk-FCHJ7D5O.js +0 -59
  416. package/dist/chunk-FCHJ7D5O.js.map +0 -1
  417. package/dist/chunk-FFJTEQCC.js +0 -80
  418. package/dist/chunk-FFJTEQCC.js.map +0 -1
  419. package/dist/chunk-FUFMVW7O.js +0 -64
  420. package/dist/chunk-FUFMVW7O.js.map +0 -1
  421. package/dist/chunk-FVPGQ6UE.js +0 -25
  422. package/dist/chunk-FVPGQ6UE.js.map +0 -1
  423. package/dist/chunk-G3PMV62Z.js +0 -33
  424. package/dist/chunk-G3PMV62Z.js.map +0 -1
  425. package/dist/chunk-GACFOW3E.js +0 -51
  426. package/dist/chunk-GACFOW3E.js.map +0 -1
  427. package/dist/chunk-GDT6HQMK.js +0 -42
  428. package/dist/chunk-GDT6HQMK.js.map +0 -1
  429. package/dist/chunk-HLGU22C6.js +0 -2589
  430. package/dist/chunk-HLGU22C6.js.map +0 -1
  431. package/dist/chunk-HPMYYGP7.js +0 -134
  432. package/dist/chunk-HPMYYGP7.js.map +0 -1
  433. package/dist/chunk-I2UCOD45.js +0 -197
  434. package/dist/chunk-I2UCOD45.js.map +0 -1
  435. package/dist/chunk-IEGDZUVM.js +0 -75
  436. package/dist/chunk-IEGDZUVM.js.map +0 -1
  437. package/dist/chunk-IIS7INHF.js +0 -47
  438. package/dist/chunk-IIS7INHF.js.map +0 -1
  439. package/dist/chunk-ITELSEFU.js +0 -256
  440. package/dist/chunk-ITELSEFU.js.map +0 -1
  441. package/dist/chunk-IXAYNBOY.js +0 -407
  442. package/dist/chunk-IXAYNBOY.js.map +0 -1
  443. package/dist/chunk-JUW2ETEI.js +0 -191
  444. package/dist/chunk-JUW2ETEI.js.map +0 -1
  445. package/dist/chunk-K65C7CVE.js +0 -127
  446. package/dist/chunk-K65C7CVE.js.map +0 -1
  447. package/dist/chunk-KDI64MCY.js +0 -189
  448. package/dist/chunk-KDI64MCY.js.map +0 -1
  449. package/dist/chunk-KN4ASMH5.js +0 -160
  450. package/dist/chunk-KN4ASMH5.js.map +0 -1
  451. package/dist/chunk-KQW7QNTU.js +0 -1549
  452. package/dist/chunk-KQW7QNTU.js.map +0 -1
  453. package/dist/chunk-KR7NXXHC.js +0 -66
  454. package/dist/chunk-KR7NXXHC.js.map +0 -1
  455. package/dist/chunk-KRZKIVMA.js +0 -142
  456. package/dist/chunk-KRZKIVMA.js.map +0 -1
  457. package/dist/chunk-KTTLLKGQ.js +0 -185
  458. package/dist/chunk-KTTLLKGQ.js.map +0 -1
  459. package/dist/chunk-KWKSHPDP.js +0 -234
  460. package/dist/chunk-KWKSHPDP.js.map +0 -1
  461. package/dist/chunk-KZVC7OYG.js +0 -57
  462. package/dist/chunk-KZVC7OYG.js.map +0 -1
  463. package/dist/chunk-L5DHUN2V.js +0 -204
  464. package/dist/chunk-L5DHUN2V.js.map +0 -1
  465. package/dist/chunk-LCTGEH57.js +0 -1376
  466. package/dist/chunk-LCTGEH57.js.map +0 -1
  467. package/dist/chunk-LXLIQ2D6.js +0 -12
  468. package/dist/chunk-LXLIQ2D6.js.map +0 -1
  469. package/dist/chunk-M4CTURKX.js +0 -84
  470. package/dist/chunk-M4CTURKX.js.map +0 -1
  471. package/dist/chunk-M6LTUPVP.js +0 -301
  472. package/dist/chunk-M6LTUPVP.js.map +0 -1
  473. package/dist/chunk-MA6RRHDT.js +0 -291
  474. package/dist/chunk-MA6RRHDT.js.map +0 -1
  475. package/dist/chunk-MODE4QIA.js +0 -6
  476. package/dist/chunk-MODE4QIA.js.map +0 -1
  477. package/dist/chunk-MVILMVGG.js +0 -118
  478. package/dist/chunk-MVILMVGG.js.map +0 -1
  479. package/dist/chunk-MWS4VCLV.js +0 -17
  480. package/dist/chunk-MWS4VCLV.js.map +0 -1
  481. package/dist/chunk-NEUX74SO.js +0 -315
  482. package/dist/chunk-NEUX74SO.js.map +0 -1
  483. package/dist/chunk-NFHKYBRD.js +0 -156
  484. package/dist/chunk-NFHKYBRD.js.map +0 -1
  485. package/dist/chunk-NHJNNXD3.js +0 -89
  486. package/dist/chunk-NHJNNXD3.js.map +0 -1
  487. package/dist/chunk-O2BF3HZL.js +0 -33
  488. package/dist/chunk-O2BF3HZL.js.map +0 -1
  489. package/dist/chunk-OANXCZYD.js +0 -212
  490. package/dist/chunk-OANXCZYD.js.map +0 -1
  491. package/dist/chunk-ODJF7YIP.js +0 -230
  492. package/dist/chunk-ODJF7YIP.js.map +0 -1
  493. package/dist/chunk-ON4BJTHI.js +0 -101
  494. package/dist/chunk-ON4BJTHI.js.map +0 -1
  495. package/dist/chunk-OTL5WXIJ.js +0 -16
  496. package/dist/chunk-OTL5WXIJ.js.map +0 -1
  497. package/dist/chunk-PACNBKJV.js +0 -47
  498. package/dist/chunk-PACNBKJV.js.map +0 -1
  499. package/dist/chunk-PROCA7K7.js +0 -23
  500. package/dist/chunk-PROCA7K7.js.map +0 -1
  501. package/dist/chunk-QGMIPA67.js +0 -85
  502. package/dist/chunk-QGMIPA67.js.map +0 -1
  503. package/dist/chunk-QQA37LFB.js +0 -190
  504. package/dist/chunk-QQA37LFB.js.map +0 -1
  505. package/dist/chunk-QZAWRSEB.js +0 -61
  506. package/dist/chunk-QZAWRSEB.js.map +0 -1
  507. package/dist/chunk-R74KGWNS.js +0 -699
  508. package/dist/chunk-R74KGWNS.js.map +0 -1
  509. package/dist/chunk-RFDLHMKL.js +0 -110
  510. package/dist/chunk-RFDLHMKL.js.map +0 -1
  511. package/dist/chunk-RL64HN7S.js +0 -40
  512. package/dist/chunk-RL64HN7S.js.map +0 -1
  513. package/dist/chunk-RMRQKPL7.js +0 -115
  514. package/dist/chunk-RMRQKPL7.js.map +0 -1
  515. package/dist/chunk-RQVK4IYC.js +0 -606
  516. package/dist/chunk-RQVK4IYC.js.map +0 -1
  517. package/dist/chunk-RTW56PWZ.js +0 -59
  518. package/dist/chunk-RTW56PWZ.js.map +0 -1
  519. package/dist/chunk-RUTPQNLR.js +0 -266
  520. package/dist/chunk-RUTPQNLR.js.map +0 -1
  521. package/dist/chunk-S6TAF63G.js +0 -25
  522. package/dist/chunk-S6TAF63G.js.map +0 -1
  523. package/dist/chunk-SBGAUGXY.js +0 -224
  524. package/dist/chunk-SBGAUGXY.js.map +0 -1
  525. package/dist/chunk-SC275NHZ.js +0 -407
  526. package/dist/chunk-SC275NHZ.js.map +0 -1
  527. package/dist/chunk-SCQPU4UE.js +0 -97
  528. package/dist/chunk-SCQPU4UE.js.map +0 -1
  529. package/dist/chunk-SFFF2WQP.js +0 -8
  530. package/dist/chunk-SFFF2WQP.js.map +0 -1
  531. package/dist/chunk-SJYMHZKA.js +0 -36
  532. package/dist/chunk-SJYMHZKA.js.map +0 -1
  533. package/dist/chunk-SLCCUJVN.js +0 -125
  534. package/dist/chunk-SLCCUJVN.js.map +0 -1
  535. package/dist/chunk-SVBSNSD4.js +0 -259
  536. package/dist/chunk-SVBSNSD4.js.map +0 -1
  537. package/dist/chunk-SVPLTL35.js +0 -62
  538. package/dist/chunk-SVPLTL35.js.map +0 -1
  539. package/dist/chunk-SWQFYNYG.js +0 -338
  540. package/dist/chunk-SWQFYNYG.js.map +0 -1
  541. package/dist/chunk-THHB4EWS.js +0 -72
  542. package/dist/chunk-THHB4EWS.js.map +0 -1
  543. package/dist/chunk-TUCDD33E.js +0 -246
  544. package/dist/chunk-TUCDD33E.js.map +0 -1
  545. package/dist/chunk-TV4WAP2R.js +0 -14
  546. package/dist/chunk-TV4WAP2R.js.map +0 -1
  547. package/dist/chunk-U3A6YBTZ.js +0 -134
  548. package/dist/chunk-U3A6YBTZ.js.map +0 -1
  549. package/dist/chunk-UGT6DKWM.js +0 -95
  550. package/dist/chunk-VSERHUWD.js +0 -212
  551. package/dist/chunk-VSERHUWD.js.map +0 -1
  552. package/dist/chunk-VYG7BDXC.js +0 -49
  553. package/dist/chunk-VYG7BDXC.js.map +0 -1
  554. package/dist/chunk-WETKNYZX.js +0 -52
  555. package/dist/chunk-WETKNYZX.js.map +0 -1
  556. package/dist/chunk-WGG4AML3.js +0 -216
  557. package/dist/chunk-WGG4AML3.js.map +0 -1
  558. package/dist/chunk-WKAUEL6I.js +0 -30
  559. package/dist/chunk-WKAUEL6I.js.map +0 -1
  560. package/dist/chunk-WPOLA5CG.js +0 -81
  561. package/dist/chunk-WPOLA5CG.js.map +0 -1
  562. package/dist/chunk-WPVETCGJ.js +0 -254
  563. package/dist/chunk-WPVETCGJ.js.map +0 -1
  564. package/dist/chunk-WTSM3A7E.js +0 -13
  565. package/dist/chunk-WTSM3A7E.js.map +0 -1
  566. package/dist/chunk-WU3F2K3T.js +0 -148
  567. package/dist/chunk-WU3F2K3T.js.map +0 -1
  568. package/dist/chunk-WZZK2DTZ.js +0 -39
  569. package/dist/chunk-WZZK2DTZ.js.map +0 -1
  570. package/dist/chunk-X4IHLKRD.js +0 -42
  571. package/dist/chunk-X4IHLKRD.js.map +0 -1
  572. package/dist/chunk-XAHEXZJC.js +0 -80
  573. package/dist/chunk-XAHEXZJC.js.map +0 -1
  574. package/dist/chunk-XCYGJDUX.js +0 -31
  575. package/dist/chunk-XCYGJDUX.js.map +0 -1
  576. package/dist/chunk-Y4W3JORC.js +0 -104
  577. package/dist/chunk-Y4W3JORC.js.map +0 -1
  578. package/dist/chunk-YFZJ3ZLG.js +0 -1297
  579. package/dist/chunk-YFZJ3ZLG.js.map +0 -1
  580. package/dist/chunk-YI3WLXEN.js +0 -4387
  581. package/dist/chunk-YI3WLXEN.js.map +0 -1
  582. package/dist/chunk-ZBKFSPD3.js +0 -29
  583. package/dist/chunk-ZBKFSPD3.js.map +0 -1
  584. package/dist/chunk-ZOERRQ6A.js +0 -79
  585. package/dist/chunk-ZOERRQ6A.js.map +0 -1
  586. package/dist/chunk-ZSTGUKHU.js +0 -10
  587. package/dist/chunk-ZSTGUKHU.js.map +0 -1
  588. package/dist/chunk-ZUEHDL27.js +0 -65
  589. package/dist/chunk-ZUEHDL27.js.map +0 -1
  590. package/dist/constants-D3gaMY-W.d.ts +0 -39
  591. package/dist/icons.js.map +0 -1
  592. package/dist/index.js.map +0 -1
  593. package/dist/internal/blocks/AIKit.js.map +0 -1
  594. package/dist/internal/blocks/AppShell.js.map +0 -1
  595. package/dist/internal/blocks/AutoSaveTextarea.js.map +0 -1
  596. package/dist/internal/blocks/BrandEditor.js.map +0 -1
  597. package/dist/internal/blocks/ClipboardButton.js.map +0 -1
  598. package/dist/internal/blocks/ColorInput.js.map +0 -1
  599. package/dist/internal/blocks/ColorModeSwitch.js.map +0 -1
  600. package/dist/internal/blocks/Command.js.map +0 -1
  601. package/dist/internal/blocks/CopyField.js.map +0 -1
  602. package/dist/internal/blocks/DateInput.js.map +0 -1
  603. package/dist/internal/blocks/DateRangeInput.js.map +0 -1
  604. package/dist/internal/blocks/Form.js.map +0 -1
  605. package/dist/internal/blocks/FormGroup.js.map +0 -1
  606. package/dist/internal/blocks/MultiActionButtonGroup.js.map +0 -1
  607. package/dist/internal/blocks/OtpInput.js.map +0 -1
  608. package/dist/internal/blocks/PageHeader.js.map +0 -1
  609. package/dist/internal/blocks/PageLayout.js.map +0 -1
  610. package/dist/internal/blocks/PageToolbar.js.map +0 -1
  611. package/dist/internal/blocks/SearchInput.js.map +0 -1
  612. package/dist/internal/blocks/SectionNav.js.map +0 -1
  613. package/dist/internal/blocks/TextInput.js.map +0 -1
  614. package/dist/internal/components/Alert.js.map +0 -1
  615. package/dist/internal/components/AlertModal.js.map +0 -1
  616. package/dist/internal/components/Badge.js.map +0 -1
  617. package/dist/internal/components/BrandLogo.js.map +0 -1
  618. package/dist/internal/components/Breadcrumb.js.map +0 -1
  619. package/dist/internal/components/Button.js.map +0 -1
  620. package/dist/internal/components/Calendar.js.map +0 -1
  621. package/dist/internal/components/Card.js.map +0 -1
  622. package/dist/internal/components/Checkbox.js.map +0 -1
  623. package/dist/internal/components/Clipboard.js.map +0 -1
  624. package/dist/internal/components/Collapsible.js.map +0 -1
  625. package/dist/internal/components/Combobox.js.map +0 -1
  626. package/dist/internal/components/DatePicker.js.map +0 -1
  627. package/dist/internal/components/DateRangePicker.js.map +0 -1
  628. package/dist/internal/components/DiffView.js.map +0 -1
  629. package/dist/internal/components/DropdownMenu.js.map +0 -1
  630. package/dist/internal/components/FileUpload.js.map +0 -1
  631. package/dist/internal/components/FullScreenModal.js.map +0 -1
  632. package/dist/internal/components/HoverCard.js.map +0 -1
  633. package/dist/internal/components/InputGroup.js.map +0 -1
  634. package/dist/internal/components/Kbd.js.map +0 -1
  635. package/dist/internal/components/MarkedText.js.map +0 -1
  636. package/dist/internal/components/MergeEditor/useMergeDiff.js.map +0 -1
  637. package/dist/internal/components/Modal.js.map +0 -1
  638. package/dist/internal/components/Navbar.js.map +0 -1
  639. package/dist/internal/components/Pagination.js.map +0 -1
  640. package/dist/internal/components/Popconfirm.js.map +0 -1
  641. package/dist/internal/components/Popover.js.map +0 -1
  642. package/dist/internal/components/RadioGroup.js.map +0 -1
  643. package/dist/internal/components/Resizable.js.map +0 -1
  644. package/dist/internal/components/Search.js.map +0 -1
  645. package/dist/internal/components/Select.js.map +0 -1
  646. package/dist/internal/components/Sheet.js.map +0 -1
  647. package/dist/internal/components/Sidebar.js.map +0 -1
  648. package/dist/internal/components/Slider.js.map +0 -1
  649. package/dist/internal/components/Stepper.js.map +0 -1
  650. package/dist/internal/components/Switch.js.map +0 -1
  651. package/dist/internal/components/Table.js.map +0 -1
  652. package/dist/internal/components/Tabs.js.map +0 -1
  653. package/dist/internal/components/ThemeProvider.js.map +0 -1
  654. package/dist/internal/components/TimePicker.js.map +0 -1
  655. package/dist/internal/components/Timeline.js.map +0 -1
  656. package/dist/internal/components/Toast.js.map +0 -1
  657. package/dist/internal/components/ToggleGroup.js.map +0 -1
  658. package/dist/internal/components/Tooltip.js.map +0 -1
  659. package/dist/internal/components/Workbench.js.map +0 -1
  660. package/dist/internal/components/ZoomableSvg.js.map +0 -1
  661. package/dist/internal/utils.js.map +0 -1
  662. package/dist/mermaid.js.map +0 -1
package/dist/editors.js CHANGED
@@ -1,441 +1,760 @@
1
- import { LINE_HEIGHT_PX, PANE_HEADER_HEIGHT_PX, CHANGE_CLASS } from './chunk-OTL5WXIJ.js';
2
- import { useThemedExtension, buildBasicSetup } from './chunk-YFZJ3ZLG.js';
3
- export { CodeEditor, LANGUAGE_MODES, SqlEditor, isLanguageMode } from './chunk-YFZJ3ZLG.js';
4
- import { useStableCallback } from './chunk-TV4WAP2R.js';
5
- import './chunk-7GTI3PPI.js';
6
- import { resolveToken } from './chunk-IIS7INHF.js';
7
- import './chunk-FUFMVW7O.js';
8
- import './chunk-7P6PLZ4B.js';
9
- import './chunk-PROCA7K7.js';
10
- import { Button } from './chunk-IXAYNBOY.js';
11
- import { X, ChevronsRight, ChevronsLeft } from './chunk-RQVK4IYC.js';
12
- import './chunk-KR7NXXHC.js';
13
- import './chunk-SWQFYNYG.js';
14
- import './chunk-3W27OLK5.js';
15
- import './chunk-MODE4QIA.js';
16
- import './chunk-WETKNYZX.js';
17
- import { cn } from './chunk-LXLIQ2D6.js';
18
- import './chunk-G3PMV62Z.js';
19
- import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
20
- import { useRef, useCallback, useMemo, useEffect } from 'react';
21
- import { Decoration, GutterMarker, EditorView, gutterLineClass } from '@codemirror/view';
22
- import CodeMirror from '@uiw/react-codemirror';
23
- import colors from '@keboola/tailwind-config/colors';
24
- import { StateEffect, StateField, RangeSet, RangeSetBuilder } from '@codemirror/state';
25
-
26
- var AcceptButton = ({ side, onAccept }) => {
27
- const label = `Accept ${side === "left" ? "production" : "branch"} version`;
28
- const Chevron = side === "left" ? ChevronsRight : ChevronsLeft;
29
- return /* @__PURE__ */ jsx(Button, { onClick: onAccept, variant: "outline", size: "icon-sm", title: label, "aria-label": label, children: /* @__PURE__ */ jsx(Chevron, { className: "tw:size-5" }) });
1
+ import { cn } from "./classNames-BzrkDnOD.js";
2
+ import { ChevronsLeft, ChevronsRight, X } from "./icons-Cek151jC.js";
3
+ import { Button } from "./Button-nzmDNS2q.js";
4
+ import { CHANGE_CLASS } from "./internal/components/MergeEditor/constants.js";
5
+ import { useStableCallback } from "./internal/hooks/useStableCallback.js";
6
+ import { resolveToken } from "./themeTokens-BNg98Mu9.js";
7
+ import { CodeEditor, LANGUAGE_MODES, buildBaseThemeStyles, buildBasicSetup, buildCanvasChrome, buildChromeStyles, buildCustomTheme, isLanguageMode, searchExtension, updateSearch, useThemedExtension, useTooltipsExtension, useVariableCompletion } from "./CodeEditor-BfQJfbhL.js";
8
+ import { useCallback, useEffect, useMemo, useRef } from "react";
9
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
10
+ import { Decoration, EditorView, GutterMarker, ViewPlugin, gutter, gutterLineClass } from "@codemirror/view";
11
+ import CodeMirror, { EditorView as EditorView$1, keymap as keymap$1 } from "@uiw/react-codemirror";
12
+ import colors from "@keboola/tailwind-config/colors";
13
+ import { installExtensions } from "@keboola/codemirror-lang-sql";
14
+ import { RangeSet, RangeSetBuilder, StateEffect, StateField } from "@codemirror/state";
15
+ import { defaultKeymap } from "@codemirror/commands";
16
+ //#region src/components/CodeEditor/activeQueryHighlight.ts
17
+ const activeQueryFirstLine = Decoration.line({ class: "cm-active-query cm-active-query-first" });
18
+ const activeQueryMiddleLine = Decoration.line({ class: "cm-active-query" });
19
+ const activeQueryLastLine = Decoration.line({ class: "cm-active-query cm-active-query-last" });
20
+ const activeQuerySingleLine = Decoration.line({ class: "cm-active-query cm-active-query-first cm-active-query-last" });
21
+ /**
22
+ * Given pre-computed query boundaries and a cursor position, find which query
23
+ * the cursor is in. Returns trimmed character offsets or null.
24
+ */
25
+ const findActiveQueryRange = (doc, cursorPos, boundaries) => {
26
+ if (boundaries.length === 0) return null;
27
+ let match = boundaries[boundaries.length - 1];
28
+ for (const boundary of boundaries) if (cursorPos <= boundary.to) {
29
+ match = boundary;
30
+ break;
31
+ }
32
+ if (!match) return null;
33
+ const queryText = doc.slice(match.from, match.to);
34
+ const leadingWhitespace = queryText.length - queryText.trimStart().length;
35
+ const trailingWhitespace = queryText.length - queryText.trimEnd().length;
36
+ const trimmedStart = match.from + leadingWhitespace;
37
+ const trimmedEnd = match.to - trailingWhitespace;
38
+ if (trimmedStart >= trimmedEnd) return null;
39
+ return {
40
+ from: trimmedStart,
41
+ to: trimmedEnd
42
+ };
43
+ };
44
+ /**
45
+ * Convert splitSqlQueries result (array of query strings that join back to the
46
+ * original doc) into character-offset boundaries.
47
+ */
48
+ const computeBoundaries = (queries) => {
49
+ const boundaries = [];
50
+ let offset = 0;
51
+ for (const query of queries) {
52
+ boundaries.push({
53
+ from: offset,
54
+ to: offset + query.length
55
+ });
56
+ offset += query.length;
57
+ }
58
+ return boundaries;
59
+ };
60
+ /**
61
+ * Synchronously map cached boundaries through a changeset.
62
+ *
63
+ * Boundaries can outlive the document state they were computed from (the async
64
+ * re-parse in `scheduleDocParse` is debounced, so several edits may land
65
+ * before new boundaries are produced). When that happens a cached position
66
+ * can exceed the changeset's pre-change length and `ChangeSet.mapPos` throws
67
+ * `RangeError: Position X is out of range for changeset of length Y`.
68
+ *
69
+ * Clamp positions into the valid `[0, changes.length]` range before mapping
70
+ * and drop degenerate boundaries so the mapping is safe even with stale cache.
71
+ */
72
+ const mapBoundariesThroughChanges = (boundaries, changes) => {
73
+ const prevLen = changes.length;
74
+ const mapped = [];
75
+ for (const b of boundaries) {
76
+ const from = changes.mapPos(Math.max(0, Math.min(b.from, prevLen)), -1);
77
+ const to = changes.mapPos(Math.max(0, Math.min(b.to, prevLen)), 1);
78
+ if (from < to) mapped.push({
79
+ from,
80
+ to
81
+ });
82
+ }
83
+ return mapped;
84
+ };
85
+ const buildDecorations = (view, range) => {
86
+ const startLine = view.state.doc.lineAt(range.from).number;
87
+ const endLine = view.state.doc.lineAt(range.to).number;
88
+ const decorations = [];
89
+ for (let lineNum = startLine; lineNum <= endLine; lineNum++) {
90
+ const lineStart = view.state.doc.line(lineNum).from;
91
+ if (startLine === endLine) decorations.push(activeQuerySingleLine.range(lineStart));
92
+ else if (lineNum === startLine) decorations.push(activeQueryFirstLine.range(lineStart));
93
+ else if (lineNum === endLine) decorations.push(activeQueryLastLine.range(lineStart));
94
+ else decorations.push(activeQueryMiddleLine.range(lineStart));
95
+ }
96
+ return Decoration.set(decorations);
97
+ };
98
+ const activeQueryHighlight = (splitQueries) => {
99
+ return [ViewPlugin.fromClass(class {
100
+ decorations = Decoration.none;
101
+ debounceTimer = null;
102
+ seq = 0;
103
+ cachedDoc = "";
104
+ cachedBoundaries = [];
105
+ destroyed = false;
106
+ constructor(view) {
107
+ this.scheduleDocParse(view);
108
+ }
109
+ update(update) {
110
+ if (update.focusChanged && !update.view.hasFocus) {
111
+ this.decorations = Decoration.none;
112
+ return;
113
+ }
114
+ if (update.docChanged) {
115
+ if (this.cachedBoundaries.length > 0) {
116
+ this.cachedBoundaries = mapBoundariesThroughChanges(this.cachedBoundaries, update.changes);
117
+ this.cachedDoc = update.state.doc.toString();
118
+ this.updateFromCache(update.view);
119
+ }
120
+ this.scheduleDocParse(update.view);
121
+ } else if (update.selectionSet || update.focusChanged && update.view.hasFocus) this.updateFromCache(update.view);
122
+ }
123
+ destroy() {
124
+ this.destroyed = true;
125
+ if (this.debounceTimer) clearTimeout(this.debounceTimer);
126
+ }
127
+ /**
128
+ * Update decorations using cached query boundaries.
129
+ * Only mutates this.decorations — does NOT call view.dispatch().
130
+ * When called from update() (sync), CodeMirror picks up the new
131
+ * decorations via the accessor. When called from the async
132
+ * scheduleDocParse callback, the caller must dispatch separately.
133
+ */
134
+ updateFromCache(view) {
135
+ if (!view.hasFocus) {
136
+ this.decorations = Decoration.none;
137
+ return;
138
+ }
139
+ const { main } = view.state.selection;
140
+ if (main.from !== main.to) {
141
+ this.decorations = Decoration.none;
142
+ return;
143
+ }
144
+ const doc = view.state.doc.toString();
145
+ if (doc !== this.cachedDoc) return;
146
+ if (this.cachedBoundaries.length === 0) {
147
+ this.decorations = Decoration.none;
148
+ return;
149
+ }
150
+ const range = findActiveQueryRange(doc, main.head, this.cachedBoundaries);
151
+ this.decorations = range ? buildDecorations(view, range) : Decoration.none;
152
+ }
153
+ /** Parse queries async (debounced) and update decorations. */
154
+ scheduleDocParse(view) {
155
+ if (this.debounceTimer) clearTimeout(this.debounceTimer);
156
+ this.debounceTimer = setTimeout(async () => {
157
+ const seq = ++this.seq;
158
+ const doc = view.state.doc.toString();
159
+ if (!doc.trim()) {
160
+ this.cachedDoc = doc;
161
+ this.cachedBoundaries = [];
162
+ if (this.decorations !== Decoration.none) {
163
+ this.decorations = Decoration.none;
164
+ if (!this.destroyed) view.dispatch();
165
+ }
166
+ return;
167
+ }
168
+ let queries;
169
+ try {
170
+ queries = await splitQueries(doc);
171
+ } catch {
172
+ return;
173
+ }
174
+ if (this.destroyed || seq !== this.seq) return;
175
+ this.cachedDoc = doc;
176
+ this.cachedBoundaries = computeBoundaries(queries);
177
+ this.updateFromCache(view);
178
+ if (!this.destroyed) view.dispatch();
179
+ }, 100);
180
+ }
181
+ }, { decorations: (v) => v.decorations }), EditorView.baseTheme({
182
+ ".cm-active-query": {
183
+ boxShadow: `inset -1px 0 0 0 ${colors.blue[300]}, inset 1px 0 0 0 ${colors.blue[300]}`,
184
+ marginRight: "8px"
185
+ },
186
+ ".cm-active-query-first": {
187
+ boxShadow: `inset -1px 0 0 0 ${colors.blue[300]}, inset 1px 0 0 0 ${colors.blue[300]}, inset 0 1px 0 0 ${colors.blue[300]}`,
188
+ borderRadius: "4px 4px 0 0"
189
+ },
190
+ ".cm-active-query-last": {
191
+ boxShadow: `inset -1px 0 0 0 ${colors.blue[300]}, inset 1px 0 0 0 ${colors.blue[300]}, inset 0 -1px 0 0 ${colors.blue[300]}`,
192
+ borderRadius: "0 0 4px 4px"
193
+ },
194
+ ".cm-active-query-first.cm-active-query-last": {
195
+ boxShadow: `inset 0 0 0 1px ${colors.blue[300]}`,
196
+ borderRadius: "4px"
197
+ }
198
+ })];
30
199
  };
31
- var AcceptControls = ({ conflicts, side, onAccept, onDismiss, contentRef }) => /* @__PURE__ */ jsx(
32
- "div",
33
- {
34
- className: cn(
35
- "tw:z-10 tw:flex tw:shrink-0 tw:flex-col tw:items-center",
36
- conflicts.length > 0 ? "tw:w-7" : "tw:w-0"
37
- ),
38
- children: conflicts.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
39
- /* @__PURE__ */ jsx("div", { className: "tw:shrink-0", style: { height: `${PANE_HEADER_HEIGHT_PX}px` } }),
40
- /* @__PURE__ */ jsx("div", { className: "tw:relative tw:w-full tw:flex-1 tw:overflow-y-clip tw:overflow-x-visible", children: /* @__PURE__ */ jsx("div", { ref: contentRef, className: "tw:relative tw:size-full", children: conflicts.map((conflict) => {
41
- const topLine = side === "left" ? conflict.oldStartLine : conflict.newStartLine;
42
- const topOffset = (topLine - 1) * LINE_HEIGHT_PX - 2;
43
- return /* @__PURE__ */ jsxs(
44
- "div",
45
- {
46
- className: "tw:absolute tw:inset-x-0 tw:flex tw:flex-col tw:items-center tw:gap-0.5",
47
- style: { top: `${topOffset}px` },
48
- children: [
49
- /* @__PURE__ */ jsx(AcceptButton, { side, onAccept: () => onAccept(conflict) }),
50
- onDismiss && /* @__PURE__ */ jsx(
51
- Button,
52
- {
53
- onClick: () => onDismiss(conflict),
54
- variant: "outline",
55
- size: "icon-sm",
56
- title: "Dismiss",
57
- "aria-label": `Dismiss ${side === "left" ? "production" : "branch"} change`,
58
- children: /* @__PURE__ */ jsx(X, { className: "tw:size-4" })
59
- }
60
- )
61
- ]
62
- },
63
- conflict.id
64
- );
65
- }) }) })
66
- ] })
67
- }
68
- );
69
- var setHighlightedLines = StateEffect.define();
70
- var safeDecoration = Decoration.line({ class: "cm-merge-safe-line" });
71
- var conflictDecoration = Decoration.line({ class: "cm-merge-conflict-line" });
200
+ //#endregion
201
+ //#region src/components/CodeEditor/highlighting.ts
202
+ var HighlightMarker = class extends GutterMarker {
203
+ toDOM() {
204
+ const marker = document.createElement("div");
205
+ marker.className = "cm-highlight-marker";
206
+ return marker;
207
+ }
208
+ };
209
+ const highlightMarker = new HighlightMarker();
210
+ const forEachLineInRange = (doc, from, to, callback) => {
211
+ const results = [];
212
+ const fromLine = Math.max(1, from + 1);
213
+ const toLine = Math.min(doc.lines, to + 1);
214
+ for (let i = fromLine; i <= toLine; i++) {
215
+ const line = doc.line(i);
216
+ results.push(callback(line.from));
217
+ }
218
+ return results;
219
+ };
220
+ const setHighlightedLinesEffect = StateEffect.define();
221
+ const highlightedLinesField = StateField.define({
222
+ create() {
223
+ return null;
224
+ },
225
+ update(value, transaction) {
226
+ for (const effect of transaction.effects) if (effect.is(setHighlightedLinesEffect)) return effect.value;
227
+ return value;
228
+ }
229
+ });
230
+ const highlightGutter = gutter({
231
+ class: "cm-highlight-gutter",
232
+ markers: (view) => {
233
+ const highlightInfo = view.state.field(highlightedLinesField, false);
234
+ if (!highlightInfo) return RangeSet.empty;
235
+ const markers = forEachLineInRange(view.state.doc, highlightInfo.from, highlightInfo.to, (lineFrom) => highlightMarker.range(lineFrom));
236
+ return RangeSet.of(markers);
237
+ }
238
+ });
239
+ const errorLineDecorations = StateField.define({
240
+ create() {
241
+ return Decoration.none;
242
+ },
243
+ update(decorations, transaction) {
244
+ decorations = decorations.map(transaction.changes);
245
+ for (const effect of transaction.effects) {
246
+ if (!effect.is(setHighlightedLinesEffect)) continue;
247
+ if (!effect.value || !effect.value.error) return Decoration.none;
248
+ const decorationArray = forEachLineInRange(transaction.state.doc, effect.value.error.from, effect.value.error.to, (lineFrom) => Decoration.line({ class: "cm-error-line" }).range(lineFrom));
249
+ return Decoration.set(decorationArray);
250
+ }
251
+ return decorations;
252
+ },
253
+ provide: (f) => EditorView.decorations.from(f)
254
+ });
255
+ const processingLineDecorations = StateField.define({
256
+ create() {
257
+ return Decoration.none;
258
+ },
259
+ update(decorations, transaction) {
260
+ decorations = decorations.map(transaction.changes);
261
+ for (const effect of transaction.effects) {
262
+ if (!effect.is(setHighlightedLinesEffect)) continue;
263
+ if (!effect.value || !effect.value.processing) return Decoration.none;
264
+ const decorationArray = forEachLineInRange(transaction.state.doc, effect.value.processing.from, effect.value.processing.to, (lineFrom) => Decoration.line({ class: "cm-processing-line" }).range(lineFrom));
265
+ return Decoration.set(decorationArray);
266
+ }
267
+ return decorations;
268
+ },
269
+ provide: (f) => EditorView.decorations.from(f)
270
+ });
271
+ const highlightedLinesTheme = EditorView.baseTheme({
272
+ ".cm-highlight-gutter": {
273
+ width: "2px",
274
+ marginRight: "2px"
275
+ },
276
+ ".cm-highlight-marker": {
277
+ width: "2px",
278
+ height: "100%",
279
+ backgroundColor: colors.blue[500]
280
+ },
281
+ ".cm-error-line": { backgroundColor: `${colors.error[100]} !important` },
282
+ ".cm-processing-line": { backgroundColor: `${colors.blue[100]} !important` }
283
+ });
284
+ function highlightingExtension() {
285
+ return [
286
+ highlightedLinesField,
287
+ highlightGutter,
288
+ errorLineDecorations,
289
+ processingLineDecorations,
290
+ highlightedLinesTheme
291
+ ];
292
+ }
293
+ function updateHighlighting(view, lines) {
294
+ view.dispatch({ effects: setHighlightedLinesEffect.of(lines ?? null) });
295
+ }
296
+ //#endregion
297
+ //#region src/components/CodeEditor/SqlEditor.tsx
298
+ const OWN_KEYMAPS = {
299
+ defaultKeymap: false,
300
+ completionKeymap: false,
301
+ searchKeymap: false
302
+ };
303
+ const CUSTOM_KEYMAP = [{
304
+ key: "Escape",
305
+ stopPropagation: true,
306
+ run: (view) => {
307
+ view.contentDOM.blur();
308
+ return true;
309
+ }
310
+ }];
311
+ const OWN_KEYMAP_EXTENSION = keymap$1.of([...defaultKeymap, ...CUSTOM_KEYMAP]);
312
+ const buildTheme = () => ({
313
+ ...buildBaseThemeStyles(),
314
+ ...buildChromeStyles(buildCanvasChrome())
315
+ });
316
+ const SqlEditor = ({ value, onChange, onSelectionChange, onCreateEditor, onDestroyEditor, onBlurEditor, onFocusEditor, placeholder = "", searchQuery = "", searchMatchIndex, readOnly = false, queryParser, autoFocus = false, lineNumbers = true, className, schema, completionSource, variables, defaultDatabase, defaultSchema, highlightLines, dialect }) => {
317
+ const editorRef = useRef(null);
318
+ const handleChange = useStableCallback((next) => onChange?.(next));
319
+ const parseQueries = useStableCallback(async (sql) => await queryParser?.(sql) ?? []);
320
+ const handleBlur = useStableCallback((view) => onBlurEditor?.(view));
321
+ const handleFocus = useStableCallback((view) => onFocusEditor?.(view));
322
+ const handleUpdate = useStableCallback((update) => {
323
+ if (update.selectionSet) {
324
+ const { main } = update.state.selection;
325
+ onSelectionChange?.(update.state.sliceDoc(main.from, main.to));
326
+ }
327
+ });
328
+ const variableCompletion = useVariableCompletion(variables);
329
+ const withQueryParser = queryParser !== void 0;
330
+ const tooltipLayer = useTooltipsExtension();
331
+ const customTheme = useThemedExtension("editor:syntax", buildCustomTheme);
332
+ const themeExtension = useThemedExtension("sql-editor:chrome", () => EditorView$1.theme(buildTheme()));
333
+ const extensions = useMemo(() => {
334
+ return [
335
+ EditorView$1.lineWrapping,
336
+ OWN_KEYMAP_EXTENSION,
337
+ ...installExtensions({
338
+ schema,
339
+ defaultDatabase,
340
+ defaultSchema,
341
+ variableCompletion,
342
+ completionSource,
343
+ dialect
344
+ }),
345
+ searchExtension(),
346
+ highlightingExtension(),
347
+ withQueryParser ? activeQueryHighlight(parseQueries) : [],
348
+ tooltipLayer,
349
+ themeExtension,
350
+ EditorView$1.domEventHandlers({
351
+ blur: (_, view) => handleBlur(view),
352
+ focus: (_, view) => handleFocus(view)
353
+ })
354
+ ];
355
+ }, [
356
+ withQueryParser,
357
+ parseQueries,
358
+ schema,
359
+ completionSource,
360
+ defaultDatabase,
361
+ defaultSchema,
362
+ variableCompletion,
363
+ dialect,
364
+ handleBlur,
365
+ handleFocus,
366
+ themeExtension,
367
+ tooltipLayer
368
+ ]);
369
+ const defaultSetup = useMemo(() => {
370
+ return {
371
+ ...buildBasicSetup(readOnly),
372
+ ...OWN_KEYMAPS,
373
+ lineNumbers
374
+ };
375
+ }, [readOnly, lineNumbers]);
376
+ useEffect(() => {
377
+ if (editorRef.current?.view) updateHighlighting(editorRef.current.view, highlightLines);
378
+ }, [highlightLines]);
379
+ useEffect(() => {
380
+ if (editorRef.current?.view) updateSearch(editorRef.current.view, searchQuery, searchMatchIndex);
381
+ }, [searchQuery, searchMatchIndex]);
382
+ const handleDestroy = useStableCallback(() => onDestroyEditor?.());
383
+ useEffect(() => handleDestroy, [handleDestroy]);
384
+ const handleCreate = useStableCallback((view, state) => {
385
+ onCreateEditor?.(view, state);
386
+ if (highlightLines) updateHighlighting(view, highlightLines);
387
+ if (searchQuery) updateSearch(view, searchQuery, searchMatchIndex);
388
+ });
389
+ return /* @__PURE__ */ jsx(CodeMirror, {
390
+ ref: editorRef,
391
+ theme: customTheme,
392
+ extensions,
393
+ value,
394
+ onChange: handleChange,
395
+ onUpdate: handleUpdate,
396
+ onCreateEditor: handleCreate,
397
+ autoFocus,
398
+ placeholder,
399
+ className,
400
+ readOnly,
401
+ editable: !readOnly,
402
+ basicSetup: defaultSetup
403
+ });
404
+ };
405
+ //#endregion
406
+ //#region src/components/MergeEditor/AcceptControls/AcceptButton.tsx
407
+ const AcceptButton = ({ side, onAccept }) => {
408
+ const label = `Accept ${side === "left" ? "production" : "branch"} version`;
409
+ return /* @__PURE__ */ jsx(Button, {
410
+ onClick: onAccept,
411
+ variant: "outline",
412
+ size: "icon-sm",
413
+ title: label,
414
+ "aria-label": label,
415
+ children: /* @__PURE__ */ jsx(side === "left" ? ChevronsRight : ChevronsLeft, { className: "tw:size-5" })
416
+ });
417
+ };
418
+ //#endregion
419
+ //#region src/components/MergeEditor/AcceptControls/AcceptControls.tsx
420
+ const AcceptControls = ({ conflicts, side, onAccept, onDismiss, contentRef }) => /* @__PURE__ */ jsx("div", {
421
+ className: cn("tw:z-10 tw:flex tw:shrink-0 tw:flex-col tw:items-center", conflicts.length > 0 ? "tw:w-7" : "tw:w-0"),
422
+ children: conflicts.length > 0 && /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("div", {
423
+ className: "tw:shrink-0",
424
+ style: { height: `58px` }
425
+ }), /* @__PURE__ */ jsx("div", {
426
+ className: "tw:relative tw:w-full tw:flex-1 tw:overflow-y-clip tw:overflow-x-visible",
427
+ children: /* @__PURE__ */ jsx("div", {
428
+ ref: contentRef,
429
+ className: "tw:relative tw:size-full",
430
+ children: conflicts.map((conflict) => {
431
+ const topOffset = ((side === "left" ? conflict.oldStartLine : conflict.newStartLine) - 1) * 20 - 2;
432
+ return /* @__PURE__ */ jsxs("div", {
433
+ className: "tw:absolute tw:inset-x-0 tw:flex tw:flex-col tw:items-center tw:gap-0.5",
434
+ style: { top: `${topOffset}px` },
435
+ children: [/* @__PURE__ */ jsx(AcceptButton, {
436
+ side,
437
+ onAccept: () => onAccept(conflict)
438
+ }), onDismiss && /* @__PURE__ */ jsx(Button, {
439
+ onClick: () => onDismiss(conflict),
440
+ variant: "outline",
441
+ size: "icon-sm",
442
+ title: "Dismiss",
443
+ "aria-label": `Dismiss ${side === "left" ? "production" : "branch"} change`,
444
+ children: /* @__PURE__ */ jsx(X, { className: "tw:size-4" })
445
+ })]
446
+ }, conflict.id);
447
+ })
448
+ })
449
+ })] })
450
+ });
451
+ //#endregion
452
+ //#region src/components/MergeEditor/decorations.ts
453
+ const setHighlightedLines = StateEffect.define();
454
+ const safeDecoration = Decoration.line({ class: "cm-merge-safe-line" });
455
+ const conflictDecoration = Decoration.line({ class: "cm-merge-conflict-line" });
72
456
  var SafeGutterMarker = class extends GutterMarker {
73
- elementClass = "cm-merge-safe-gutter";
457
+ elementClass = "cm-merge-safe-gutter";
74
458
  };
75
459
  var ConflictGutterMarker = class extends GutterMarker {
76
- elementClass = "cm-merge-conflict-gutter";
460
+ elementClass = "cm-merge-conflict-gutter";
77
461
  };
78
- var safeGutterMarker = new SafeGutterMarker();
79
- var conflictGutterMarker = new ConflictGutterMarker();
80
- var createDiffHighlightExtension = () => StateField.define({
81
- create: () => ({ decorations: Decoration.none, gutterMarkers: RangeSet.empty }),
82
- update(value, tr) {
83
- let payload = null;
84
- for (const effect of tr.effects) {
85
- if (effect.is(setHighlightedLines)) {
86
- payload = effect.value;
87
- }
88
- }
89
- if (!payload) {
90
- return {
91
- decorations: value.decorations.map(tr.changes),
92
- gutterMarkers: value.gutterMarkers.map(tr.changes)
93
- };
94
- }
95
- const decoBuilder = new RangeSetBuilder();
96
- const gutterBuilder = new RangeSetBuilder();
97
- const doc = tr.state.doc;
98
- const { lines, classification } = payload;
99
- const sorted = [...lines].filter((l) => l >= 1 && l <= doc.lines).sort((a, b) => a - b);
100
- for (const i of sorted) {
101
- const cls = classification.get(i);
102
- if (!cls) continue;
103
- const isSafe = cls === CHANGE_CLASS.SAFE;
104
- const line = doc.line(i);
105
- decoBuilder.add(line.from, line.from, isSafe ? safeDecoration : conflictDecoration);
106
- gutterBuilder.add(line.from, line.from, isSafe ? safeGutterMarker : conflictGutterMarker);
107
- }
108
- return {
109
- decorations: decoBuilder.finish(),
110
- gutterMarkers: gutterBuilder.finish()
111
- };
112
- },
113
- provide: (f) => [
114
- EditorView.decorations.from(f, (val) => val.decorations),
115
- gutterLineClass.from(f, (val) => val.gutterMarkers)
116
- ]
462
+ const safeGutterMarker = new SafeGutterMarker();
463
+ const conflictGutterMarker = new ConflictGutterMarker();
464
+ const createDiffHighlightExtension = () => StateField.define({
465
+ create: () => ({
466
+ decorations: Decoration.none,
467
+ gutterMarkers: RangeSet.empty
468
+ }),
469
+ update(value, tr) {
470
+ let payload = null;
471
+ for (const effect of tr.effects) if (effect.is(setHighlightedLines)) payload = effect.value;
472
+ if (!payload) return {
473
+ decorations: value.decorations.map(tr.changes),
474
+ gutterMarkers: value.gutterMarkers.map(tr.changes)
475
+ };
476
+ const decoBuilder = new RangeSetBuilder();
477
+ const gutterBuilder = new RangeSetBuilder();
478
+ const doc = tr.state.doc;
479
+ const { lines, classification } = payload;
480
+ const sorted = [...lines].filter((l) => l >= 1 && l <= doc.lines).sort((a, b) => a - b);
481
+ for (const i of sorted) {
482
+ const cls = classification.get(i);
483
+ if (!cls) continue;
484
+ const isSafe = cls === CHANGE_CLASS.SAFE;
485
+ const line = doc.line(i);
486
+ decoBuilder.add(line.from, line.from, isSafe ? safeDecoration : conflictDecoration);
487
+ gutterBuilder.add(line.from, line.from, isSafe ? safeGutterMarker : conflictGutterMarker);
488
+ }
489
+ return {
490
+ decorations: decoBuilder.finish(),
491
+ gutterMarkers: gutterBuilder.finish()
492
+ };
493
+ },
494
+ provide: (f) => [EditorView.decorations.from(f, (val) => val.decorations), gutterLineClass.from(f, (val) => val.gutterMarkers)]
117
495
  });
118
- var DARK_LINE_ALPHA = "29";
119
- var DARK_GUTTER_ALPHA = "47";
120
- var buildDiffHighlightTheme = (scheme) => {
121
- const dark = scheme === "dark";
122
- const line = (hue, pastel) => dark ? `${hue}${DARK_LINE_ALPHA}` : pastel;
123
- const gutter = (hue, pastel) => dark ? `${hue}${DARK_GUTTER_ALPHA}` : pastel;
124
- const safeNumber = dark ? colors.green[300] : colors.green[900];
125
- const conflictNumber = dark ? colors.warning[300] : colors.warning[800];
126
- return EditorView.theme({
127
- ".cm-merge-safe-line": {
128
- backgroundColor: `${line(colors.green[500], colors.green[100])} !important`,
129
- boxShadow: `inset 3px 0 0 ${colors.green[500]}`
130
- },
131
- ".cm-merge-conflict-line": {
132
- backgroundColor: `${line(colors.warning[500], colors.warning[100])} !important`,
133
- boxShadow: `inset 3px 0 0 ${colors.warning[500]}`
134
- },
135
- ".cm-merge-safe-gutter": {
136
- backgroundColor: `${gutter(colors.green[500], colors.green[200])} !important`,
137
- color: safeNumber
138
- },
139
- ".cm-merge-conflict-gutter": {
140
- backgroundColor: `${gutter(colors.warning[500], colors.warning[200])} !important`,
141
- color: conflictNumber
142
- }
143
- });
496
+ const DARK_LINE_ALPHA = "29";
497
+ const DARK_GUTTER_ALPHA = "47";
498
+ /**
499
+ * The highlight palette, split out of the StateField above so it can be built
500
+ * through `useThemedExtension` — the field instance must stay stable across a
501
+ * scheme change (a fresh one would drop the current highlights), the colours
502
+ * must not.
503
+ *
504
+ * `!important` overrides CodeMirror's built-in active-line and selection
505
+ * backgrounds. SAFE = change present on one side only (green). CONFLICT = both
506
+ * sides edited this region (amber/warning — NOT red, since red reads as
507
+ * "deletion" and the 3-pane editor only ever displays additions in each side
508
+ * pane). The colored left border doubles as a scan-lane so changes are easy to
509
+ * spot when zoomed out.
510
+ *
511
+ * Light mode paints an opaque pastel wash. Dark mode tints the same hue at low
512
+ * alpha over the pane's token-driven surface instead — the pastel is opaque, so
513
+ * it put the dark scheme's near-white line text and grey line numbers on a
514
+ * light slab.
515
+ *
516
+ * A pure function of `scheme`, which `useThemedExtension` passes from the same
517
+ * read that produced its cache key.
518
+ */
519
+ const buildDiffHighlightTheme = (scheme) => {
520
+ const dark = scheme === "dark";
521
+ const line = (hue, pastel) => dark ? `${hue}${DARK_LINE_ALPHA}` : pastel;
522
+ const gutter = (hue, pastel) => dark ? `${hue}${DARK_GUTTER_ALPHA}` : pastel;
523
+ const safeNumber = dark ? colors.green[300] : colors.green[900];
524
+ const conflictNumber = dark ? colors.warning[300] : colors.warning[800];
525
+ return EditorView.theme({
526
+ ".cm-merge-safe-line": {
527
+ backgroundColor: `${line(colors.green[500], colors.green[100])} !important`,
528
+ boxShadow: `inset 3px 0 0 ${colors.green[500]}`
529
+ },
530
+ ".cm-merge-conflict-line": {
531
+ backgroundColor: `${line(colors.warning[500], colors.warning[100])} !important`,
532
+ boxShadow: `inset 3px 0 0 ${colors.warning[500]}`
533
+ },
534
+ ".cm-merge-safe-gutter": {
535
+ backgroundColor: `${gutter(colors.green[500], colors.green[200])} !important`,
536
+ color: safeNumber
537
+ },
538
+ ".cm-merge-conflict-gutter": {
539
+ backgroundColor: `${gutter(colors.warning[500], colors.warning[200])} !important`,
540
+ color: conflictNumber
541
+ }
542
+ });
144
543
  };
145
- var updateHighlightedLines = (view, lines, classification) => {
146
- view.dispatch({ effects: setHighlightedLines.of({ lines, classification }) });
544
+ const updateHighlightedLines = (view, lines, classification) => {
545
+ view.dispatch({ effects: setHighlightedLines.of({
546
+ lines,
547
+ classification
548
+ }) });
147
549
  };
148
- var EMPTY_LINES = /* @__PURE__ */ new Set();
149
- var EMPTY_CLASSIFICATION = /* @__PURE__ */ new Map();
150
- var MergePane = ({
151
- value,
152
- highlightedLines,
153
- lineClassification,
154
- readOnly = false,
155
- onChange,
156
- header,
157
- headerClassName,
158
- className,
159
- onScrollDOMReady,
160
- deleted = false
161
- }) => {
162
- const editorRef = useRef(null);
163
- const handleChange = useStableCallback((next) => onChange?.(next));
164
- const themeExtension = useThemedExtension(`merge-pane:${deleted}`, (scheme) => {
165
- const dark = scheme === "dark";
166
- const deletedSurface = dark ? `${colors.error[500]}1f` : colors.error[100];
167
- const deletedGutter = dark ? `${colors.error[500]}3d` : colors.error[200];
168
- const deletedGutterText = dark ? colors.error[300] : colors.error[700];
169
- return EditorView.theme({
170
- "&.cm-editor": {
171
- height: "100%",
172
- backgroundColor: deleted ? deletedSurface : resolveToken("background", "249 250 251"),
173
- // Pair the token-driven surface with a token-driven text color so line
174
- // content stays readable when the pane's `--background` goes dark.
175
- color: resolveToken("foreground", "30 41 59"),
176
- outline: "none"
177
- },
178
- ".cm-gutters": {
179
- backgroundColor: deleted ? deletedGutter : resolveToken("muted", "241 245 249"),
180
- color: deleted ? deletedGutterText : resolveToken("muted-foreground", "100 116 139")
181
- },
182
- "*": { lineHeight: `${LINE_HEIGHT_PX}px` },
183
- ".cm-lineNumbers .cm-gutterElement": { padding: "0 0 0 25px" }
184
- });
185
- });
186
- const diffHighlightExtension = useMemo(() => createDiffHighlightExtension(), []);
187
- const diffHighlightTheme = useThemedExtension("merge-diff-highlight", buildDiffHighlightTheme);
188
- const basicSetup = useMemo(
189
- () => ({ ...buildBasicSetup(readOnly), lineNumbers: true }),
190
- [readOnly]
191
- );
192
- const extensions = useMemo(
193
- () => [
194
- diffHighlightExtension,
195
- diffHighlightTheme,
196
- themeExtension,
197
- // Recalc viewport after every doc change so late-settling layouts (alerts
198
- // appearing above the editor) don't leave trailing lines blank.
199
- EditorView.updateListener.of((update) => {
200
- if (update.docChanged) {
201
- requestAnimationFrame(() => update.view.dispatch({}));
202
- }
203
- })
204
- ],
205
- [diffHighlightExtension, diffHighlightTheme, themeExtension]
206
- );
207
- useEffect(() => {
208
- const view = editorRef.current?.view;
209
- if (!view) return;
210
- updateHighlightedLines(
211
- view,
212
- deleted ? EMPTY_LINES : highlightedLines,
213
- deleted ? EMPTY_CLASSIFICATION : lineClassification
214
- );
215
- }, [highlightedLines, lineClassification, deleted]);
216
- const handleCreateEditor = useCallback(
217
- (view) => {
218
- updateHighlightedLines(
219
- view,
220
- deleted ? EMPTY_LINES : highlightedLines,
221
- deleted ? EMPTY_CLASSIFICATION : lineClassification
222
- );
223
- onScrollDOMReady?.(view.scrollDOM);
224
- },
225
- [highlightedLines, lineClassification, onScrollDOMReady, deleted]
226
- );
227
- useEffect(() => {
228
- return () => onScrollDOMReady?.(null);
229
- }, [onScrollDOMReady]);
230
- useEffect(() => {
231
- const view = editorRef.current?.view;
232
- const wrapper = view?.dom.parentElement;
233
- if (!view || !wrapper) return;
234
- const observer = new ResizeObserver(() => view.dispatch({}));
235
- observer.observe(wrapper);
236
- return () => observer.disconnect();
237
- }, []);
238
- return /* @__PURE__ */ jsxs(
239
- "div",
240
- {
241
- className: cn(
242
- "tw:flex tw:min-w-0 tw:flex-1 tw:flex-col tw:overflow-hidden",
243
- className,
244
- deleted && "tw:border-error-300 tw:[[data-theme=dark]_&]:border-error-500/50"
245
- ),
246
- children: [
247
- header && /* @__PURE__ */ jsx(
248
- "div",
249
- {
250
- className: cn(
251
- "tw:px-4 tw:py-3",
252
- // Same light/dark split as the editor wash below — `PaneHeader` pins
253
- // `text-foreground`, which goes near-white and vanishes on the
254
- // opaque light-red band.
255
- deleted ? "tw:border-b tw:border-error-200 tw:bg-error-100 tw:[[data-theme=dark]_&]:border-error-500/30 tw:[[data-theme=dark]_&]:bg-error-500/15" : "tw:bg-background",
256
- headerClassName
257
- ),
258
- children: header
259
- }
260
- ),
261
- /* @__PURE__ */ jsx("div", { className: "tw:flex tw:h-0 tw:flex-1 tw:flex-col tw:[&_>div]:h-full", children: /* @__PURE__ */ jsx(
262
- CodeMirror,
263
- {
264
- ref: editorRef,
265
- height: "100%",
266
- value,
267
- onChange: handleChange,
268
- extensions,
269
- readOnly,
270
- onCreateEditor: handleCreateEditor,
271
- basicSetup
272
- }
273
- ) })
274
- ]
275
- }
276
- );
550
+ //#endregion
551
+ //#region src/components/MergeEditor/MergePane.tsx
552
+ const EMPTY_LINES$1 = /* @__PURE__ */ new Set();
553
+ const EMPTY_CLASSIFICATION$1 = /* @__PURE__ */ new Map();
554
+ const MergePane = ({ value, highlightedLines, lineClassification, readOnly = false, onChange, header, headerClassName, className, onScrollDOMReady, deleted = false }) => {
555
+ const editorRef = useRef(null);
556
+ const handleChange = useStableCallback((next) => onChange?.(next));
557
+ const themeExtension = useThemedExtension(`merge-pane:${deleted}`, (scheme) => {
558
+ const dark = scheme === "dark";
559
+ const deletedSurface = dark ? `${colors.error[500]}1f` : colors.error[100];
560
+ const deletedGutter = dark ? `${colors.error[500]}3d` : colors.error[200];
561
+ const deletedGutterText = dark ? colors.error[300] : colors.error[700];
562
+ return EditorView.theme({
563
+ "&.cm-editor": {
564
+ height: "100%",
565
+ backgroundColor: deleted ? deletedSurface : resolveToken("background", "249 250 251"),
566
+ color: resolveToken("foreground", "30 41 59"),
567
+ outline: "none"
568
+ },
569
+ ".cm-gutters": {
570
+ backgroundColor: deleted ? deletedGutter : resolveToken("muted", "241 245 249"),
571
+ color: deleted ? deletedGutterText : resolveToken("muted-foreground", "100 116 139")
572
+ },
573
+ "*": { lineHeight: `20px` },
574
+ ".cm-lineNumbers .cm-gutterElement": { padding: "0 0 0 25px" }
575
+ });
576
+ });
577
+ const diffHighlightExtension = useMemo(() => createDiffHighlightExtension(), []);
578
+ const diffHighlightTheme = useThemedExtension("merge-diff-highlight", buildDiffHighlightTheme);
579
+ const basicSetup = useMemo(() => ({
580
+ ...buildBasicSetup(readOnly),
581
+ lineNumbers: true
582
+ }), [readOnly]);
583
+ const extensions = useMemo(() => [
584
+ diffHighlightExtension,
585
+ diffHighlightTheme,
586
+ themeExtension,
587
+ EditorView.updateListener.of((update) => {
588
+ if (update.docChanged) requestAnimationFrame(() => update.view.dispatch({}));
589
+ })
590
+ ], [
591
+ diffHighlightExtension,
592
+ diffHighlightTheme,
593
+ themeExtension
594
+ ]);
595
+ useEffect(() => {
596
+ const view = editorRef.current?.view;
597
+ if (!view) return;
598
+ updateHighlightedLines(view, deleted ? EMPTY_LINES$1 : highlightedLines, deleted ? EMPTY_CLASSIFICATION$1 : lineClassification);
599
+ }, [
600
+ highlightedLines,
601
+ lineClassification,
602
+ deleted
603
+ ]);
604
+ const handleCreateEditor = useCallback((view) => {
605
+ updateHighlightedLines(view, deleted ? EMPTY_LINES$1 : highlightedLines, deleted ? EMPTY_CLASSIFICATION$1 : lineClassification);
606
+ onScrollDOMReady?.(view.scrollDOM);
607
+ }, [
608
+ highlightedLines,
609
+ lineClassification,
610
+ onScrollDOMReady,
611
+ deleted
612
+ ]);
613
+ useEffect(() => {
614
+ return () => onScrollDOMReady?.(null);
615
+ }, [onScrollDOMReady]);
616
+ useEffect(() => {
617
+ const view = editorRef.current?.view;
618
+ const wrapper = view?.dom.parentElement;
619
+ if (!view || !wrapper) return;
620
+ const observer = new ResizeObserver(() => view.dispatch({}));
621
+ observer.observe(wrapper);
622
+ return () => observer.disconnect();
623
+ }, []);
624
+ return /* @__PURE__ */ jsxs("div", {
625
+ className: cn("tw:flex tw:min-w-0 tw:flex-1 tw:flex-col tw:overflow-hidden", className, deleted && "tw:border-error-300 tw:[[data-theme=dark]_&]:border-error-500/50"),
626
+ children: [header && /* @__PURE__ */ jsx("div", {
627
+ className: cn("tw:px-4 tw:py-3", deleted ? "tw:border-b tw:border-error-200 tw:bg-error-100 tw:[[data-theme=dark]_&]:border-error-500/30 tw:[[data-theme=dark]_&]:bg-error-500/15" : "tw:bg-background", headerClassName),
628
+ children: header
629
+ }), /* @__PURE__ */ jsx("div", {
630
+ className: "tw:flex tw:h-0 tw:flex-1 tw:flex-col tw:[&_>div]:h-full",
631
+ children: /* @__PURE__ */ jsx(CodeMirror, {
632
+ ref: editorRef,
633
+ height: "100%",
634
+ value,
635
+ onChange: handleChange,
636
+ extensions,
637
+ readOnly,
638
+ onCreateEditor: handleCreateEditor,
639
+ basicSetup
640
+ })
641
+ })]
642
+ });
277
643
  };
278
- var useScrollSync = () => {
279
- const scrollersRef = useRef([]);
280
- const followersRef = useRef(/* @__PURE__ */ new Map());
281
- const isSyncingRef = useRef(false);
282
- const scrollerCallbacksRef = useRef(/* @__PURE__ */ new Map());
283
- const followerCallbacksRef = useRef(/* @__PURE__ */ new Map());
284
- const updateFollowers = useCallback(() => {
285
- for (const [, { paneIndex, el }] of followersRef.current) {
286
- const scroller = scrollersRef.current[paneIndex];
287
- if (!scroller) continue;
288
- el.style.transform = `translateY(-${scroller.scrollTop}px)`;
289
- }
290
- }, []);
291
- const handleScroll = useCallback(
292
- (e) => {
293
- if (isSyncingRef.current) return;
294
- isSyncingRef.current = true;
295
- const sourceScrollTop = e.target.scrollTop;
296
- for (const scroller of scrollersRef.current) {
297
- if (!scroller || scroller === e.target) continue;
298
- const targetMax = Math.max(0, scroller.scrollHeight - scroller.clientHeight);
299
- scroller.scrollTop = Math.min(sourceScrollTop, targetMax);
300
- }
301
- updateFollowers();
302
- isSyncingRef.current = false;
303
- },
304
- [updateFollowers]
305
- );
306
- const registerScroller = useCallback(
307
- (index) => {
308
- const existing = scrollerCallbacksRef.current.get(index);
309
- if (existing) return existing;
310
- const callback = (el) => {
311
- const prev = scrollersRef.current[index];
312
- if (prev === el) return;
313
- prev?.removeEventListener("scroll", handleScroll);
314
- scrollersRef.current[index] = el;
315
- el?.addEventListener("scroll", handleScroll, { passive: true });
316
- };
317
- scrollerCallbacksRef.current.set(index, callback);
318
- return callback;
319
- },
320
- [handleScroll]
321
- );
322
- const registerFollower = useCallback((paneIndex, key) => {
323
- const existing = followerCallbacksRef.current.get(key);
324
- if (existing) return existing;
325
- const callback = (el) => {
326
- if (el) {
327
- followersRef.current.set(key, { paneIndex, el });
328
- } else {
329
- followersRef.current.delete(key);
330
- }
331
- };
332
- followerCallbacksRef.current.set(key, callback);
333
- return callback;
334
- }, []);
335
- return { registerScroller, registerFollower };
644
+ //#endregion
645
+ //#region src/components/MergeEditor/useScrollSync.ts
646
+ const useScrollSync = () => {
647
+ const scrollersRef = useRef([]);
648
+ const followersRef = useRef(/* @__PURE__ */ new Map());
649
+ const isSyncingRef = useRef(false);
650
+ const scrollerCallbacksRef = useRef(/* @__PURE__ */ new Map());
651
+ const followerCallbacksRef = useRef(/* @__PURE__ */ new Map());
652
+ const updateFollowers = useCallback(() => {
653
+ for (const [, { paneIndex, el }] of followersRef.current) {
654
+ const scroller = scrollersRef.current[paneIndex];
655
+ if (!scroller) continue;
656
+ el.style.transform = `translateY(-${scroller.scrollTop}px)`;
657
+ }
658
+ }, []);
659
+ const handleScroll = useCallback((e) => {
660
+ if (isSyncingRef.current) return;
661
+ isSyncingRef.current = true;
662
+ const sourceScrollTop = e.target.scrollTop;
663
+ for (const scroller of scrollersRef.current) {
664
+ if (!scroller || scroller === e.target) continue;
665
+ const targetMax = Math.max(0, scroller.scrollHeight - scroller.clientHeight);
666
+ scroller.scrollTop = Math.min(sourceScrollTop, targetMax);
667
+ }
668
+ updateFollowers();
669
+ isSyncingRef.current = false;
670
+ }, [updateFollowers]);
671
+ return {
672
+ registerScroller: useCallback((index) => {
673
+ const existing = scrollerCallbacksRef.current.get(index);
674
+ if (existing) return existing;
675
+ const callback = (el) => {
676
+ const prev = scrollersRef.current[index];
677
+ if (prev === el) return;
678
+ prev?.removeEventListener("scroll", handleScroll);
679
+ scrollersRef.current[index] = el;
680
+ el?.addEventListener("scroll", handleScroll, { passive: true });
681
+ };
682
+ scrollerCallbacksRef.current.set(index, callback);
683
+ return callback;
684
+ }, [handleScroll]),
685
+ registerFollower: useCallback((paneIndex, key) => {
686
+ const existing = followerCallbacksRef.current.get(key);
687
+ if (existing) return existing;
688
+ const callback = (el) => {
689
+ if (el) followersRef.current.set(key, {
690
+ paneIndex,
691
+ el
692
+ });
693
+ else followersRef.current.delete(key);
694
+ };
695
+ followerCallbacksRef.current.set(key, callback);
696
+ return callback;
697
+ }, [])
698
+ };
336
699
  };
337
- var EMPTY_LINES2 = /* @__PURE__ */ new Set();
338
- var EMPTY_CLASSIFICATION2 = /* @__PURE__ */ new Map();
339
- var MergeEditor = ({
340
- mergeValue,
341
- handleMergeChange,
342
- leftText,
343
- rightText,
344
- leftConflicts,
345
- rightConflicts,
346
- leftHighlightedLines,
347
- rightHighlightedLines,
348
- leftClassification,
349
- rightClassification,
350
- mergeHighlightedLines,
351
- mergeClassification,
352
- acceptLeft,
353
- acceptRight,
354
- dismissLeft,
355
- dismissRight,
356
- leftHeader,
357
- middleHeader,
358
- middleHeaderClassName,
359
- middleClassName,
360
- rightHeader,
361
- className,
362
- leftDeleted = false,
363
- rightDeleted = false
364
- }) => {
365
- const { registerScroller, registerFollower } = useScrollSync();
366
- const anySideDeleted = leftDeleted || rightDeleted;
367
- return /* @__PURE__ */ jsxs(
368
- "div",
369
- {
370
- className: cn(
371
- "tw:flex tw:h-full tw:min-h-0 tw:overflow-hidden tw:bg-background tw:gap-3",
372
- className
373
- ),
374
- children: [
375
- /* @__PURE__ */ jsx(
376
- MergePane,
377
- {
378
- value: leftText,
379
- highlightedLines: leftHighlightedLines,
380
- lineClassification: leftClassification,
381
- readOnly: true,
382
- header: leftHeader,
383
- className: "tw:rounded-r-lg tw:border tw:border-border",
384
- onScrollDOMReady: registerScroller(0),
385
- deleted: leftDeleted
386
- }
387
- ),
388
- /* @__PURE__ */ jsx(
389
- AcceptControls,
390
- {
391
- conflicts: leftDeleted ? [] : leftConflicts,
392
- side: "left",
393
- onAccept: acceptLeft,
394
- onDismiss: dismissLeft,
395
- contentRef: registerFollower(0, "left-controls")
396
- }
397
- ),
398
- /* @__PURE__ */ jsx(
399
- MergePane,
400
- {
401
- value: mergeValue,
402
- highlightedLines: anySideDeleted ? EMPTY_LINES2 : mergeHighlightedLines,
403
- lineClassification: anySideDeleted ? EMPTY_CLASSIFICATION2 : mergeClassification,
404
- onChange: handleMergeChange,
405
- header: middleHeader,
406
- headerClassName: middleHeaderClassName,
407
- className: cn("tw:border tw:border-border tw:rounded-lg", middleClassName),
408
- onScrollDOMReady: registerScroller(1)
409
- }
410
- ),
411
- /* @__PURE__ */ jsx(
412
- AcceptControls,
413
- {
414
- conflicts: rightDeleted ? [] : rightConflicts,
415
- side: "right",
416
- onAccept: acceptRight,
417
- onDismiss: dismissRight,
418
- contentRef: registerFollower(2, "right-controls")
419
- }
420
- ),
421
- /* @__PURE__ */ jsx(
422
- MergePane,
423
- {
424
- value: rightText,
425
- highlightedLines: rightHighlightedLines,
426
- lineClassification: rightClassification,
427
- readOnly: true,
428
- header: rightHeader,
429
- className: "tw:rounded-l-lg tw:border tw:border-border",
430
- onScrollDOMReady: registerScroller(2),
431
- deleted: rightDeleted
432
- }
433
- )
434
- ]
435
- }
436
- );
700
+ //#endregion
701
+ //#region src/components/MergeEditor/MergeEditor.tsx
702
+ const EMPTY_LINES = /* @__PURE__ */ new Set();
703
+ const EMPTY_CLASSIFICATION = /* @__PURE__ */ new Map();
704
+ const MergeEditor = ({ mergeValue, handleMergeChange, leftText, rightText, leftConflicts, rightConflicts, leftHighlightedLines, rightHighlightedLines, leftClassification, rightClassification, mergeHighlightedLines, mergeClassification, acceptLeft, acceptRight, dismissLeft, dismissRight, leftHeader, middleHeader, middleHeaderClassName, middleClassName, rightHeader, className, leftDeleted = false, rightDeleted = false }) => {
705
+ const { registerScroller, registerFollower } = useScrollSync();
706
+ const anySideDeleted = leftDeleted || rightDeleted;
707
+ return /* @__PURE__ */ jsxs("div", {
708
+ className: cn("tw:flex tw:h-full tw:min-h-0 tw:overflow-hidden tw:bg-background tw:gap-3", className),
709
+ children: [
710
+ /* @__PURE__ */ jsx(MergePane, {
711
+ value: leftText,
712
+ highlightedLines: leftHighlightedLines,
713
+ lineClassification: leftClassification,
714
+ readOnly: true,
715
+ header: leftHeader,
716
+ className: "tw:rounded-r-lg tw:border tw:border-border",
717
+ onScrollDOMReady: registerScroller(0),
718
+ deleted: leftDeleted
719
+ }),
720
+ /* @__PURE__ */ jsx(AcceptControls, {
721
+ conflicts: leftDeleted ? [] : leftConflicts,
722
+ side: "left",
723
+ onAccept: acceptLeft,
724
+ onDismiss: dismissLeft,
725
+ contentRef: registerFollower(0, "left-controls")
726
+ }),
727
+ /* @__PURE__ */ jsx(MergePane, {
728
+ value: mergeValue,
729
+ highlightedLines: anySideDeleted ? EMPTY_LINES : mergeHighlightedLines,
730
+ lineClassification: anySideDeleted ? EMPTY_CLASSIFICATION : mergeClassification,
731
+ onChange: handleMergeChange,
732
+ header: middleHeader,
733
+ headerClassName: middleHeaderClassName,
734
+ className: cn("tw:border tw:border-border tw:rounded-lg", middleClassName),
735
+ onScrollDOMReady: registerScroller(1)
736
+ }),
737
+ /* @__PURE__ */ jsx(AcceptControls, {
738
+ conflicts: rightDeleted ? [] : rightConflicts,
739
+ side: "right",
740
+ onAccept: acceptRight,
741
+ onDismiss: dismissRight,
742
+ contentRef: registerFollower(2, "right-controls")
743
+ }),
744
+ /* @__PURE__ */ jsx(MergePane, {
745
+ value: rightText,
746
+ highlightedLines: rightHighlightedLines,
747
+ lineClassification: rightClassification,
748
+ readOnly: true,
749
+ header: rightHeader,
750
+ className: "tw:rounded-l-lg tw:border tw:border-border",
751
+ onScrollDOMReady: registerScroller(2),
752
+ deleted: rightDeleted
753
+ })
754
+ ]
755
+ });
437
756
  };
757
+ //#endregion
758
+ export { CodeEditor, LANGUAGE_MODES, MergeEditor, SqlEditor, isLanguageMode };
438
759
 
439
- export { MergeEditor };
440
- //# sourceMappingURL=editors.js.map
441
760
  //# sourceMappingURL=editors.js.map