markdown-flow-ui 0.2.13 → 0.2.15

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 (475) hide show
  1. package/README.md +7 -0
  2. package/dist/_virtual/index.es3.js +5 -4
  3. package/dist/_virtual/index.es3.js.map +1 -1
  4. package/dist/_virtual/index.es4.js +4 -5
  5. package/dist/_virtual/index.es4.js.map +1 -1
  6. package/dist/_virtual/index3.cjs +1 -1
  7. package/dist/_virtual/index4.cjs +1 -1
  8. package/dist/assets/markdown-flow-ui.css +10 -1
  9. package/dist/components/ContentRender/CodeBlock.cjs +1 -1
  10. package/dist/components/ContentRender/CodeBlock.cjs.map +1 -1
  11. package/dist/components/ContentRender/CodeBlock.d.ts +5 -0
  12. package/dist/components/ContentRender/CodeBlock.es.js +41 -38
  13. package/dist/components/ContentRender/CodeBlock.es.js.map +1 -1
  14. package/dist/components/ContentRender/ContentRender.cjs +2 -2
  15. package/dist/components/ContentRender/ContentRender.cjs.map +1 -1
  16. package/dist/components/ContentRender/ContentRender.d.ts +9 -4
  17. package/dist/components/ContentRender/ContentRender.es.js +389 -298
  18. package/dist/components/ContentRender/ContentRender.es.js.map +1 -1
  19. package/dist/components/ContentRender/IframeSandbox.cjs +7 -7
  20. package/dist/components/ContentRender/IframeSandbox.cjs.map +1 -1
  21. package/dist/components/ContentRender/IframeSandbox.d.ts +5 -1
  22. package/dist/components/ContentRender/IframeSandbox.es.js +311 -266
  23. package/dist/components/ContentRender/IframeSandbox.es.js.map +1 -1
  24. package/dist/components/ContentRender/MarkdownFlowInput.cjs +1 -1
  25. package/dist/components/ContentRender/MarkdownFlowInput.cjs.map +1 -1
  26. package/dist/components/ContentRender/MarkdownFlowInput.d.ts +5 -1
  27. package/dist/components/ContentRender/MarkdownFlowInput.es.js +37 -32
  28. package/dist/components/ContentRender/MarkdownFlowInput.es.js.map +1 -1
  29. package/dist/components/ContentRender/SandboxApp.cjs +2 -2
  30. package/dist/components/ContentRender/SandboxApp.cjs.map +1 -1
  31. package/dist/components/ContentRender/SandboxApp.d.ts +5 -1
  32. package/dist/components/ContentRender/SandboxApp.es.js +108 -103
  33. package/dist/components/ContentRender/SandboxApp.es.js.map +1 -1
  34. package/dist/components/ContentRender/blackboard-vendor.d.ts +1 -1
  35. package/dist/components/ContentRender/contentRenderI18n.cjs +1 -1
  36. package/dist/components/ContentRender/contentRenderI18n.cjs.map +1 -1
  37. package/dist/components/ContentRender/contentRenderI18n.d.ts +6 -1
  38. package/dist/components/ContentRender/contentRenderI18n.es.js +5 -56
  39. package/dist/components/ContentRender/contentRenderI18n.es.js.map +1 -1
  40. package/dist/components/ContentRender/contentRenderI18n.test.d.ts +1 -0
  41. package/dist/components/ContentRender/index.cjs +1 -1
  42. package/dist/components/ContentRender/index.d.ts +11 -11
  43. package/dist/components/ContentRender/index.es.js +1 -2
  44. package/dist/components/ContentRender/index.es.js.map +1 -1
  45. package/dist/components/ContentRender/locales/contentRender.json.cjs +2 -0
  46. package/dist/components/ContentRender/locales/contentRender.json.cjs.map +1 -0
  47. package/dist/components/ContentRender/locales/contentRender.json.d.ts +90 -0
  48. package/dist/components/ContentRender/locales/contentRender.json.es.js +11 -0
  49. package/dist/components/ContentRender/locales/contentRender.json.es.js.map +1 -0
  50. package/dist/components/ContentRender/plugins/CustomVariable.cjs +1 -1
  51. package/dist/components/ContentRender/plugins/CustomVariable.cjs.map +1 -1
  52. package/dist/components/ContentRender/plugins/CustomVariable.d.ts +7 -3
  53. package/dist/components/ContentRender/plugins/CustomVariable.es.js +165 -151
  54. package/dist/components/ContentRender/plugins/CustomVariable.es.js.map +1 -1
  55. package/dist/components/ContentRender/plugins/MermaidChart.cjs +1 -1
  56. package/dist/components/ContentRender/plugins/MermaidChart.cjs.map +1 -1
  57. package/dist/components/ContentRender/plugins/MermaidChart.d.ts +1 -0
  58. package/dist/components/ContentRender/plugins/MermaidChart.es.js +68 -44
  59. package/dist/components/ContentRender/plugins/MermaidChart.es.js.map +1 -1
  60. package/dist/components/MarkdownFlow/MarkdownFlow.cjs +1 -1
  61. package/dist/components/MarkdownFlow/MarkdownFlow.cjs.map +1 -1
  62. package/dist/components/MarkdownFlow/MarkdownFlow.d.ts +12 -4
  63. package/dist/components/MarkdownFlow/MarkdownFlow.es.js +51 -39
  64. package/dist/components/MarkdownFlow/MarkdownFlow.es.js.map +1 -1
  65. package/dist/components/MarkdownFlow/ScrollToBottomButton.cjs +1 -1
  66. package/dist/components/MarkdownFlow/ScrollToBottomButton.cjs.map +1 -1
  67. package/dist/components/MarkdownFlow/ScrollToBottomButton.d.ts +31 -1
  68. package/dist/components/MarkdownFlow/ScrollToBottomButton.es.js +46 -17
  69. package/dist/components/MarkdownFlow/ScrollToBottomButton.es.js.map +1 -1
  70. package/dist/components/MarkdownFlow/ScrollToBottomControl.cjs +2 -0
  71. package/dist/components/MarkdownFlow/ScrollToBottomControl.cjs.map +1 -0
  72. package/dist/components/MarkdownFlow/ScrollToBottomControl.d.ts +18 -0
  73. package/dist/components/MarkdownFlow/ScrollToBottomControl.es.js +47 -0
  74. package/dist/components/MarkdownFlow/ScrollToBottomControl.es.js.map +1 -0
  75. package/dist/components/MarkdownFlow/ScrollableMarkdownFlow.cjs +1 -1
  76. package/dist/components/MarkdownFlow/ScrollableMarkdownFlow.cjs.map +1 -1
  77. package/dist/components/MarkdownFlow/ScrollableMarkdownFlow.d.ts +1 -1
  78. package/dist/components/MarkdownFlow/ScrollableMarkdownFlow.es.js +33 -52
  79. package/dist/components/MarkdownFlow/ScrollableMarkdownFlow.es.js.map +1 -1
  80. package/dist/components/MarkdownFlow/index.cjs +1 -1
  81. package/dist/components/MarkdownFlow/index.d.ts +9 -6
  82. package/dist/components/MarkdownFlow/index.es.js +6 -6
  83. package/dist/components/MarkdownFlow/index.es.js.map +1 -1
  84. package/dist/components/MarkdownFlow/useScrollToBottom.cjs +1 -1
  85. package/dist/components/MarkdownFlow/useScrollToBottom.cjs.map +1 -1
  86. package/dist/components/MarkdownFlow/useScrollToBottom.d.ts +40 -8
  87. package/dist/components/MarkdownFlow/useScrollToBottom.es.js +352 -83
  88. package/dist/components/MarkdownFlow/useScrollToBottom.es.js.map +1 -1
  89. package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.cjs +1 -1
  90. package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.cjs.map +1 -1
  91. package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.d.ts +5 -3
  92. package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.es.js +371 -324
  93. package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.es.js.map +1 -1
  94. package/dist/components/MarkdownFlowEditor/components/CustomDialog.cjs +1 -1
  95. package/dist/components/MarkdownFlowEditor/components/CustomDialog.cjs.map +1 -1
  96. package/dist/components/MarkdownFlowEditor/components/CustomDialog.d.ts +10 -0
  97. package/dist/components/MarkdownFlowEditor/components/CustomDialog.es.js +22 -19
  98. package/dist/components/MarkdownFlowEditor/components/CustomDialog.es.js.map +1 -1
  99. package/dist/components/MarkdownFlowEditor/components/CustomPopover.cjs +1 -1
  100. package/dist/components/MarkdownFlowEditor/components/CustomPopover.cjs.map +1 -1
  101. package/dist/components/MarkdownFlowEditor/components/CustomPopover.d.ts +8 -0
  102. package/dist/components/MarkdownFlowEditor/components/CustomPopover.es.js +19 -15
  103. package/dist/components/MarkdownFlowEditor/components/CustomPopover.es.js.map +1 -1
  104. package/dist/components/MarkdownFlowEditor/components/EditorToolbar.cjs +1 -1
  105. package/dist/components/MarkdownFlowEditor/components/EditorToolbar.cjs.map +1 -1
  106. package/dist/components/MarkdownFlowEditor/components/EditorToolbar.d.ts +4 -1
  107. package/dist/components/MarkdownFlowEditor/components/EditorToolbar.es.js +99 -93
  108. package/dist/components/MarkdownFlowEditor/components/EditorToolbar.es.js.map +1 -1
  109. package/dist/components/MarkdownFlowEditor/components/ImageInject.cjs +1 -1
  110. package/dist/components/MarkdownFlowEditor/components/ImageInject.cjs.map +1 -1
  111. package/dist/components/MarkdownFlowEditor/components/ImageInject.d.ts +1 -1
  112. package/dist/components/MarkdownFlowEditor/components/ImageInject.es.js +183 -182
  113. package/dist/components/MarkdownFlowEditor/components/ImageInject.es.js.map +1 -1
  114. package/dist/components/MarkdownFlowEditor/components/VariableSearchDropdown.cjs +1 -1
  115. package/dist/components/MarkdownFlowEditor/components/VariableSearchDropdown.cjs.map +1 -1
  116. package/dist/components/MarkdownFlowEditor/components/VariableSearchDropdown.d.ts +1 -1
  117. package/dist/components/MarkdownFlowEditor/components/VariableSearchDropdown.es.js +107 -103
  118. package/dist/components/MarkdownFlowEditor/components/VariableSearchDropdown.es.js.map +1 -1
  119. package/dist/components/MarkdownFlowEditor/components/VariableSelect.cjs +1 -1
  120. package/dist/components/MarkdownFlowEditor/components/VariableSelect.cjs.map +1 -1
  121. package/dist/components/MarkdownFlowEditor/components/VariableSelect.d.ts +1 -1
  122. package/dist/components/MarkdownFlowEditor/components/VariableSelect.es.js +106 -106
  123. package/dist/components/MarkdownFlowEditor/components/VariableSelect.es.js.map +1 -1
  124. package/dist/components/MarkdownFlowEditor/components/VideoInject.cjs +1 -1
  125. package/dist/components/MarkdownFlowEditor/components/VideoInject.cjs.map +1 -1
  126. package/dist/components/MarkdownFlowEditor/components/VideoInject.es.js +64 -63
  127. package/dist/components/MarkdownFlowEditor/components/VideoInject.es.js.map +1 -1
  128. package/dist/components/MarkdownFlowEditor/components/icons/ButtonIcon.cjs +1 -1
  129. package/dist/components/MarkdownFlowEditor/components/icons/ButtonIcon.cjs.map +1 -1
  130. package/dist/components/MarkdownFlowEditor/components/icons/ButtonIcon.es.js +13 -13
  131. package/dist/components/MarkdownFlowEditor/components/icons/ButtonIcon.es.js.map +1 -1
  132. package/dist/components/MarkdownFlowEditor/components/icons/SearchBracesIcon.cjs +1 -1
  133. package/dist/components/MarkdownFlowEditor/components/icons/SearchBracesIcon.cjs.map +1 -1
  134. package/dist/components/MarkdownFlowEditor/components/icons/SearchBracesIcon.es.js +12 -12
  135. package/dist/components/MarkdownFlowEditor/components/icons/SearchBracesIcon.es.js.map +1 -1
  136. package/dist/components/MarkdownFlowEditor/editor-context.d.ts +1 -1
  137. package/dist/components/MarkdownFlowEditor/editorI18n.cjs +1 -1
  138. package/dist/components/MarkdownFlowEditor/editorI18n.cjs.map +1 -1
  139. package/dist/components/MarkdownFlowEditor/editorI18n.d.ts +290 -0
  140. package/dist/components/MarkdownFlowEditor/editorI18n.es.js +12 -8
  141. package/dist/components/MarkdownFlowEditor/editorI18n.es.js.map +1 -1
  142. package/dist/components/MarkdownFlowEditor/editorI18n.test.d.ts +1 -0
  143. package/dist/components/MarkdownFlowEditor/index.d.ts +6 -6
  144. package/dist/components/MarkdownFlowEditor/locales/ar-SA.json.cjs +2 -0
  145. package/dist/components/MarkdownFlowEditor/locales/ar-SA.json.cjs.map +1 -0
  146. package/dist/components/MarkdownFlowEditor/locales/ar-SA.json.d.ts +72 -0
  147. package/dist/components/MarkdownFlowEditor/locales/ar-SA.json.es.js +140 -0
  148. package/dist/components/MarkdownFlowEditor/locales/ar-SA.json.es.js.map +1 -0
  149. package/dist/components/MarkdownFlowEditor/locales/en-US.json.cjs +1 -1
  150. package/dist/components/MarkdownFlowEditor/locales/en-US.json.d.ts +2 -0
  151. package/dist/components/MarkdownFlowEditor/locales/en-US.json.es.js +118 -114
  152. package/dist/components/MarkdownFlowEditor/locales/en-US.json.es.js.map +1 -1
  153. package/dist/components/MarkdownFlowEditor/locales/fr-FR.json.cjs +1 -1
  154. package/dist/components/MarkdownFlowEditor/locales/fr-FR.json.d.ts +2 -0
  155. package/dist/components/MarkdownFlowEditor/locales/fr-FR.json.es.js +118 -114
  156. package/dist/components/MarkdownFlowEditor/locales/fr-FR.json.es.js.map +1 -1
  157. package/dist/components/MarkdownFlowEditor/locales/th-TH.json.cjs +2 -0
  158. package/dist/components/MarkdownFlowEditor/locales/th-TH.json.cjs.map +1 -0
  159. package/dist/components/MarkdownFlowEditor/locales/th-TH.json.d.ts +72 -0
  160. package/dist/components/MarkdownFlowEditor/locales/th-TH.json.es.js +140 -0
  161. package/dist/components/MarkdownFlowEditor/locales/th-TH.json.es.js.map +1 -0
  162. package/dist/components/MarkdownFlowEditor/locales/zh-CN.json.cjs +1 -1
  163. package/dist/components/MarkdownFlowEditor/locales/zh-CN.json.d.ts +2 -0
  164. package/dist/components/MarkdownFlowEditor/locales/zh-CN.json.es.js +70 -66
  165. package/dist/components/MarkdownFlowEditor/locales/zh-CN.json.es.js.map +1 -1
  166. package/dist/components/MarkdownFlowEditor/plugins/ImgPlaceholder.cjs +1 -1
  167. package/dist/components/MarkdownFlowEditor/plugins/ImgPlaceholder.cjs.map +1 -1
  168. package/dist/components/MarkdownFlowEditor/plugins/ImgPlaceholder.es.js +40 -35
  169. package/dist/components/MarkdownFlowEditor/plugins/ImgPlaceholder.es.js.map +1 -1
  170. package/dist/components/MarkdownFlowEditor/plugins/PlaceholderWidget.d.ts +1 -1
  171. package/dist/components/MarkdownFlowEditor/plugins/VideoPlaceholder.cjs +1 -1
  172. package/dist/components/MarkdownFlowEditor/plugins/VideoPlaceholder.cjs.map +1 -1
  173. package/dist/components/MarkdownFlowEditor/plugins/VideoPlaceholder.es.js +27 -23
  174. package/dist/components/MarkdownFlowEditor/plugins/VideoPlaceholder.es.js.map +1 -1
  175. package/dist/components/MarkdownFlowEditor/plugins/mediaPlaceholderLabels.cjs +2 -0
  176. package/dist/components/MarkdownFlowEditor/plugins/mediaPlaceholderLabels.cjs.map +1 -0
  177. package/dist/components/MarkdownFlowEditor/plugins/mediaPlaceholderLabels.d.ts +7 -0
  178. package/dist/components/MarkdownFlowEditor/plugins/mediaPlaceholderLabels.es.js +12 -0
  179. package/dist/components/MarkdownFlowEditor/plugins/mediaPlaceholderLabels.es.js.map +1 -0
  180. package/dist/components/MarkdownFlowEditor/utils.d.ts +1 -1
  181. package/dist/components/Slide/MarkdownSlideScaling.cjs +1 -1
  182. package/dist/components/Slide/MarkdownSlideScaling.cjs.map +1 -1
  183. package/dist/components/Slide/MarkdownSlideScaling.d.ts +1 -1
  184. package/dist/components/Slide/MarkdownSlideScaling.es.js +20 -20
  185. package/dist/components/Slide/MarkdownSlideScaling.es.js.map +1 -1
  186. package/dist/components/Slide/MobilePlayerSettingsSheet.cjs +1 -1
  187. package/dist/components/Slide/MobilePlayerSettingsSheet.cjs.map +1 -1
  188. package/dist/components/Slide/MobilePlayerSettingsSheet.d.ts +7 -2
  189. package/dist/components/Slide/MobilePlayerSettingsSheet.es.js +61 -57
  190. package/dist/components/Slide/MobilePlayerSettingsSheet.es.js.map +1 -1
  191. package/dist/components/Slide/Player.cjs +1 -1
  192. package/dist/components/Slide/Player.cjs.map +1 -1
  193. package/dist/components/Slide/Player.d.ts +6 -6
  194. package/dist/components/Slide/Player.es.js +547 -541
  195. package/dist/components/Slide/Player.es.js.map +1 -1
  196. package/dist/components/Slide/Slide.cjs +1 -1
  197. package/dist/components/Slide/Slide.cjs.map +1 -1
  198. package/dist/components/Slide/Slide.d.ts +14 -12
  199. package/dist/components/Slide/Slide.es.js +745 -726
  200. package/dist/components/Slide/Slide.es.js.map +1 -1
  201. package/dist/components/Slide/SubtitleOverlay.cjs +1 -1
  202. package/dist/components/Slide/SubtitleOverlay.cjs.map +1 -1
  203. package/dist/components/Slide/SubtitleOverlay.d.ts +2 -2
  204. package/dist/components/Slide/SubtitleOverlay.es.js +17 -17
  205. package/dist/components/Slide/SubtitleOverlay.es.js.map +1 -1
  206. package/dist/components/Slide/diff-utils.d.ts +1 -1
  207. package/dist/components/Slide/index.d.ts +12 -12
  208. package/dist/components/Slide/locales/slide.json.cjs +2 -0
  209. package/dist/components/Slide/locales/slide.json.cjs.map +1 -0
  210. package/dist/components/Slide/locales/slide.json.d.ts +205 -0
  211. package/dist/components/Slide/locales/slide.json.es.js +11 -0
  212. package/dist/components/Slide/locales/slide.json.es.js.map +1 -0
  213. package/dist/components/Slide/slideI18n.cjs +1 -1
  214. package/dist/components/Slide/slideI18n.cjs.map +1 -1
  215. package/dist/components/Slide/slideI18n.d.ts +6 -3
  216. package/dist/components/Slide/slideI18n.es.js +10 -155
  217. package/dist/components/Slide/slideI18n.es.js.map +1 -1
  218. package/dist/components/Slide/useSlide.d.ts +1 -1
  219. package/dist/components/Slide/utils/appendedMarkerAdvance.d.ts +1 -1
  220. package/dist/components/Slide/utils/audioSegments.d.ts +1 -1
  221. package/dist/components/Slide/utils/interactionResolution.d.ts +2 -2
  222. package/dist/components/Slide/utils/listenModeElementList.d.ts +2 -2
  223. package/dist/components/Slide/utils/markdownScaling.d.ts +1 -1
  224. package/dist/components/Slide/utils/playerCustomActions.d.ts +2 -2
  225. package/dist/components/Slide/utils/playerKeyboardShortcuts.cjs +1 -1
  226. package/dist/components/Slide/utils/playerKeyboardShortcuts.cjs.map +1 -1
  227. package/dist/components/Slide/utils/playerKeyboardShortcuts.d.ts +1 -1
  228. package/dist/components/Slide/utils/playerKeyboardShortcuts.es.js +20 -20
  229. package/dist/components/Slide/utils/playerKeyboardShortcuts.es.js.map +1 -1
  230. package/dist/components/Slide/utils/runStreamFixture.d.ts +1 -1
  231. package/dist/components/Slide/utils/segmentSeek.d.ts +1 -1
  232. package/dist/components/Slide/utils/silentStepAutoAdvance.d.ts +1 -1
  233. package/dist/components/Slide/utils/streamingNavigation.d.ts +1 -1
  234. package/dist/components/Slide/utils/subtitleCue.d.ts +1 -1
  235. package/dist/components/Slide/utils/subtitleJumpNavigation.d.ts +1 -1
  236. package/dist/components/index.d.ts +22 -18
  237. package/dist/components/ui/button.cjs +1 -1
  238. package/dist/components/ui/button.cjs.map +1 -1
  239. package/dist/components/ui/button.es.js +12 -13
  240. package/dist/components/ui/button.es.js.map +1 -1
  241. package/dist/components/ui/checkbox.cjs +1 -1
  242. package/dist/components/ui/checkbox.cjs.map +1 -1
  243. package/dist/components/ui/checkbox.es.js +35 -35
  244. package/dist/components/ui/checkbox.es.js.map +1 -1
  245. package/dist/components/ui/dialog.cjs +1 -1
  246. package/dist/components/ui/dialog.cjs.map +1 -1
  247. package/dist/components/ui/dialog.d.ts +5 -1
  248. package/dist/components/ui/dialog.es.js +37 -37
  249. package/dist/components/ui/dialog.es.js.map +1 -1
  250. package/dist/components/ui/input.cjs +1 -1
  251. package/dist/components/ui/input.cjs.map +1 -1
  252. package/dist/components/ui/input.es.js +4 -4
  253. package/dist/components/ui/input.es.js.map +1 -1
  254. package/dist/components/ui/inputGroup/button.cjs +1 -1
  255. package/dist/components/ui/inputGroup/button.cjs.map +1 -1
  256. package/dist/components/ui/inputGroup/button.es.js +9 -10
  257. package/dist/components/ui/inputGroup/button.es.js.map +1 -1
  258. package/dist/components/ui/inputGroup/input-group.cjs +1 -1
  259. package/dist/components/ui/inputGroup/input-group.cjs.map +1 -1
  260. package/dist/components/ui/inputGroup/input-group.d.ts +1 -1
  261. package/dist/components/ui/inputGroup/input-group.es.js +10 -10
  262. package/dist/components/ui/inputGroup/input-group.es.js.map +1 -1
  263. package/dist/components/ui/inputGroup/textarea.cjs +1 -1
  264. package/dist/components/ui/inputGroup/textarea.cjs.map +1 -1
  265. package/dist/components/ui/inputGroup/textarea.es.js +3 -3
  266. package/dist/components/ui/inputGroup/textarea.es.js.map +1 -1
  267. package/dist/components/ui/loading-overlay-card.cjs +2 -2
  268. package/dist/components/ui/loading-overlay-card.cjs.map +1 -1
  269. package/dist/components/ui/loading-overlay-card.es.js +11 -11
  270. package/dist/components/ui/loading-overlay-card.es.js.map +1 -1
  271. package/dist/components/ui/popover.cjs +1 -1
  272. package/dist/components/ui/popover.cjs.map +1 -1
  273. package/dist/components/ui/popover.es.js +6 -6
  274. package/dist/components/ui/popover.es.js.map +1 -1
  275. package/dist/components/ui/tooltip.cjs +1 -1
  276. package/dist/components/ui/tooltip.cjs.map +1 -1
  277. package/dist/components/ui/tooltip.es.js +16 -16
  278. package/dist/components/ui/tooltip.es.js.map +1 -1
  279. package/dist/editor.d.ts +2 -2
  280. package/dist/fonts/KaTeX_AMS-Regular.ttf +0 -0
  281. package/dist/fonts/KaTeX_AMS-Regular.woff +0 -0
  282. package/dist/fonts/KaTeX_AMS-Regular.woff2 +0 -0
  283. package/dist/fonts/KaTeX_Caligraphic-Bold.ttf +0 -0
  284. package/dist/fonts/KaTeX_Caligraphic-Bold.woff +0 -0
  285. package/dist/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
  286. package/dist/fonts/KaTeX_Caligraphic-Regular.ttf +0 -0
  287. package/dist/fonts/KaTeX_Caligraphic-Regular.woff +0 -0
  288. package/dist/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
  289. package/dist/fonts/KaTeX_Fraktur-Bold.ttf +0 -0
  290. package/dist/fonts/KaTeX_Fraktur-Bold.woff +0 -0
  291. package/dist/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
  292. package/dist/fonts/KaTeX_Fraktur-Regular.ttf +0 -0
  293. package/dist/fonts/KaTeX_Fraktur-Regular.woff +0 -0
  294. package/dist/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
  295. package/dist/fonts/KaTeX_Main-Bold.ttf +0 -0
  296. package/dist/fonts/KaTeX_Main-Bold.woff +0 -0
  297. package/dist/fonts/KaTeX_Main-Bold.woff2 +0 -0
  298. package/dist/fonts/KaTeX_Main-BoldItalic.ttf +0 -0
  299. package/dist/fonts/KaTeX_Main-BoldItalic.woff +0 -0
  300. package/dist/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
  301. package/dist/fonts/KaTeX_Main-Italic.ttf +0 -0
  302. package/dist/fonts/KaTeX_Main-Italic.woff +0 -0
  303. package/dist/fonts/KaTeX_Main-Italic.woff2 +0 -0
  304. package/dist/fonts/KaTeX_Main-Regular.ttf +0 -0
  305. package/dist/fonts/KaTeX_Main-Regular.woff +0 -0
  306. package/dist/fonts/KaTeX_Main-Regular.woff2 +0 -0
  307. package/dist/fonts/KaTeX_Math-BoldItalic.ttf +0 -0
  308. package/dist/fonts/KaTeX_Math-BoldItalic.woff +0 -0
  309. package/dist/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
  310. package/dist/fonts/KaTeX_Math-Italic.ttf +0 -0
  311. package/dist/fonts/KaTeX_Math-Italic.woff +0 -0
  312. package/dist/fonts/KaTeX_Math-Italic.woff2 +0 -0
  313. package/dist/fonts/KaTeX_SansSerif-Bold.ttf +0 -0
  314. package/dist/fonts/KaTeX_SansSerif-Bold.woff +0 -0
  315. package/dist/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
  316. package/dist/fonts/KaTeX_SansSerif-Italic.ttf +0 -0
  317. package/dist/fonts/KaTeX_SansSerif-Italic.woff +0 -0
  318. package/dist/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
  319. package/dist/fonts/KaTeX_SansSerif-Regular.ttf +0 -0
  320. package/dist/fonts/KaTeX_SansSerif-Regular.woff +0 -0
  321. package/dist/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
  322. package/dist/fonts/KaTeX_Script-Regular.ttf +0 -0
  323. package/dist/fonts/KaTeX_Script-Regular.woff +0 -0
  324. package/dist/fonts/KaTeX_Script-Regular.woff2 +0 -0
  325. package/dist/fonts/KaTeX_Size1-Regular.ttf +0 -0
  326. package/dist/fonts/KaTeX_Size1-Regular.woff +0 -0
  327. package/dist/fonts/KaTeX_Size1-Regular.woff2 +0 -0
  328. package/dist/fonts/KaTeX_Size2-Regular.ttf +0 -0
  329. package/dist/fonts/KaTeX_Size2-Regular.woff +0 -0
  330. package/dist/fonts/KaTeX_Size2-Regular.woff2 +0 -0
  331. package/dist/fonts/KaTeX_Size3-Regular.ttf +0 -0
  332. package/dist/fonts/KaTeX_Size3-Regular.woff +0 -0
  333. package/dist/fonts/KaTeX_Size3-Regular.woff2 +0 -0
  334. package/dist/fonts/KaTeX_Size4-Regular.ttf +0 -0
  335. package/dist/fonts/KaTeX_Size4-Regular.woff +0 -0
  336. package/dist/fonts/KaTeX_Size4-Regular.woff2 +0 -0
  337. package/dist/fonts/KaTeX_Typewriter-Regular.ttf +0 -0
  338. package/dist/fonts/KaTeX_Typewriter-Regular.woff +0 -0
  339. package/dist/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
  340. package/dist/index.cjs +1 -1
  341. package/dist/index.d.ts +2 -2
  342. package/dist/index.es.js +22 -19
  343. package/dist/index.es.js.map +1 -1
  344. package/dist/lib/locale.cjs +1 -1
  345. package/dist/lib/locale.cjs.map +1 -1
  346. package/dist/lib/locale.d.ts +5 -1
  347. package/dist/lib/locale.es.js +26 -13
  348. package/dist/lib/locale.es.js.map +1 -1
  349. package/dist/lib/locale.test.d.ts +1 -0
  350. package/dist/lib/useDetachedLanguage.cjs +2 -0
  351. package/dist/lib/useDetachedLanguage.cjs.map +1 -0
  352. package/dist/lib/useDetachedLanguage.d.ts +3 -0
  353. package/dist/lib/useDetachedLanguage.es.js +25 -0
  354. package/dist/lib/useDetachedLanguage.es.js.map +1 -0
  355. package/dist/lib/useResolvedDirection.cjs +2 -0
  356. package/dist/lib/useResolvedDirection.cjs.map +1 -0
  357. package/dist/lib/useResolvedDirection.d.ts +6 -0
  358. package/dist/lib/useResolvedDirection.es.js +37 -0
  359. package/dist/lib/useResolvedDirection.es.js.map +1 -0
  360. package/dist/markdown-flow-ui-lib.css +1 -1
  361. package/dist/node_modules/@radix-ui/react-arrow/dist/index.cjs +1 -1
  362. package/dist/node_modules/@radix-ui/react-arrow/dist/index.cjs.map +1 -1
  363. package/dist/node_modules/@radix-ui/react-arrow/dist/index.es.js +6 -6
  364. package/dist/node_modules/@radix-ui/react-arrow/dist/index.es.js.map +1 -1
  365. package/dist/node_modules/@radix-ui/react-context/dist/index.cjs +1 -1
  366. package/dist/node_modules/@radix-ui/react-context/dist/index.cjs.map +1 -1
  367. package/dist/node_modules/@radix-ui/react-context/dist/index.es.js +21 -21
  368. package/dist/node_modules/@radix-ui/react-context/dist/index.es.js.map +1 -1
  369. package/dist/node_modules/@radix-ui/react-dialog/dist/index.cjs +2 -2
  370. package/dist/node_modules/@radix-ui/react-dialog/dist/index.cjs.map +1 -1
  371. package/dist/node_modules/@radix-ui/react-dialog/dist/index.es.js +100 -100
  372. package/dist/node_modules/@radix-ui/react-dialog/dist/index.es.js.map +1 -1
  373. package/dist/node_modules/@radix-ui/react-dismissable-layer/dist/index.cjs +1 -1
  374. package/dist/node_modules/@radix-ui/react-dismissable-layer/dist/index.cjs.map +1 -1
  375. package/dist/node_modules/@radix-ui/react-dismissable-layer/dist/index.es.js +38 -38
  376. package/dist/node_modules/@radix-ui/react-dismissable-layer/dist/index.es.js.map +1 -1
  377. package/dist/node_modules/@radix-ui/react-focus-scope/dist/index.cjs +1 -1
  378. package/dist/node_modules/@radix-ui/react-focus-scope/dist/index.cjs.map +1 -1
  379. package/dist/node_modules/@radix-ui/react-focus-scope/dist/index.es.js +9 -9
  380. package/dist/node_modules/@radix-ui/react-focus-scope/dist/index.es.js.map +1 -1
  381. package/dist/node_modules/@radix-ui/react-popover/dist/index.cjs +1 -1
  382. package/dist/node_modules/@radix-ui/react-popover/dist/index.cjs.map +1 -1
  383. package/dist/node_modules/@radix-ui/react-popover/dist/index.es.js +95 -95
  384. package/dist/node_modules/@radix-ui/react-popover/dist/index.es.js.map +1 -1
  385. package/dist/node_modules/@radix-ui/react-popper/dist/index.cjs +1 -1
  386. package/dist/node_modules/@radix-ui/react-popper/dist/index.cjs.map +1 -1
  387. package/dist/node_modules/@radix-ui/react-popper/dist/index.es.js +48 -48
  388. package/dist/node_modules/@radix-ui/react-popper/dist/index.es.js.map +1 -1
  389. package/dist/node_modules/@radix-ui/react-portal/dist/index.cjs +1 -1
  390. package/dist/node_modules/@radix-ui/react-portal/dist/index.cjs.map +1 -1
  391. package/dist/node_modules/@radix-ui/react-portal/dist/index.es.js +6 -6
  392. package/dist/node_modules/@radix-ui/react-portal/dist/index.es.js.map +1 -1
  393. package/dist/node_modules/@radix-ui/react-primitive/dist/index.cjs +1 -1
  394. package/dist/node_modules/@radix-ui/react-primitive/dist/index.cjs.map +1 -1
  395. package/dist/node_modules/@radix-ui/react-primitive/dist/index.es.js +9 -9
  396. package/dist/node_modules/@radix-ui/react-primitive/dist/index.es.js.map +1 -1
  397. package/dist/node_modules/@radix-ui/react-slot/dist/index.cjs +1 -1
  398. package/dist/node_modules/@radix-ui/react-slot/dist/index.cjs.map +1 -1
  399. package/dist/node_modules/@radix-ui/react-slot/dist/index.es.js +17 -17
  400. package/dist/node_modules/@radix-ui/react-slot/dist/index.es.js.map +1 -1
  401. package/dist/node_modules/@radix-ui/react-tooltip/dist/index.cjs +1 -1
  402. package/dist/node_modules/@radix-ui/react-tooltip/dist/index.cjs.map +1 -1
  403. package/dist/node_modules/@radix-ui/react-tooltip/dist/index.es.js +100 -100
  404. package/dist/node_modules/@radix-ui/react-tooltip/dist/index.es.js.map +1 -1
  405. package/dist/node_modules/@radix-ui/react-visually-hidden/dist/index.cjs +1 -1
  406. package/dist/node_modules/@radix-ui/react-visually-hidden/dist/index.cjs.map +1 -1
  407. package/dist/node_modules/@radix-ui/react-visually-hidden/dist/index.es.js +6 -6
  408. package/dist/node_modules/@radix-ui/react-visually-hidden/dist/index.es.js.map +1 -1
  409. package/dist/node_modules/@uiw/react-codemirror/esm/index.cjs +1 -1
  410. package/dist/node_modules/@uiw/react-codemirror/esm/index.cjs.map +1 -1
  411. package/dist/node_modules/@uiw/react-codemirror/esm/index.es.js +27 -27
  412. package/dist/node_modules/@uiw/react-codemirror/esm/index.es.js.map +1 -1
  413. package/dist/node_modules/lucide-react/dist/esm/icons/{chevron-down.cjs → chevrons-down.cjs} +2 -2
  414. package/dist/node_modules/lucide-react/dist/esm/icons/chevrons-down.cjs.map +1 -0
  415. package/dist/node_modules/lucide-react/dist/esm/icons/{chevron-down.es.js → chevrons-down.es.js} +6 -3
  416. package/dist/node_modules/lucide-react/dist/esm/icons/chevrons-down.es.js.map +1 -0
  417. package/dist/node_modules/rc-input/es/BaseInput.cjs +1 -1
  418. package/dist/node_modules/rc-input/es/BaseInput.es.js +1 -1
  419. package/dist/node_modules/rc-textarea/es/ResizableTextArea.cjs +1 -1
  420. package/dist/node_modules/rc-textarea/es/ResizableTextArea.es.js +1 -1
  421. package/dist/node_modules/rc-textarea/es/TextArea.cjs +1 -1
  422. package/dist/node_modules/rc-textarea/es/TextArea.es.js +1 -1
  423. package/dist/node_modules/rc-textarea/es/index.cjs +1 -1
  424. package/dist/node_modules/rc-textarea/es/index.es.js +1 -1
  425. package/dist/node_modules/react-markdown/lib/index.cjs +1 -1
  426. package/dist/node_modules/react-markdown/lib/index.cjs.map +1 -1
  427. package/dist/node_modules/react-markdown/lib/index.es.js +39 -39
  428. package/dist/node_modules/react-markdown/lib/index.es.js.map +1 -1
  429. package/dist/node_modules/remark-flow/dist/interaction-plugin-core.cjs +1 -1
  430. package/dist/node_modules/remark-flow/dist/interaction-plugin-core.es.js +1 -1
  431. package/dist/renderer.cjs +1 -1
  432. package/dist/renderer.d.ts +18 -17
  433. package/dist/renderer.es.js +20 -17
  434. package/dist/renderer.es.js.map +1 -1
  435. package/dist/scroll.cjs +2 -0
  436. package/dist/scroll.cjs.map +1 -0
  437. package/dist/scroll.d.ts +6 -0
  438. package/dist/scroll.es.js +9 -0
  439. package/dist/scroll.es.js.map +1 -0
  440. package/dist/slide.d.ts +3 -3
  441. package/package.json +13 -2
  442. package/dist/_virtual/jsx-runtime.cjs +0 -2
  443. package/dist/_virtual/jsx-runtime.cjs.map +0 -1
  444. package/dist/_virtual/jsx-runtime.es.js +0 -6
  445. package/dist/_virtual/jsx-runtime.es.js.map +0 -1
  446. package/dist/_virtual/jsx-runtime.es2.js +0 -5
  447. package/dist/_virtual/jsx-runtime.es2.js.map +0 -1
  448. package/dist/_virtual/jsx-runtime2.cjs +0 -2
  449. package/dist/_virtual/jsx-runtime2.cjs.map +0 -1
  450. package/dist/_virtual/react-jsx-runtime.development.cjs +0 -2
  451. package/dist/_virtual/react-jsx-runtime.development.cjs.map +0 -1
  452. package/dist/_virtual/react-jsx-runtime.development.es.js +0 -5
  453. package/dist/_virtual/react-jsx-runtime.development.es.js.map +0 -1
  454. package/dist/_virtual/react-jsx-runtime.production.cjs +0 -2
  455. package/dist/_virtual/react-jsx-runtime.production.cjs.map +0 -1
  456. package/dist/_virtual/react-jsx-runtime.production.es.js +0 -5
  457. package/dist/_virtual/react-jsx-runtime.production.es.js.map +0 -1
  458. package/dist/lib/localeTextMap.cjs +0 -2
  459. package/dist/lib/localeTextMap.cjs.map +0 -1
  460. package/dist/lib/localeTextMap.es.js +0 -5
  461. package/dist/lib/localeTextMap.es.js.map +0 -1
  462. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-down.cjs.map +0 -1
  463. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-down.es.js.map +0 -1
  464. package/dist/node_modules/react/cjs/react-jsx-runtime.development.cjs +0 -24
  465. package/dist/node_modules/react/cjs/react-jsx-runtime.development.cjs.map +0 -1
  466. package/dist/node_modules/react/cjs/react-jsx-runtime.development.es.js +0 -409
  467. package/dist/node_modules/react/cjs/react-jsx-runtime.development.es.js.map +0 -1
  468. package/dist/node_modules/react/cjs/react-jsx-runtime.production.cjs +0 -10
  469. package/dist/node_modules/react/cjs/react-jsx-runtime.production.cjs.map +0 -1
  470. package/dist/node_modules/react/cjs/react-jsx-runtime.production.es.js +0 -36
  471. package/dist/node_modules/react/cjs/react-jsx-runtime.production.es.js.map +0 -1
  472. package/dist/node_modules/react/jsx-runtime.cjs +0 -2
  473. package/dist/node_modules/react/jsx-runtime.cjs.map +0 -1
  474. package/dist/node_modules/react/jsx-runtime.es.js +0 -11
  475. package/dist/node_modules/react/jsx-runtime.es.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"VariableSearchDropdown.es.js","sources":["../../../../src/components/MarkdownFlowEditor/components/VariableSearchDropdown.tsx"],"sourcesContent":["import type React from \"react\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { Search } from \"lucide-react\";\nimport { Variable } from \"../types\";\nimport { Input } from \"../../ui/input\";\nimport { cn } from \"../../../lib/utils\";\n\ninterface VariableSearchDropdownProps {\n open: boolean;\n anchorElement: HTMLElement | null;\n onClose: () => void;\n onSelect: (variable: Variable) => void;\n variables: Variable[];\n systemVariables: Variable[];\n labels: {\n searchPlaceholder: string;\n systemLabel: string;\n customLabel: string;\n emptyLabel: string;\n };\n}\n\nconst VariableSearchDropdown: React.FC<VariableSearchDropdownProps> = ({\n open,\n anchorElement,\n onClose,\n onSelect,\n variables,\n systemVariables,\n labels,\n}) => {\n const containerRef = useRef<HTMLDivElement | null>(null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n const [query, setQuery] = useState(\"\");\n const [position, setPosition] = useState({ left: 0, top: 0 });\n const [highlightIndex, setHighlightIndex] = useState(-1);\n\n const updatePosition = useCallback(() => {\n if (!anchorElement) return;\n const rect = anchorElement.getBoundingClientRect();\n setPosition({\n left: rect.left,\n top: rect.bottom + 8,\n });\n }, [anchorElement]);\n\n useEffect(() => {\n if (!open) {\n setQuery(\"\");\n setHighlightIndex(-1);\n return;\n }\n updatePosition();\n const focusTimer = window.setTimeout(() => {\n inputRef.current?.focus();\n }, 0);\n const handleClick = (event: MouseEvent) => {\n const target = event.target as Node | null;\n if (\n containerRef.current &&\n !containerRef.current.contains(target) &&\n anchorElement &&\n !anchorElement.contains(target)\n ) {\n onClose();\n }\n };\n const handleScroll = () => updatePosition();\n window.addEventListener(\"mousedown\", handleClick);\n window.addEventListener(\"scroll\", handleScroll, true);\n window.addEventListener(\"resize\", handleScroll);\n\n return () => {\n window.clearTimeout(focusTimer);\n window.removeEventListener(\"mousedown\", handleClick);\n window.removeEventListener(\"scroll\", handleScroll, true);\n window.removeEventListener(\"resize\", handleScroll);\n };\n }, [open, anchorElement, onClose, updatePosition]);\n\n const normalizedQuery = query.trim().toLowerCase();\n const filterVariable = useCallback(\n (variable: Variable) => {\n if (!normalizedQuery) return true;\n const nameMatch = variable.name.toLowerCase().includes(normalizedQuery);\n const labelMatch = variable.label\n ? variable.label.toLowerCase().includes(normalizedQuery)\n : false;\n return nameMatch || labelMatch;\n },\n [normalizedQuery]\n );\n\n const filteredSystemVariables = useMemo(\n () => systemVariables.filter(filterVariable),\n [systemVariables, filterVariable]\n );\n const filteredCustomVariables = useMemo(\n () => variables.filter(filterVariable),\n [variables, filterVariable]\n );\n\n const orderedItems = useMemo(\n () => [\n ...filteredSystemVariables.map((variable) => ({\n group: \"system\" as const,\n variable,\n })),\n ...filteredCustomVariables.map((variable) => ({\n group: \"custom\" as const,\n variable,\n })),\n ],\n [filteredSystemVariables, filteredCustomVariables]\n );\n\n const indexesByKey = useMemo(() => {\n const map = new Map<string, number>();\n orderedItems.forEach((item, index) => {\n map.set(`${item.group}-${item.variable.name}`, index);\n });\n return map;\n }, [orderedItems]);\n\n useEffect(() => {\n if (!open || !orderedItems.length) {\n setHighlightIndex(-1);\n }\n }, [open, orderedItems.length]);\n\n const handleSelect = useCallback(\n (variable: Variable) => {\n onSelect(variable);\n onClose();\n },\n [onClose, onSelect]\n );\n\n const handleInputKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (!orderedItems.length) {\n if (event.key === \"Escape\") {\n onClose();\n }\n return;\n }\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n setHighlightIndex((prev) => (prev + 1) % orderedItems.length);\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault();\n setHighlightIndex((prev) =>\n prev <= 0 ? orderedItems.length - 1 : prev - 1\n );\n } else if (event.key === \"Enter\") {\n event.preventDefault();\n const item = orderedItems[highlightIndex];\n if (item) {\n handleSelect(item.variable);\n }\n } else if (event.key === \"Escape\") {\n event.preventDefault();\n onClose();\n }\n };\n\n if (!open) {\n return null;\n }\n\n return (\n <div\n ref={containerRef}\n className=\"markdown-flow-editor-variable-search\"\n style={{\n position: \"fixed\",\n left: `${position.left}px`,\n top: `${position.top}px`,\n }}\n >\n <div className=\"relative\">\n <Search className=\"variable-search-icon\" />\n <Input\n ref={inputRef}\n value={query}\n placeholder={labels.searchPlaceholder}\n onChange={(event) => setQuery(event.target.value)}\n onKeyDown={handleInputKeyDown}\n className=\"variable-search-input\"\n />\n </div>\n <div className=\"variable-search-list\">\n {filteredSystemVariables.length > 0 && (\n <div className=\"variable-search-section\">\n <p className=\"variable-search-section-title\">\n {labels.systemLabel}\n </p>\n {filteredSystemVariables.map((variable) => {\n const index = indexesByKey.get(`system-${variable.name}`) ?? -1;\n const isActive = highlightIndex === index;\n return (\n <button\n key={`system-${variable.name}`}\n type=\"button\"\n onClick={() => handleSelect(variable)}\n onMouseEnter={() => {\n if (index >= 0) {\n setHighlightIndex(index);\n }\n }}\n className={cn(\n \"variable-search-item\",\n isActive && \"variable-search-item-active\"\n )}\n >\n <span className=\"variable-search-item-name\">\n {variable.name}\n </span>\n {variable.label && (\n <span className=\"variable-search-item-label\">\n {variable.label}\n </span>\n )}\n </button>\n );\n })}\n </div>\n )}\n\n {filteredCustomVariables.length > 0 && (\n <div className=\"variable-search-section\">\n <p className=\"variable-search-section-title\">\n {labels.customLabel}\n </p>\n {filteredCustomVariables.map((variable) => {\n const index = indexesByKey.get(`custom-${variable.name}`) ?? -1;\n const isActive = highlightIndex === index;\n return (\n <button\n key={`custom-${variable.name}`}\n type=\"button\"\n onClick={() => handleSelect(variable)}\n onMouseEnter={() => {\n if (index >= 0) {\n setHighlightIndex(index);\n }\n }}\n className={cn(\n \"variable-search-item\",\n isActive && \"variable-search-item-active\"\n )}\n >\n <span className=\"variable-search-item-name\">\n {variable.name}\n </span>\n {variable.label && (\n <span className=\"variable-search-item-label\">\n {variable.label}\n </span>\n )}\n </button>\n );\n })}\n </div>\n )}\n\n {filteredSystemVariables.length === 0 &&\n filteredCustomVariables.length === 0 && (\n <div className=\"variable-search-empty\">{labels.emptyLabel}</div>\n )}\n </div>\n </div>\n );\n};\n\nexport default VariableSearchDropdown;\n"],"names":["VariableSearchDropdown","open","anchorElement","onClose","onSelect","variables","systemVariables","labels","containerRef","useRef","inputRef","query","setQuery","useState","position","setPosition","highlightIndex","setHighlightIndex","updatePosition","useCallback","rect","useEffect","focusTimer","handleClick","event","target","handleScroll","normalizedQuery","filterVariable","variable","nameMatch","labelMatch","filteredSystemVariables","useMemo","filteredCustomVariables","orderedItems","indexesByKey","map","item","index","handleSelect","handleInputKeyDown","prev","jsxs","jsx","Search","Input","isActive","cn"],"mappings":"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"}
1
+ {"version":3,"file":"VariableSearchDropdown.es.js","sources":["../../../../src/components/MarkdownFlowEditor/components/VariableSearchDropdown.tsx"],"sourcesContent":["import React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { Search } from \"lucide-react\";\nimport { Variable } from \"../types\";\nimport { Input } from \"../../ui/input\";\nimport { cn } from \"../../../lib/utils\";\n\ninterface VariableSearchDropdownProps {\n open: boolean;\n anchorElement: HTMLElement | null;\n onClose: () => void;\n onSelect: (variable: Variable) => void;\n variables: Variable[];\n systemVariables: Variable[];\n labels: {\n searchPlaceholder: string;\n systemLabel: string;\n customLabel: string;\n emptyLabel: string;\n };\n}\n\nconst VariableSearchDropdown: React.FC<VariableSearchDropdownProps> = ({\n open,\n anchorElement,\n onClose,\n onSelect,\n variables,\n systemVariables,\n labels,\n}) => {\n const containerRef = useRef<HTMLDivElement | null>(null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n const [query, setQuery] = useState(\"\");\n const [position, setPosition] = useState({ left: 0, top: 0 });\n const [highlightIndex, setHighlightIndex] = useState(-1);\n\n const updatePosition = useCallback(() => {\n if (!anchorElement) return;\n const rect = anchorElement.getBoundingClientRect();\n const doc = anchorElement.ownerDocument;\n const view = doc.defaultView;\n if (!view) return;\n const width = containerRef.current?.getBoundingClientRect().width ?? 0;\n const desiredLeft =\n view.getComputedStyle(anchorElement).direction === \"rtl\"\n ? rect.right - width\n : rect.left;\n const maxLeft = Math.max(8, doc.documentElement.clientWidth - width - 8);\n setPosition({\n left: Math.min(Math.max(8, desiredLeft), maxLeft),\n top: rect.bottom + 8,\n });\n }, [anchorElement]);\n\n useEffect(() => {\n if (!open) {\n setQuery(\"\");\n setHighlightIndex(-1);\n return;\n }\n const view = anchorElement?.ownerDocument.defaultView;\n if (!view) return;\n updatePosition();\n const focusTimer = view.setTimeout(() => {\n inputRef.current?.focus();\n }, 0);\n const handleClick = (event: MouseEvent) => {\n const target = event.target as Node | null;\n if (\n containerRef.current &&\n !containerRef.current.contains(target) &&\n anchorElement &&\n !anchorElement.contains(target)\n ) {\n onClose();\n }\n };\n const handleScroll = () => updatePosition();\n view.addEventListener(\"mousedown\", handleClick);\n view.addEventListener(\"scroll\", handleScroll, true);\n view.addEventListener(\"resize\", handleScroll);\n\n return () => {\n view.clearTimeout(focusTimer);\n view.removeEventListener(\"mousedown\", handleClick);\n view.removeEventListener(\"scroll\", handleScroll, true);\n view.removeEventListener(\"resize\", handleScroll);\n };\n }, [open, anchorElement, onClose, updatePosition]);\n\n const normalizedQuery = query.trim().toLowerCase();\n const filterVariable = useCallback(\n (variable: Variable) => {\n if (!normalizedQuery) return true;\n const nameMatch = variable.name.toLowerCase().includes(normalizedQuery);\n const labelMatch = variable.label\n ? variable.label.toLowerCase().includes(normalizedQuery)\n : false;\n return nameMatch || labelMatch;\n },\n [normalizedQuery]\n );\n\n const filteredSystemVariables = useMemo(\n () => systemVariables.filter(filterVariable),\n [systemVariables, filterVariable]\n );\n const filteredCustomVariables = useMemo(\n () => variables.filter(filterVariable),\n [variables, filterVariable]\n );\n\n const orderedItems = useMemo(\n () => [\n ...filteredSystemVariables.map((variable) => ({\n group: \"system\" as const,\n variable,\n })),\n ...filteredCustomVariables.map((variable) => ({\n group: \"custom\" as const,\n variable,\n })),\n ],\n [filteredSystemVariables, filteredCustomVariables]\n );\n\n const indexesByKey = useMemo(() => {\n const map = new Map<string, number>();\n orderedItems.forEach((item, index) => {\n map.set(`${item.group}-${item.variable.name}`, index);\n });\n return map;\n }, [orderedItems]);\n\n useEffect(() => {\n if (!open || !orderedItems.length) {\n setHighlightIndex(-1);\n }\n }, [open, orderedItems.length]);\n\n const handleSelect = useCallback(\n (variable: Variable) => {\n onSelect(variable);\n onClose();\n },\n [onClose, onSelect]\n );\n\n const handleInputKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (!orderedItems.length) {\n if (event.key === \"Escape\") {\n onClose();\n }\n return;\n }\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n setHighlightIndex((prev) => (prev + 1) % orderedItems.length);\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault();\n setHighlightIndex((prev) =>\n prev <= 0 ? orderedItems.length - 1 : prev - 1\n );\n } else if (event.key === \"Enter\") {\n event.preventDefault();\n const item = orderedItems[highlightIndex];\n if (item) {\n handleSelect(item.variable);\n }\n } else if (event.key === \"Escape\") {\n event.preventDefault();\n onClose();\n }\n };\n\n if (!open) {\n return null;\n }\n\n return (\n <div\n ref={containerRef}\n className=\"markdown-flow-editor-variable-search\"\n style={{\n position: \"fixed\",\n left: `${position.left}px`,\n top: `${position.top}px`,\n }}\n >\n <div className=\"relative\">\n <Search className=\"variable-search-icon\" />\n <Input\n ref={inputRef}\n value={query}\n placeholder={labels.searchPlaceholder}\n onChange={(event) => setQuery(event.target.value)}\n onKeyDown={handleInputKeyDown}\n className=\"variable-search-input\"\n />\n </div>\n <div className=\"variable-search-list\">\n {filteredSystemVariables.length > 0 && (\n <div className=\"variable-search-section\">\n <p className=\"variable-search-section-title\">\n {labels.systemLabel}\n </p>\n {filteredSystemVariables.map((variable) => {\n const index = indexesByKey.get(`system-${variable.name}`) ?? -1;\n const isActive = highlightIndex === index;\n return (\n <button\n key={`system-${variable.name}`}\n type=\"button\"\n onClick={() => handleSelect(variable)}\n onMouseEnter={() => {\n if (index >= 0) {\n setHighlightIndex(index);\n }\n }}\n className={cn(\n \"variable-search-item\",\n isActive && \"variable-search-item-active\"\n )}\n >\n <span className=\"variable-search-item-name\">\n {variable.name}\n </span>\n {variable.label && (\n <span className=\"variable-search-item-label\">\n {variable.label}\n </span>\n )}\n </button>\n );\n })}\n </div>\n )}\n\n {filteredCustomVariables.length > 0 && (\n <div className=\"variable-search-section\">\n <p className=\"variable-search-section-title\">\n {labels.customLabel}\n </p>\n {filteredCustomVariables.map((variable) => {\n const index = indexesByKey.get(`custom-${variable.name}`) ?? -1;\n const isActive = highlightIndex === index;\n return (\n <button\n key={`custom-${variable.name}`}\n type=\"button\"\n onClick={() => handleSelect(variable)}\n onMouseEnter={() => {\n if (index >= 0) {\n setHighlightIndex(index);\n }\n }}\n className={cn(\n \"variable-search-item\",\n isActive && \"variable-search-item-active\"\n )}\n >\n <span className=\"variable-search-item-name\">\n {variable.name}\n </span>\n {variable.label && (\n <span className=\"variable-search-item-label\">\n {variable.label}\n </span>\n )}\n </button>\n );\n })}\n </div>\n )}\n\n {filteredSystemVariables.length === 0 &&\n filteredCustomVariables.length === 0 && (\n <div className=\"variable-search-empty\">{labels.emptyLabel}</div>\n )}\n </div>\n </div>\n );\n};\n\nexport default VariableSearchDropdown;\n"],"names":["VariableSearchDropdown","open","anchorElement","onClose","onSelect","variables","systemVariables","labels","containerRef","useRef","inputRef","query","setQuery","useState","position","setPosition","highlightIndex","setHighlightIndex","updatePosition","useCallback","rect","doc","view","width","desiredLeft","maxLeft","useEffect","focusTimer","handleClick","event","target","handleScroll","normalizedQuery","filterVariable","variable","nameMatch","labelMatch","filteredSystemVariables","useMemo","filteredCustomVariables","orderedItems","indexesByKey","map","item","index","handleSelect","handleInputKeyDown","prev","jsxs","jsx","Search","Input","cn"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("../../../_virtual/jsx-runtime.cjs"),r=require("react"),I=require("../../ui/input.cjs"),N=require("../../ui/button.cjs"),M=require("../../../lib/utils.cjs"),K=require("../utils.cjs"),Q=require("../../../node_modules/react-i18next/dist/es/useTranslation.cjs"),O=require("../../../node_modules/lucide-react/dist/esm/icons/search.cjs"),v=require("../../../node_modules/lucide-react/dist/esm/icons/check.cjs"),U=require("../../../node_modules/lucide-react/dist/esm/icons/x.cjs"),Y=require("../../../node_modules/lucide-react/dist/esm/icons/plus.cjs"),L=[],G=({variables:D,systemVariables:P,selectedName:a,onSelect:o,onAddVariable:z})=>{const{t}=Q.useTranslation(),l=D??L,B=P??L,[i,R]=r.useState(l);r.useEffect(()=>{R(l)},[l]);const u=B,[c,y]=r.useState(""),[T,x]=r.useState(!1),[w,m]=r.useState(""),[d,p]=r.useState(!1),[V,f]=r.useState(!1),h=()=>{p(!1),f(!1)},n=c.toLowerCase(),S=s=>{const E=s.name.toLowerCase().includes(n),q=s.label?s.label.toLowerCase().includes(n):!1;return E||q},j=r.useMemo(()=>u.filter(S),[u,n]),b=r.useMemo(()=>i.filter(S),[i,n]),_=j.length>0||b.length>0,C=()=>{const s=w;if(!s||!K.isValidVariableName(s)){f(!0),p(!1);return}const E=s.toLowerCase();if([...i,...u].some(g=>g.name.toLowerCase()===E)){p(!0),f(!1);return}const A={name:s};R(g=>[A,...g]),z?.({name:s}),m(""),x(!1),y(""),h(),o?.(A)},k=()=>{x(!1),m(""),h()},$=s=>{m(s.target.value),(d||V)&&h()},F=s=>{s.key==="Enter"?C():s.key==="Escape"&&k()};return e.jsxRuntimeExports.jsxs("div",{className:"w-full max-w-sm rounded-lg border bg-white",children:[e.jsxRuntimeExports.jsxs("div",{className:"relative",children:[e.jsxRuntimeExports.jsx(O.default,{className:"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"}),e.jsxRuntimeExports.jsx(I.Input,{type:"text",placeholder:t("variableSearchPlaceholder","Search variable"),value:c,onChange:s=>y(s.target.value),className:"pl-8 h-8 border-0 focus-visible:ring-0 focus-visible:ring-offset-0"})]}),e.jsxRuntimeExports.jsx("div",{className:"max-h-[300px] overflow-y-auto p-2",children:_?e.jsxRuntimeExports.jsxs("div",{className:"space-y-4",children:[j.length>0&&e.jsxRuntimeExports.jsxs("div",{className:"space-y-1",children:[e.jsxRuntimeExports.jsx("p",{className:"px-3 text-xs font-medium text-muted-foreground",children:t("variableSectionSystem","System Variables")}),e.jsxRuntimeExports.jsx("div",{className:"space-y-1",children:j.map(s=>e.jsxRuntimeExports.jsxs("button",{onClick:()=>o?.(s),className:M.cn("flex w-full items-start justify-between rounded-md px-3 py-2 text-left transition-colors hover:bg-accent",a===s.name&&"bg-accent"),children:[e.jsxRuntimeExports.jsxs("div",{className:"flex flex-col",children:[e.jsxRuntimeExports.jsx("span",{className:"text-sm font-medium text-foreground",children:s.name}),s.label&&e.jsxRuntimeExports.jsx("span",{className:"text-xs text-muted-foreground",children:s.label})]}),a===s.name&&e.jsxRuntimeExports.jsx(v.default,{className:"mt-1 h-4 w-4 text-foreground"})]},`system-${s.name}`))})]}),b.length>0&&e.jsxRuntimeExports.jsxs("div",{className:"space-y-1",children:[e.jsxRuntimeExports.jsx("p",{className:"px-3 text-xs font-medium text-muted-foreground",children:t("variableSectionCustom","Custom Variables")}),e.jsxRuntimeExports.jsx("div",{className:"space-y-1",children:b.map(s=>e.jsxRuntimeExports.jsxs("button",{onClick:()=>o?.(s),className:M.cn("flex w-full items-start justify-between rounded-md px-3 py-2 text-left transition-colors hover:bg-accent",a===s.name&&"bg-accent"),children:[e.jsxRuntimeExports.jsxs("div",{className:"flex flex-col",children:[e.jsxRuntimeExports.jsx("span",{className:"text-sm font-medium text-foreground",children:s.name}),s.label&&e.jsxRuntimeExports.jsx("span",{className:"text-xs text-muted-foreground",children:s.label})]}),a===s.name&&e.jsxRuntimeExports.jsx(v.default,{className:"mt-1 h-4 w-4 text-foreground"})]},`custom-${s.name}`))})]})]}):e.jsxRuntimeExports.jsx("div",{className:"px-3 py-6 text-center text-sm text-muted-foreground",children:c?t("variableNotFound","No variables found"):t("variableEmpty","No variables yet")})}),e.jsxRuntimeExports.jsx("div",{className:"border-t border-border p-2",children:T?e.jsxRuntimeExports.jsxs("div",{children:[e.jsxRuntimeExports.jsxs("div",{className:"flex items-center gap-2 rounded-md border border-border bg-background px-3 py-2",children:[e.jsxRuntimeExports.jsx(I.Input,{type:"text",placeholder:t("variableNamePlaceholder","Variable name"),value:w,onChange:$,onKeyDown:F,autoFocus:!0,className:"h-8 flex-1 border-0 px-0 focus-visible:ring-0 focus-visible:ring-offset-0"}),e.jsxRuntimeExports.jsx(N.Button,{variant:"ghost",size:"icon",onClick:k,className:"h-8 w-8 shrink-0 text-muted-foreground hover:text-foreground",children:e.jsxRuntimeExports.jsx(U.default,{className:"h-4 w-4"})}),e.jsxRuntimeExports.jsx(N.Button,{variant:"ghost",size:"icon",onClick:C,className:"h-8 w-8 shrink-0 text-muted-foreground hover:text-foreground",children:e.jsxRuntimeExports.jsx(v.default,{className:"h-4 w-4"})})]}),(d||V)&&e.jsxRuntimeExports.jsx("p",{className:"mt-1 px-3 text-xs text-red-500",children:d?t("variableAlreadyExists","Variable already exists"):t("variableNameInvalid","Use letters, numbers, or underscores without spaces")})]}):e.jsxRuntimeExports.jsxs(N.Button,{variant:"ghost",size:"sm",onClick:()=>x(!0),className:"w-full justify-start text-muted-foreground hover:text-foreground",children:[e.jsxRuntimeExports.jsx(Y.default,{className:"mr-2 h-4 w-4"}),t("variableAddNew","Add new variable")]})})]})};exports.default=G;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),a=require("react"),M=require("../../ui/input.cjs"),v=require("../../ui/button.cjs"),L=require("../../../lib/utils.cjs"),K=require("../utils.cjs"),Q=require("../../../node_modules/react-i18next/dist/es/useTranslation.cjs"),O=require("../../../node_modules/lucide-react/dist/esm/icons/search.cjs"),y=require("../../../node_modules/lucide-react/dist/esm/icons/check.cjs"),U=require("../../../node_modules/lucide-react/dist/esm/icons/x.cjs"),Y=require("../../../node_modules/lucide-react/dist/esm/icons/plus.cjs"),D=[],G=({variables:P,systemVariables:z,selectedName:r,onSelect:l,onAddVariable:B})=>{const{t}=Q.useTranslation(),o=P??D,R=z??D,[i,w]=a.useState(o);a.useEffect(()=>{w(o)},[o]);const c=R,[d,V]=a.useState(""),[T,u]=a.useState(!1),[S,m]=a.useState(""),[x,f]=a.useState(!1),[C,h]=a.useState(!1),b=()=>{f(!1),h(!1)},n=d.toLowerCase(),E=s=>{const N=s.name.toLowerCase().includes(n),A=s.label?s.label.toLowerCase().includes(n):!1;return N||A},p=a.useMemo(()=>c.filter(E),[c,n]),g=a.useMemo(()=>i.filter(E),[i,n]),_=p.length>0||g.length>0,k=()=>{const s=S;if(!s||!K.isValidVariableName(s)){h(!0),f(!1);return}const N=s.toLowerCase();if([...i,...c].some(j=>j.name.toLowerCase()===N)){f(!0),h(!1);return}const I={name:s};w(j=>[I,...j]),B?.({name:s}),m(""),u(!1),V(""),b(),l?.(I)},q=()=>{u(!1),m(""),b()},$=s=>{m(s.target.value),(x||C)&&b()},F=s=>{s.key==="Enter"?k():s.key==="Escape"&&q()};return e.jsxs("div",{className:"w-full max-w-sm rounded-lg border bg-white",children:[e.jsxs("div",{className:"relative",children:[e.jsx(O.default,{className:"absolute start-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"}),e.jsx(M.Input,{type:"text",placeholder:t("variableSearchPlaceholder","Search variable"),value:d,onChange:s=>V(s.target.value),className:"ps-8 h-8 border-0 focus-visible:ring-0 focus-visible:ring-offset-0"})]}),e.jsx("div",{className:"max-h-[300px] overflow-y-auto p-2",children:_?e.jsxs("div",{className:"space-y-4",children:[p.length>0&&e.jsxs("div",{className:"space-y-1",children:[e.jsx("p",{className:"px-3 text-xs font-medium text-muted-foreground",children:t("variableSectionSystem","System Variables")}),e.jsx("div",{className:"space-y-1",children:p.map(s=>e.jsxs("button",{onClick:()=>l?.(s),className:L.cn("flex w-full items-start justify-between rounded-md px-3 py-2 text-start transition-colors hover:bg-accent",r===s.name&&"bg-accent"),children:[e.jsxs("div",{className:"flex flex-col",children:[e.jsx("span",{className:"text-sm font-medium text-foreground",children:s.name}),s.label&&e.jsx("span",{className:"text-xs text-muted-foreground",children:s.label})]}),r===s.name&&e.jsx(y.default,{className:"mt-1 h-4 w-4 text-foreground"})]},`system-${s.name}`))})]}),g.length>0&&e.jsxs("div",{className:"space-y-1",children:[e.jsx("p",{className:"px-3 text-xs font-medium text-muted-foreground",children:t("variableSectionCustom","Custom Variables")}),e.jsx("div",{className:"space-y-1",children:g.map(s=>e.jsxs("button",{onClick:()=>l?.(s),className:L.cn("flex w-full items-start justify-between rounded-md px-3 py-2 text-start transition-colors hover:bg-accent",r===s.name&&"bg-accent"),children:[e.jsxs("div",{className:"flex flex-col",children:[e.jsx("span",{className:"text-sm font-medium text-foreground",children:s.name}),s.label&&e.jsx("span",{className:"text-xs text-muted-foreground",children:s.label})]}),r===s.name&&e.jsx(y.default,{className:"mt-1 h-4 w-4 text-foreground"})]},`custom-${s.name}`))})]})]}):e.jsx("div",{className:"px-3 py-6 text-center text-sm text-muted-foreground",children:d?t("variableNotFound","No variables found"):t("variableEmpty","No variables yet")})}),e.jsx("div",{className:"border-t border-border p-2",children:T?e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 rounded-md border border-border bg-background px-3 py-2",children:[e.jsx(M.Input,{type:"text",placeholder:t("variableNamePlaceholder","Variable name"),value:S,onChange:$,onKeyDown:F,autoFocus:!0,className:"h-8 flex-1 border-0 px-0 focus-visible:ring-0 focus-visible:ring-offset-0"}),e.jsx(v.Button,{variant:"ghost",size:"icon",onClick:q,className:"h-8 w-8 shrink-0 text-muted-foreground hover:text-foreground",children:e.jsx(U.default,{className:"h-4 w-4"})}),e.jsx(v.Button,{variant:"ghost",size:"icon",onClick:k,className:"h-8 w-8 shrink-0 text-muted-foreground hover:text-foreground",children:e.jsx(y.default,{className:"h-4 w-4"})})]}),(x||C)&&e.jsx("p",{className:"mt-1 px-3 text-xs text-red-500",children:x?t("variableAlreadyExists","Variable already exists"):t("variableNameInvalid","Use letters, numbers, or underscores without spaces")})]}):e.jsxs(v.Button,{variant:"ghost",size:"sm",onClick:()=>u(!0),className:"w-full justify-start text-muted-foreground hover:text-foreground",children:[e.jsx(Y.default,{className:"me-2 h-4 w-4"}),t("variableAddNew","Add new variable")]})})]})};exports.default=G;
2
2
  //# sourceMappingURL=VariableSelect.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"VariableSelect.cjs","sources":["../../../../src/components/MarkdownFlowEditor/components/VariableSelect.tsx"],"sourcesContent":["import type React from \"react\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { Search, Plus, Check, X } from \"lucide-react\";\nimport { Input } from \"../../ui/input\";\nimport { Button } from \"../../ui/button\";\nimport { cn } from \"../../../lib/utils\";\nimport { Variable } from \"../types\";\nimport { isValidVariableName } from \"../utils\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface VariableSelectProps {\n variables?: Variable[];\n systemVariables?: Variable[];\n selectedName?: string;\n onSelect?: (variable: Variable) => void;\n onAddVariable?: (variable: Variable) => void;\n}\n\nconst EMPTY_VARIABLES: Variable[] = [];\n\nconst VariableSelect = ({\n variables: initialVariables,\n systemVariables: initialSystemVariables,\n selectedName,\n onSelect,\n onAddVariable,\n}: VariableSelectProps) => {\n const { t } = useTranslation();\n const safeInitialVariables = initialVariables ?? EMPTY_VARIABLES;\n const safeInitialSystemVariables = initialSystemVariables ?? EMPTY_VARIABLES;\n\n const [variables, setVariables] = useState<Variable[]>(safeInitialVariables);\n useEffect(() => {\n setVariables(safeInitialVariables);\n }, [safeInitialVariables]);\n const systemVariables = safeInitialSystemVariables;\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [isAddingNew, setIsAddingNew] = useState(false);\n const [newVariableName, setNewVariableName] = useState(\"\");\n const [duplicateError, setDuplicateError] = useState(false);\n const [invalidNameError, setInvalidNameError] = useState(false);\n const resetErrors = () => {\n setDuplicateError(false);\n setInvalidNameError(false);\n };\n const normalizedSearch = searchQuery.toLowerCase();\n const filterPredicate = (variable: Variable) => {\n const nameMatch = variable.name.toLowerCase().includes(normalizedSearch);\n const labelMatch = variable.label\n ? variable.label.toLowerCase().includes(normalizedSearch)\n : false;\n return nameMatch || labelMatch;\n };\n\n const filteredSystemVariables = useMemo(\n () => systemVariables.filter(filterPredicate),\n [systemVariables, normalizedSearch]\n );\n const filteredCustomVariables = useMemo(\n () => variables.filter(filterPredicate),\n [variables, normalizedSearch]\n );\n const hasAnyResult =\n filteredSystemVariables.length > 0 || filteredCustomVariables.length > 0;\n\n const handleAddVariable = () => {\n const inputValue = newVariableName;\n if (!inputValue || !isValidVariableName(inputValue)) {\n setInvalidNameError(true);\n setDuplicateError(false);\n return;\n }\n\n const lowerName = inputValue.toLowerCase();\n const isDuplicate = [...variables, ...systemVariables].some(\n (v) => v.name.toLowerCase() === lowerName\n );\n\n if (isDuplicate) {\n setDuplicateError(true);\n setInvalidNameError(false);\n return;\n }\n\n const newVariable: Variable = {\n name: inputValue,\n };\n setVariables((prev) => [newVariable, ...prev]);\n onAddVariable?.({ name: inputValue });\n setNewVariableName(\"\");\n setIsAddingNew(false);\n setSearchQuery(\"\");\n resetErrors();\n onSelect?.(newVariable);\n };\n\n const handleCancelAdd = () => {\n setIsAddingNew(false);\n setNewVariableName(\"\");\n resetErrors();\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setNewVariableName(e.target.value);\n if (duplicateError || invalidNameError) {\n resetErrors();\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n handleAddVariable();\n } else if (e.key === \"Escape\") {\n handleCancelAdd();\n }\n };\n return (\n <div className=\"w-full max-w-sm rounded-lg border bg-white\">\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground\" />\n <Input\n type=\"text\"\n placeholder={t(\"variableSearchPlaceholder\", \"Search variable\")}\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"pl-8 h-8 border-0 focus-visible:ring-0 focus-visible:ring-offset-0\"\n />\n </div>\n\n <div className=\"max-h-[300px] overflow-y-auto p-2\">\n {hasAnyResult ? (\n <div className=\"space-y-4\">\n {filteredSystemVariables.length > 0 && (\n <div className=\"space-y-1\">\n <p className=\"px-3 text-xs font-medium text-muted-foreground\">\n {t(\"variableSectionSystem\", \"System Variables\")}\n </p>\n <div className=\"space-y-1\">\n {filteredSystemVariables.map((variable) => (\n <button\n key={`system-${variable.name}`}\n onClick={() => onSelect?.(variable)}\n className={cn(\n \"flex w-full items-start justify-between rounded-md px-3 py-2 text-left transition-colors hover:bg-accent\",\n selectedName === variable.name && \"bg-accent\"\n )}\n >\n <div className=\"flex flex-col\">\n <span className=\"text-sm font-medium text-foreground\">\n {variable.name}\n </span>\n {variable.label && (\n <span className=\"text-xs text-muted-foreground\">\n {variable.label}\n </span>\n )}\n </div>\n {selectedName === variable.name && (\n <Check className=\"mt-1 h-4 w-4 text-foreground\" />\n )}\n </button>\n ))}\n </div>\n </div>\n )}\n\n {filteredCustomVariables.length > 0 && (\n <div className=\"space-y-1\">\n <p className=\"px-3 text-xs font-medium text-muted-foreground\">\n {t(\"variableSectionCustom\", \"Custom Variables\")}\n </p>\n <div className=\"space-y-1\">\n {filteredCustomVariables.map((variable) => (\n <button\n key={`custom-${variable.name}`}\n onClick={() => onSelect?.(variable)}\n className={cn(\n \"flex w-full items-start justify-between rounded-md px-3 py-2 text-left transition-colors hover:bg-accent\",\n selectedName === variable.name && \"bg-accent\"\n )}\n >\n <div className=\"flex flex-col\">\n <span className=\"text-sm font-medium text-foreground\">\n {variable.name}\n </span>\n {variable.label && (\n <span className=\"text-xs text-muted-foreground\">\n {variable.label}\n </span>\n )}\n </div>\n {selectedName === variable.name && (\n <Check className=\"mt-1 h-4 w-4 text-foreground\" />\n )}\n </button>\n ))}\n </div>\n </div>\n )}\n </div>\n ) : (\n <div className=\"px-3 py-6 text-center text-sm text-muted-foreground\">\n {searchQuery\n ? t(\"variableNotFound\", \"No variables found\")\n : t(\"variableEmpty\", \"No variables yet\")}\n </div>\n )}\n </div>\n\n <div className=\"border-t border-border p-2\">\n {isAddingNew ? (\n <div>\n <div className=\"flex items-center gap-2 rounded-md border border-border bg-background px-3 py-2\">\n <Input\n type=\"text\"\n placeholder={t(\"variableNamePlaceholder\", \"Variable name\")}\n value={newVariableName}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n autoFocus\n className=\"h-8 flex-1 border-0 px-0 focus-visible:ring-0 focus-visible:ring-offset-0\"\n />\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={handleCancelAdd}\n className=\"h-8 w-8 shrink-0 text-muted-foreground hover:text-foreground\"\n >\n <X className=\"h-4 w-4\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={handleAddVariable}\n className=\"h-8 w-8 shrink-0 text-muted-foreground hover:text-foreground\"\n >\n <Check className=\"h-4 w-4\" />\n </Button>\n </div>\n {(duplicateError || invalidNameError) && (\n <p className=\"mt-1 px-3 text-xs text-red-500\">\n {duplicateError\n ? t(\"variableAlreadyExists\", \"Variable already exists\")\n : t(\n \"variableNameInvalid\",\n \"Use letters, numbers, or underscores without spaces\"\n )}\n </p>\n )}\n </div>\n ) : (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setIsAddingNew(true)}\n className=\"w-full justify-start text-muted-foreground hover:text-foreground\"\n >\n <Plus className=\"mr-2 h-4 w-4\" />\n {t(\"variableAddNew\", \"Add new variable\")}\n </Button>\n )}\n </div>\n </div>\n );\n};\nexport default VariableSelect;\n"],"names":["EMPTY_VARIABLES","VariableSelect","initialVariables","initialSystemVariables","selectedName","onSelect","onAddVariable","useTranslation","safeInitialVariables","safeInitialSystemVariables","variables","setVariables","useState","useEffect","systemVariables","searchQuery","setSearchQuery","isAddingNew","setIsAddingNew","newVariableName","setNewVariableName","duplicateError","setDuplicateError","invalidNameError","setInvalidNameError","resetErrors","normalizedSearch","filterPredicate","variable","nameMatch","labelMatch","filteredSystemVariables","useMemo","filteredCustomVariables","hasAnyResult","handleAddVariable","inputValue","isValidVariableName","lowerName","v","newVariable","prev","handleCancelAdd","handleInputChange","e","handleKeyDown","jsxs","jsx","Search","Input","cn","Check","Button","X","Plus"],"mappings":"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"}
1
+ {"version":3,"file":"VariableSelect.cjs","sources":["../../../../src/components/MarkdownFlowEditor/components/VariableSelect.tsx"],"sourcesContent":["import type React from \"react\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { Search, Plus, Check, X } from \"lucide-react\";\nimport { Input } from \"../../ui/input\";\nimport { Button } from \"../../ui/button\";\nimport { cn } from \"../../../lib/utils\";\nimport { Variable } from \"../types\";\nimport { isValidVariableName } from \"../utils\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface VariableSelectProps {\n variables?: Variable[];\n systemVariables?: Variable[];\n selectedName?: string;\n onSelect?: (variable: Variable) => void;\n onAddVariable?: (variable: Variable) => void;\n}\n\nconst EMPTY_VARIABLES: Variable[] = [];\n\nconst VariableSelect = ({\n variables: initialVariables,\n systemVariables: initialSystemVariables,\n selectedName,\n onSelect,\n onAddVariable,\n}: VariableSelectProps) => {\n const { t } = useTranslation();\n const safeInitialVariables = initialVariables ?? EMPTY_VARIABLES;\n const safeInitialSystemVariables = initialSystemVariables ?? EMPTY_VARIABLES;\n\n const [variables, setVariables] = useState<Variable[]>(safeInitialVariables);\n useEffect(() => {\n setVariables(safeInitialVariables);\n }, [safeInitialVariables]);\n const systemVariables = safeInitialSystemVariables;\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [isAddingNew, setIsAddingNew] = useState(false);\n const [newVariableName, setNewVariableName] = useState(\"\");\n const [duplicateError, setDuplicateError] = useState(false);\n const [invalidNameError, setInvalidNameError] = useState(false);\n const resetErrors = () => {\n setDuplicateError(false);\n setInvalidNameError(false);\n };\n const normalizedSearch = searchQuery.toLowerCase();\n const filterPredicate = (variable: Variable) => {\n const nameMatch = variable.name.toLowerCase().includes(normalizedSearch);\n const labelMatch = variable.label\n ? variable.label.toLowerCase().includes(normalizedSearch)\n : false;\n return nameMatch || labelMatch;\n };\n\n const filteredSystemVariables = useMemo(\n () => systemVariables.filter(filterPredicate),\n [systemVariables, normalizedSearch]\n );\n const filteredCustomVariables = useMemo(\n () => variables.filter(filterPredicate),\n [variables, normalizedSearch]\n );\n const hasAnyResult =\n filteredSystemVariables.length > 0 || filteredCustomVariables.length > 0;\n\n const handleAddVariable = () => {\n const inputValue = newVariableName;\n if (!inputValue || !isValidVariableName(inputValue)) {\n setInvalidNameError(true);\n setDuplicateError(false);\n return;\n }\n\n const lowerName = inputValue.toLowerCase();\n const isDuplicate = [...variables, ...systemVariables].some(\n (v) => v.name.toLowerCase() === lowerName\n );\n\n if (isDuplicate) {\n setDuplicateError(true);\n setInvalidNameError(false);\n return;\n }\n\n const newVariable: Variable = {\n name: inputValue,\n };\n setVariables((prev) => [newVariable, ...prev]);\n onAddVariable?.({ name: inputValue });\n setNewVariableName(\"\");\n setIsAddingNew(false);\n setSearchQuery(\"\");\n resetErrors();\n onSelect?.(newVariable);\n };\n\n const handleCancelAdd = () => {\n setIsAddingNew(false);\n setNewVariableName(\"\");\n resetErrors();\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setNewVariableName(e.target.value);\n if (duplicateError || invalidNameError) {\n resetErrors();\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n handleAddVariable();\n } else if (e.key === \"Escape\") {\n handleCancelAdd();\n }\n };\n return (\n <div className=\"w-full max-w-sm rounded-lg border bg-white\">\n <div className=\"relative\">\n <Search className=\"absolute start-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground\" />\n <Input\n type=\"text\"\n placeholder={t(\"variableSearchPlaceholder\", \"Search variable\")}\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"ps-8 h-8 border-0 focus-visible:ring-0 focus-visible:ring-offset-0\"\n />\n </div>\n\n <div className=\"max-h-[300px] overflow-y-auto p-2\">\n {hasAnyResult ? (\n <div className=\"space-y-4\">\n {filteredSystemVariables.length > 0 && (\n <div className=\"space-y-1\">\n <p className=\"px-3 text-xs font-medium text-muted-foreground\">\n {t(\"variableSectionSystem\", \"System Variables\")}\n </p>\n <div className=\"space-y-1\">\n {filteredSystemVariables.map((variable) => (\n <button\n key={`system-${variable.name}`}\n onClick={() => onSelect?.(variable)}\n className={cn(\n \"flex w-full items-start justify-between rounded-md px-3 py-2 text-start transition-colors hover:bg-accent\",\n selectedName === variable.name && \"bg-accent\"\n )}\n >\n <div className=\"flex flex-col\">\n <span className=\"text-sm font-medium text-foreground\">\n {variable.name}\n </span>\n {variable.label && (\n <span className=\"text-xs text-muted-foreground\">\n {variable.label}\n </span>\n )}\n </div>\n {selectedName === variable.name && (\n <Check className=\"mt-1 h-4 w-4 text-foreground\" />\n )}\n </button>\n ))}\n </div>\n </div>\n )}\n\n {filteredCustomVariables.length > 0 && (\n <div className=\"space-y-1\">\n <p className=\"px-3 text-xs font-medium text-muted-foreground\">\n {t(\"variableSectionCustom\", \"Custom Variables\")}\n </p>\n <div className=\"space-y-1\">\n {filteredCustomVariables.map((variable) => (\n <button\n key={`custom-${variable.name}`}\n onClick={() => onSelect?.(variable)}\n className={cn(\n \"flex w-full items-start justify-between rounded-md px-3 py-2 text-start transition-colors hover:bg-accent\",\n selectedName === variable.name && \"bg-accent\"\n )}\n >\n <div className=\"flex flex-col\">\n <span className=\"text-sm font-medium text-foreground\">\n {variable.name}\n </span>\n {variable.label && (\n <span className=\"text-xs text-muted-foreground\">\n {variable.label}\n </span>\n )}\n </div>\n {selectedName === variable.name && (\n <Check className=\"mt-1 h-4 w-4 text-foreground\" />\n )}\n </button>\n ))}\n </div>\n </div>\n )}\n </div>\n ) : (\n <div className=\"px-3 py-6 text-center text-sm text-muted-foreground\">\n {searchQuery\n ? t(\"variableNotFound\", \"No variables found\")\n : t(\"variableEmpty\", \"No variables yet\")}\n </div>\n )}\n </div>\n\n <div className=\"border-t border-border p-2\">\n {isAddingNew ? (\n <div>\n <div className=\"flex items-center gap-2 rounded-md border border-border bg-background px-3 py-2\">\n <Input\n type=\"text\"\n placeholder={t(\"variableNamePlaceholder\", \"Variable name\")}\n value={newVariableName}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n autoFocus\n className=\"h-8 flex-1 border-0 px-0 focus-visible:ring-0 focus-visible:ring-offset-0\"\n />\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={handleCancelAdd}\n className=\"h-8 w-8 shrink-0 text-muted-foreground hover:text-foreground\"\n >\n <X className=\"h-4 w-4\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={handleAddVariable}\n className=\"h-8 w-8 shrink-0 text-muted-foreground hover:text-foreground\"\n >\n <Check className=\"h-4 w-4\" />\n </Button>\n </div>\n {(duplicateError || invalidNameError) && (\n <p className=\"mt-1 px-3 text-xs text-red-500\">\n {duplicateError\n ? t(\"variableAlreadyExists\", \"Variable already exists\")\n : t(\n \"variableNameInvalid\",\n \"Use letters, numbers, or underscores without spaces\"\n )}\n </p>\n )}\n </div>\n ) : (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setIsAddingNew(true)}\n className=\"w-full justify-start text-muted-foreground hover:text-foreground\"\n >\n <Plus className=\"me-2 h-4 w-4\" />\n {t(\"variableAddNew\", \"Add new variable\")}\n </Button>\n )}\n </div>\n </div>\n );\n};\nexport default VariableSelect;\n"],"names":["EMPTY_VARIABLES","VariableSelect","initialVariables","initialSystemVariables","selectedName","onSelect","onAddVariable","useTranslation","safeInitialVariables","safeInitialSystemVariables","variables","setVariables","useState","useEffect","systemVariables","searchQuery","setSearchQuery","isAddingNew","setIsAddingNew","newVariableName","setNewVariableName","duplicateError","setDuplicateError","invalidNameError","setInvalidNameError","resetErrors","normalizedSearch","filterPredicate","variable","nameMatch","labelMatch","filteredSystemVariables","useMemo","filteredCustomVariables","hasAnyResult","handleAddVariable","inputValue","isValidVariableName","lowerName","v","newVariable","prev","handleCancelAdd","handleInputChange","e","handleKeyDown","jsxs","jsx","Search","Input","cn","Check","Button","X","Plus"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { default as React } from 'react';
2
- import { Variable } from '../types';
2
+ import { Variable } from '../types.js';
3
3
  interface VariableSelectProps {
4
4
  variables?: Variable[];
5
5
  systemVariables?: Variable[];
@@ -1,173 +1,173 @@
1
- import { j as e } from "../../../_virtual/jsx-runtime.es.js";
2
- import { useState as a, useEffect as X, useMemo as D } from "react";
3
- import { Input as P } from "../../ui/input.es.js";
4
- import { Button as v } from "../../ui/button.es.js";
5
- import { cn as z } from "../../../lib/utils.es.js";
6
- import { isValidVariableName as Y } from "../utils.es.js";
7
- import { useTranslation as _ } from "../../../node_modules/react-i18next/dist/es/useTranslation.es.js";
8
- import q from "../../../node_modules/lucide-react/dist/esm/icons/search.es.js";
9
- import y from "../../../node_modules/lucide-react/dist/esm/icons/check.es.js";
10
- import G from "../../../node_modules/lucide-react/dist/esm/icons/x.es.js";
11
- import H from "../../../node_modules/lucide-react/dist/esm/icons/plus.es.js";
12
- const M = [], ne = ({
13
- variables: R,
14
- systemVariables: B,
15
- selectedName: r,
16
- onSelect: o,
17
- onAddVariable: F
1
+ import { jsxs as a, jsx as t } from "react/jsx-runtime";
2
+ import { useState as r, useEffect as Y, useMemo as P } from "react";
3
+ import { Input as z } from "../../ui/input.es.js";
4
+ import { Button as w } from "../../ui/button.es.js";
5
+ import { cn as M } from "../../../lib/utils.es.js";
6
+ import { isValidVariableName as _ } from "../utils.es.js";
7
+ import { useTranslation as q } from "../../../node_modules/react-i18next/dist/es/useTranslation.es.js";
8
+ import G from "../../../node_modules/lucide-react/dist/esm/icons/search.es.js";
9
+ import V from "../../../node_modules/lucide-react/dist/esm/icons/check.es.js";
10
+ import H from "../../../node_modules/lucide-react/dist/esm/icons/x.es.js";
11
+ import J from "../../../node_modules/lucide-react/dist/esm/icons/plus.es.js";
12
+ const B = [], ie = ({
13
+ variables: F,
14
+ systemVariables: K,
15
+ selectedName: o,
16
+ onSelect: n,
17
+ onAddVariable: Q
18
18
  }) => {
19
- const { t } = _(), n = R ?? M, K = B ?? M, [i, w] = a(n);
20
- X(() => {
21
- w(n);
22
- }, [n]);
23
- const c = K, [m, V] = a(""), [Q, d] = a(!1), [C, u] = a(""), [x, f] = a(!1), [E, h] = a(!1), p = () => {
24
- f(!1), h(!1);
25
- }, l = m.toLowerCase(), S = (s) => {
26
- const g = s.name.toLowerCase().includes(l), I = s.label ? s.label.toLowerCase().includes(l) : !1;
27
- return g || I;
28
- }, b = D(
29
- () => c.filter(S),
19
+ const { t: s } = q(), i = F ?? B, R = K ?? B, [c, C] = r(i);
20
+ Y(() => {
21
+ C(i);
22
+ }, [i]);
23
+ const m = R, [d, E] = r(""), [T, u] = r(!1), [S, f] = r(""), [h, x] = r(!1), [k, p] = r(!1), b = () => {
24
+ x(!1), p(!1);
25
+ }, l = d.toLowerCase(), A = (e) => {
26
+ const v = e.name.toLowerCase().includes(l), j = e.label ? e.label.toLowerCase().includes(l) : !1;
27
+ return v || j;
28
+ }, N = P(
29
+ () => m.filter(A),
30
+ [m, l]
31
+ ), g = P(
32
+ () => c.filter(A),
30
33
  [c, l]
31
- ), N = D(
32
- () => i.filter(S),
33
- [i, l]
34
- ), T = b.length > 0 || N.length > 0, k = () => {
35
- const s = C;
36
- if (!s || !Y(s)) {
37
- h(!0), f(!1);
34
+ ), $ = N.length > 0 || g.length > 0, I = () => {
35
+ const e = S;
36
+ if (!e || !_(e)) {
37
+ p(!0), x(!1);
38
38
  return;
39
39
  }
40
- const g = s.toLowerCase();
41
- if ([...i, ...c].some(
42
- (j) => j.name.toLowerCase() === g
40
+ const v = e.toLowerCase();
41
+ if ([...c, ...m].some(
42
+ (y) => y.name.toLowerCase() === v
43
43
  )) {
44
- f(!0), h(!1);
44
+ x(!0), p(!1);
45
45
  return;
46
46
  }
47
- const L = {
48
- name: s
47
+ const D = {
48
+ name: e
49
49
  };
50
- w((j) => [L, ...j]), F?.({ name: s }), u(""), d(!1), V(""), p(), o?.(L);
51
- }, A = () => {
52
- d(!1), u(""), p();
53
- }, $ = (s) => {
54
- u(s.target.value), (x || E) && p();
55
- }, U = (s) => {
56
- s.key === "Enter" ? k() : s.key === "Escape" && A();
50
+ C((y) => [D, ...y]), Q?.({ name: e }), f(""), u(!1), E(""), b(), n?.(D);
51
+ }, L = () => {
52
+ u(!1), f(""), b();
53
+ }, U = (e) => {
54
+ f(e.target.value), (h || k) && b();
55
+ }, X = (e) => {
56
+ e.key === "Enter" ? I() : e.key === "Escape" && L();
57
57
  };
58
- return /* @__PURE__ */ e.jsxs("div", { className: "w-full max-w-sm rounded-lg border bg-white", children: [
59
- /* @__PURE__ */ e.jsxs("div", { className: "relative", children: [
60
- /* @__PURE__ */ e.jsx(q, { className: "absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground" }),
61
- /* @__PURE__ */ e.jsx(
62
- P,
58
+ return /* @__PURE__ */ a("div", { className: "w-full max-w-sm rounded-lg border bg-white", children: [
59
+ /* @__PURE__ */ a("div", { className: "relative", children: [
60
+ /* @__PURE__ */ t(G, { className: "absolute start-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground" }),
61
+ /* @__PURE__ */ t(
62
+ z,
63
63
  {
64
64
  type: "text",
65
- placeholder: t("variableSearchPlaceholder", "Search variable"),
66
- value: m,
67
- onChange: (s) => V(s.target.value),
68
- className: "pl-8 h-8 border-0 focus-visible:ring-0 focus-visible:ring-offset-0"
65
+ placeholder: s("variableSearchPlaceholder", "Search variable"),
66
+ value: d,
67
+ onChange: (e) => E(e.target.value),
68
+ className: "ps-8 h-8 border-0 focus-visible:ring-0 focus-visible:ring-offset-0"
69
69
  }
70
70
  )
71
71
  ] }),
72
- /* @__PURE__ */ e.jsx("div", { className: "max-h-[300px] overflow-y-auto p-2", children: T ? /* @__PURE__ */ e.jsxs("div", { className: "space-y-4", children: [
73
- b.length > 0 && /* @__PURE__ */ e.jsxs("div", { className: "space-y-1", children: [
74
- /* @__PURE__ */ e.jsx("p", { className: "px-3 text-xs font-medium text-muted-foreground", children: t("variableSectionSystem", "System Variables") }),
75
- /* @__PURE__ */ e.jsx("div", { className: "space-y-1", children: b.map((s) => /* @__PURE__ */ e.jsxs(
72
+ /* @__PURE__ */ t("div", { className: "max-h-[300px] overflow-y-auto p-2", children: $ ? /* @__PURE__ */ a("div", { className: "space-y-4", children: [
73
+ N.length > 0 && /* @__PURE__ */ a("div", { className: "space-y-1", children: [
74
+ /* @__PURE__ */ t("p", { className: "px-3 text-xs font-medium text-muted-foreground", children: s("variableSectionSystem", "System Variables") }),
75
+ /* @__PURE__ */ t("div", { className: "space-y-1", children: N.map((e) => /* @__PURE__ */ a(
76
76
  "button",
77
77
  {
78
- onClick: () => o?.(s),
79
- className: z(
80
- "flex w-full items-start justify-between rounded-md px-3 py-2 text-left transition-colors hover:bg-accent",
81
- r === s.name && "bg-accent"
78
+ onClick: () => n?.(e),
79
+ className: M(
80
+ "flex w-full items-start justify-between rounded-md px-3 py-2 text-start transition-colors hover:bg-accent",
81
+ o === e.name && "bg-accent"
82
82
  ),
83
83
  children: [
84
- /* @__PURE__ */ e.jsxs("div", { className: "flex flex-col", children: [
85
- /* @__PURE__ */ e.jsx("span", { className: "text-sm font-medium text-foreground", children: s.name }),
86
- s.label && /* @__PURE__ */ e.jsx("span", { className: "text-xs text-muted-foreground", children: s.label })
84
+ /* @__PURE__ */ a("div", { className: "flex flex-col", children: [
85
+ /* @__PURE__ */ t("span", { className: "text-sm font-medium text-foreground", children: e.name }),
86
+ e.label && /* @__PURE__ */ t("span", { className: "text-xs text-muted-foreground", children: e.label })
87
87
  ] }),
88
- r === s.name && /* @__PURE__ */ e.jsx(y, { className: "mt-1 h-4 w-4 text-foreground" })
88
+ o === e.name && /* @__PURE__ */ t(V, { className: "mt-1 h-4 w-4 text-foreground" })
89
89
  ]
90
90
  },
91
- `system-${s.name}`
91
+ `system-${e.name}`
92
92
  )) })
93
93
  ] }),
94
- N.length > 0 && /* @__PURE__ */ e.jsxs("div", { className: "space-y-1", children: [
95
- /* @__PURE__ */ e.jsx("p", { className: "px-3 text-xs font-medium text-muted-foreground", children: t("variableSectionCustom", "Custom Variables") }),
96
- /* @__PURE__ */ e.jsx("div", { className: "space-y-1", children: N.map((s) => /* @__PURE__ */ e.jsxs(
94
+ g.length > 0 && /* @__PURE__ */ a("div", { className: "space-y-1", children: [
95
+ /* @__PURE__ */ t("p", { className: "px-3 text-xs font-medium text-muted-foreground", children: s("variableSectionCustom", "Custom Variables") }),
96
+ /* @__PURE__ */ t("div", { className: "space-y-1", children: g.map((e) => /* @__PURE__ */ a(
97
97
  "button",
98
98
  {
99
- onClick: () => o?.(s),
100
- className: z(
101
- "flex w-full items-start justify-between rounded-md px-3 py-2 text-left transition-colors hover:bg-accent",
102
- r === s.name && "bg-accent"
99
+ onClick: () => n?.(e),
100
+ className: M(
101
+ "flex w-full items-start justify-between rounded-md px-3 py-2 text-start transition-colors hover:bg-accent",
102
+ o === e.name && "bg-accent"
103
103
  ),
104
104
  children: [
105
- /* @__PURE__ */ e.jsxs("div", { className: "flex flex-col", children: [
106
- /* @__PURE__ */ e.jsx("span", { className: "text-sm font-medium text-foreground", children: s.name }),
107
- s.label && /* @__PURE__ */ e.jsx("span", { className: "text-xs text-muted-foreground", children: s.label })
105
+ /* @__PURE__ */ a("div", { className: "flex flex-col", children: [
106
+ /* @__PURE__ */ t("span", { className: "text-sm font-medium text-foreground", children: e.name }),
107
+ e.label && /* @__PURE__ */ t("span", { className: "text-xs text-muted-foreground", children: e.label })
108
108
  ] }),
109
- r === s.name && /* @__PURE__ */ e.jsx(y, { className: "mt-1 h-4 w-4 text-foreground" })
109
+ o === e.name && /* @__PURE__ */ t(V, { className: "mt-1 h-4 w-4 text-foreground" })
110
110
  ]
111
111
  },
112
- `custom-${s.name}`
112
+ `custom-${e.name}`
113
113
  )) })
114
114
  ] })
115
- ] }) : /* @__PURE__ */ e.jsx("div", { className: "px-3 py-6 text-center text-sm text-muted-foreground", children: m ? t("variableNotFound", "No variables found") : t("variableEmpty", "No variables yet") }) }),
116
- /* @__PURE__ */ e.jsx("div", { className: "border-t border-border p-2", children: Q ? /* @__PURE__ */ e.jsxs("div", { children: [
117
- /* @__PURE__ */ e.jsxs("div", { className: "flex items-center gap-2 rounded-md border border-border bg-background px-3 py-2", children: [
118
- /* @__PURE__ */ e.jsx(
119
- P,
115
+ ] }) : /* @__PURE__ */ t("div", { className: "px-3 py-6 text-center text-sm text-muted-foreground", children: d ? s("variableNotFound", "No variables found") : s("variableEmpty", "No variables yet") }) }),
116
+ /* @__PURE__ */ t("div", { className: "border-t border-border p-2", children: T ? /* @__PURE__ */ a("div", { children: [
117
+ /* @__PURE__ */ a("div", { className: "flex items-center gap-2 rounded-md border border-border bg-background px-3 py-2", children: [
118
+ /* @__PURE__ */ t(
119
+ z,
120
120
  {
121
121
  type: "text",
122
- placeholder: t("variableNamePlaceholder", "Variable name"),
123
- value: C,
124
- onChange: $,
125
- onKeyDown: U,
122
+ placeholder: s("variableNamePlaceholder", "Variable name"),
123
+ value: S,
124
+ onChange: U,
125
+ onKeyDown: X,
126
126
  autoFocus: !0,
127
127
  className: "h-8 flex-1 border-0 px-0 focus-visible:ring-0 focus-visible:ring-offset-0"
128
128
  }
129
129
  ),
130
- /* @__PURE__ */ e.jsx(
131
- v,
130
+ /* @__PURE__ */ t(
131
+ w,
132
132
  {
133
133
  variant: "ghost",
134
134
  size: "icon",
135
- onClick: A,
135
+ onClick: L,
136
136
  className: "h-8 w-8 shrink-0 text-muted-foreground hover:text-foreground",
137
- children: /* @__PURE__ */ e.jsx(G, { className: "h-4 w-4" })
137
+ children: /* @__PURE__ */ t(H, { className: "h-4 w-4" })
138
138
  }
139
139
  ),
140
- /* @__PURE__ */ e.jsx(
141
- v,
140
+ /* @__PURE__ */ t(
141
+ w,
142
142
  {
143
143
  variant: "ghost",
144
144
  size: "icon",
145
- onClick: k,
145
+ onClick: I,
146
146
  className: "h-8 w-8 shrink-0 text-muted-foreground hover:text-foreground",
147
- children: /* @__PURE__ */ e.jsx(y, { className: "h-4 w-4" })
147
+ children: /* @__PURE__ */ t(V, { className: "h-4 w-4" })
148
148
  }
149
149
  )
150
150
  ] }),
151
- (x || E) && /* @__PURE__ */ e.jsx("p", { className: "mt-1 px-3 text-xs text-red-500", children: x ? t("variableAlreadyExists", "Variable already exists") : t(
151
+ (h || k) && /* @__PURE__ */ t("p", { className: "mt-1 px-3 text-xs text-red-500", children: h ? s("variableAlreadyExists", "Variable already exists") : s(
152
152
  "variableNameInvalid",
153
153
  "Use letters, numbers, or underscores without spaces"
154
154
  ) })
155
- ] }) : /* @__PURE__ */ e.jsxs(
156
- v,
155
+ ] }) : /* @__PURE__ */ a(
156
+ w,
157
157
  {
158
158
  variant: "ghost",
159
159
  size: "sm",
160
- onClick: () => d(!0),
160
+ onClick: () => u(!0),
161
161
  className: "w-full justify-start text-muted-foreground hover:text-foreground",
162
162
  children: [
163
- /* @__PURE__ */ e.jsx(H, { className: "mr-2 h-4 w-4" }),
164
- t("variableAddNew", "Add new variable")
163
+ /* @__PURE__ */ t(J, { className: "me-2 h-4 w-4" }),
164
+ s("variableAddNew", "Add new variable")
165
165
  ]
166
166
  }
167
167
  ) })
168
168
  ] });
169
169
  };
170
170
  export {
171
- ne as default
171
+ ie as default
172
172
  };
173
173
  //# sourceMappingURL=VariableSelect.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"VariableSelect.es.js","sources":["../../../../src/components/MarkdownFlowEditor/components/VariableSelect.tsx"],"sourcesContent":["import type React from \"react\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { Search, Plus, Check, X } from \"lucide-react\";\nimport { Input } from \"../../ui/input\";\nimport { Button } from \"../../ui/button\";\nimport { cn } from \"../../../lib/utils\";\nimport { Variable } from \"../types\";\nimport { isValidVariableName } from \"../utils\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface VariableSelectProps {\n variables?: Variable[];\n systemVariables?: Variable[];\n selectedName?: string;\n onSelect?: (variable: Variable) => void;\n onAddVariable?: (variable: Variable) => void;\n}\n\nconst EMPTY_VARIABLES: Variable[] = [];\n\nconst VariableSelect = ({\n variables: initialVariables,\n systemVariables: initialSystemVariables,\n selectedName,\n onSelect,\n onAddVariable,\n}: VariableSelectProps) => {\n const { t } = useTranslation();\n const safeInitialVariables = initialVariables ?? EMPTY_VARIABLES;\n const safeInitialSystemVariables = initialSystemVariables ?? EMPTY_VARIABLES;\n\n const [variables, setVariables] = useState<Variable[]>(safeInitialVariables);\n useEffect(() => {\n setVariables(safeInitialVariables);\n }, [safeInitialVariables]);\n const systemVariables = safeInitialSystemVariables;\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [isAddingNew, setIsAddingNew] = useState(false);\n const [newVariableName, setNewVariableName] = useState(\"\");\n const [duplicateError, setDuplicateError] = useState(false);\n const [invalidNameError, setInvalidNameError] = useState(false);\n const resetErrors = () => {\n setDuplicateError(false);\n setInvalidNameError(false);\n };\n const normalizedSearch = searchQuery.toLowerCase();\n const filterPredicate = (variable: Variable) => {\n const nameMatch = variable.name.toLowerCase().includes(normalizedSearch);\n const labelMatch = variable.label\n ? variable.label.toLowerCase().includes(normalizedSearch)\n : false;\n return nameMatch || labelMatch;\n };\n\n const filteredSystemVariables = useMemo(\n () => systemVariables.filter(filterPredicate),\n [systemVariables, normalizedSearch]\n );\n const filteredCustomVariables = useMemo(\n () => variables.filter(filterPredicate),\n [variables, normalizedSearch]\n );\n const hasAnyResult =\n filteredSystemVariables.length > 0 || filteredCustomVariables.length > 0;\n\n const handleAddVariable = () => {\n const inputValue = newVariableName;\n if (!inputValue || !isValidVariableName(inputValue)) {\n setInvalidNameError(true);\n setDuplicateError(false);\n return;\n }\n\n const lowerName = inputValue.toLowerCase();\n const isDuplicate = [...variables, ...systemVariables].some(\n (v) => v.name.toLowerCase() === lowerName\n );\n\n if (isDuplicate) {\n setDuplicateError(true);\n setInvalidNameError(false);\n return;\n }\n\n const newVariable: Variable = {\n name: inputValue,\n };\n setVariables((prev) => [newVariable, ...prev]);\n onAddVariable?.({ name: inputValue });\n setNewVariableName(\"\");\n setIsAddingNew(false);\n setSearchQuery(\"\");\n resetErrors();\n onSelect?.(newVariable);\n };\n\n const handleCancelAdd = () => {\n setIsAddingNew(false);\n setNewVariableName(\"\");\n resetErrors();\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setNewVariableName(e.target.value);\n if (duplicateError || invalidNameError) {\n resetErrors();\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n handleAddVariable();\n } else if (e.key === \"Escape\") {\n handleCancelAdd();\n }\n };\n return (\n <div className=\"w-full max-w-sm rounded-lg border bg-white\">\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground\" />\n <Input\n type=\"text\"\n placeholder={t(\"variableSearchPlaceholder\", \"Search variable\")}\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"pl-8 h-8 border-0 focus-visible:ring-0 focus-visible:ring-offset-0\"\n />\n </div>\n\n <div className=\"max-h-[300px] overflow-y-auto p-2\">\n {hasAnyResult ? (\n <div className=\"space-y-4\">\n {filteredSystemVariables.length > 0 && (\n <div className=\"space-y-1\">\n <p className=\"px-3 text-xs font-medium text-muted-foreground\">\n {t(\"variableSectionSystem\", \"System Variables\")}\n </p>\n <div className=\"space-y-1\">\n {filteredSystemVariables.map((variable) => (\n <button\n key={`system-${variable.name}`}\n onClick={() => onSelect?.(variable)}\n className={cn(\n \"flex w-full items-start justify-between rounded-md px-3 py-2 text-left transition-colors hover:bg-accent\",\n selectedName === variable.name && \"bg-accent\"\n )}\n >\n <div className=\"flex flex-col\">\n <span className=\"text-sm font-medium text-foreground\">\n {variable.name}\n </span>\n {variable.label && (\n <span className=\"text-xs text-muted-foreground\">\n {variable.label}\n </span>\n )}\n </div>\n {selectedName === variable.name && (\n <Check className=\"mt-1 h-4 w-4 text-foreground\" />\n )}\n </button>\n ))}\n </div>\n </div>\n )}\n\n {filteredCustomVariables.length > 0 && (\n <div className=\"space-y-1\">\n <p className=\"px-3 text-xs font-medium text-muted-foreground\">\n {t(\"variableSectionCustom\", \"Custom Variables\")}\n </p>\n <div className=\"space-y-1\">\n {filteredCustomVariables.map((variable) => (\n <button\n key={`custom-${variable.name}`}\n onClick={() => onSelect?.(variable)}\n className={cn(\n \"flex w-full items-start justify-between rounded-md px-3 py-2 text-left transition-colors hover:bg-accent\",\n selectedName === variable.name && \"bg-accent\"\n )}\n >\n <div className=\"flex flex-col\">\n <span className=\"text-sm font-medium text-foreground\">\n {variable.name}\n </span>\n {variable.label && (\n <span className=\"text-xs text-muted-foreground\">\n {variable.label}\n </span>\n )}\n </div>\n {selectedName === variable.name && (\n <Check className=\"mt-1 h-4 w-4 text-foreground\" />\n )}\n </button>\n ))}\n </div>\n </div>\n )}\n </div>\n ) : (\n <div className=\"px-3 py-6 text-center text-sm text-muted-foreground\">\n {searchQuery\n ? t(\"variableNotFound\", \"No variables found\")\n : t(\"variableEmpty\", \"No variables yet\")}\n </div>\n )}\n </div>\n\n <div className=\"border-t border-border p-2\">\n {isAddingNew ? (\n <div>\n <div className=\"flex items-center gap-2 rounded-md border border-border bg-background px-3 py-2\">\n <Input\n type=\"text\"\n placeholder={t(\"variableNamePlaceholder\", \"Variable name\")}\n value={newVariableName}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n autoFocus\n className=\"h-8 flex-1 border-0 px-0 focus-visible:ring-0 focus-visible:ring-offset-0\"\n />\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={handleCancelAdd}\n className=\"h-8 w-8 shrink-0 text-muted-foreground hover:text-foreground\"\n >\n <X className=\"h-4 w-4\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={handleAddVariable}\n className=\"h-8 w-8 shrink-0 text-muted-foreground hover:text-foreground\"\n >\n <Check className=\"h-4 w-4\" />\n </Button>\n </div>\n {(duplicateError || invalidNameError) && (\n <p className=\"mt-1 px-3 text-xs text-red-500\">\n {duplicateError\n ? t(\"variableAlreadyExists\", \"Variable already exists\")\n : t(\n \"variableNameInvalid\",\n \"Use letters, numbers, or underscores without spaces\"\n )}\n </p>\n )}\n </div>\n ) : (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setIsAddingNew(true)}\n className=\"w-full justify-start text-muted-foreground hover:text-foreground\"\n >\n <Plus className=\"mr-2 h-4 w-4\" />\n {t(\"variableAddNew\", \"Add new variable\")}\n </Button>\n )}\n </div>\n </div>\n );\n};\nexport default VariableSelect;\n"],"names":["EMPTY_VARIABLES","VariableSelect","initialVariables","initialSystemVariables","selectedName","onSelect","onAddVariable","useTranslation","safeInitialVariables","safeInitialSystemVariables","variables","setVariables","useState","useEffect","systemVariables","searchQuery","setSearchQuery","isAddingNew","setIsAddingNew","newVariableName","setNewVariableName","duplicateError","setDuplicateError","invalidNameError","setInvalidNameError","resetErrors","normalizedSearch","filterPredicate","variable","nameMatch","labelMatch","filteredSystemVariables","useMemo","filteredCustomVariables","hasAnyResult","handleAddVariable","inputValue","isValidVariableName","lowerName","v","newVariable","prev","handleCancelAdd","handleInputChange","e","handleKeyDown","jsxs","jsx","Search","Input","cn","Check","Button","X","Plus"],"mappings":"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"}
1
+ {"version":3,"file":"VariableSelect.es.js","sources":["../../../../src/components/MarkdownFlowEditor/components/VariableSelect.tsx"],"sourcesContent":["import type React from \"react\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { Search, Plus, Check, X } from \"lucide-react\";\nimport { Input } from \"../../ui/input\";\nimport { Button } from \"../../ui/button\";\nimport { cn } from \"../../../lib/utils\";\nimport { Variable } from \"../types\";\nimport { isValidVariableName } from \"../utils\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface VariableSelectProps {\n variables?: Variable[];\n systemVariables?: Variable[];\n selectedName?: string;\n onSelect?: (variable: Variable) => void;\n onAddVariable?: (variable: Variable) => void;\n}\n\nconst EMPTY_VARIABLES: Variable[] = [];\n\nconst VariableSelect = ({\n variables: initialVariables,\n systemVariables: initialSystemVariables,\n selectedName,\n onSelect,\n onAddVariable,\n}: VariableSelectProps) => {\n const { t } = useTranslation();\n const safeInitialVariables = initialVariables ?? EMPTY_VARIABLES;\n const safeInitialSystemVariables = initialSystemVariables ?? EMPTY_VARIABLES;\n\n const [variables, setVariables] = useState<Variable[]>(safeInitialVariables);\n useEffect(() => {\n setVariables(safeInitialVariables);\n }, [safeInitialVariables]);\n const systemVariables = safeInitialSystemVariables;\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [isAddingNew, setIsAddingNew] = useState(false);\n const [newVariableName, setNewVariableName] = useState(\"\");\n const [duplicateError, setDuplicateError] = useState(false);\n const [invalidNameError, setInvalidNameError] = useState(false);\n const resetErrors = () => {\n setDuplicateError(false);\n setInvalidNameError(false);\n };\n const normalizedSearch = searchQuery.toLowerCase();\n const filterPredicate = (variable: Variable) => {\n const nameMatch = variable.name.toLowerCase().includes(normalizedSearch);\n const labelMatch = variable.label\n ? variable.label.toLowerCase().includes(normalizedSearch)\n : false;\n return nameMatch || labelMatch;\n };\n\n const filteredSystemVariables = useMemo(\n () => systemVariables.filter(filterPredicate),\n [systemVariables, normalizedSearch]\n );\n const filteredCustomVariables = useMemo(\n () => variables.filter(filterPredicate),\n [variables, normalizedSearch]\n );\n const hasAnyResult =\n filteredSystemVariables.length > 0 || filteredCustomVariables.length > 0;\n\n const handleAddVariable = () => {\n const inputValue = newVariableName;\n if (!inputValue || !isValidVariableName(inputValue)) {\n setInvalidNameError(true);\n setDuplicateError(false);\n return;\n }\n\n const lowerName = inputValue.toLowerCase();\n const isDuplicate = [...variables, ...systemVariables].some(\n (v) => v.name.toLowerCase() === lowerName\n );\n\n if (isDuplicate) {\n setDuplicateError(true);\n setInvalidNameError(false);\n return;\n }\n\n const newVariable: Variable = {\n name: inputValue,\n };\n setVariables((prev) => [newVariable, ...prev]);\n onAddVariable?.({ name: inputValue });\n setNewVariableName(\"\");\n setIsAddingNew(false);\n setSearchQuery(\"\");\n resetErrors();\n onSelect?.(newVariable);\n };\n\n const handleCancelAdd = () => {\n setIsAddingNew(false);\n setNewVariableName(\"\");\n resetErrors();\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setNewVariableName(e.target.value);\n if (duplicateError || invalidNameError) {\n resetErrors();\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n handleAddVariable();\n } else if (e.key === \"Escape\") {\n handleCancelAdd();\n }\n };\n return (\n <div className=\"w-full max-w-sm rounded-lg border bg-white\">\n <div className=\"relative\">\n <Search className=\"absolute start-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground\" />\n <Input\n type=\"text\"\n placeholder={t(\"variableSearchPlaceholder\", \"Search variable\")}\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"ps-8 h-8 border-0 focus-visible:ring-0 focus-visible:ring-offset-0\"\n />\n </div>\n\n <div className=\"max-h-[300px] overflow-y-auto p-2\">\n {hasAnyResult ? (\n <div className=\"space-y-4\">\n {filteredSystemVariables.length > 0 && (\n <div className=\"space-y-1\">\n <p className=\"px-3 text-xs font-medium text-muted-foreground\">\n {t(\"variableSectionSystem\", \"System Variables\")}\n </p>\n <div className=\"space-y-1\">\n {filteredSystemVariables.map((variable) => (\n <button\n key={`system-${variable.name}`}\n onClick={() => onSelect?.(variable)}\n className={cn(\n \"flex w-full items-start justify-between rounded-md px-3 py-2 text-start transition-colors hover:bg-accent\",\n selectedName === variable.name && \"bg-accent\"\n )}\n >\n <div className=\"flex flex-col\">\n <span className=\"text-sm font-medium text-foreground\">\n {variable.name}\n </span>\n {variable.label && (\n <span className=\"text-xs text-muted-foreground\">\n {variable.label}\n </span>\n )}\n </div>\n {selectedName === variable.name && (\n <Check className=\"mt-1 h-4 w-4 text-foreground\" />\n )}\n </button>\n ))}\n </div>\n </div>\n )}\n\n {filteredCustomVariables.length > 0 && (\n <div className=\"space-y-1\">\n <p className=\"px-3 text-xs font-medium text-muted-foreground\">\n {t(\"variableSectionCustom\", \"Custom Variables\")}\n </p>\n <div className=\"space-y-1\">\n {filteredCustomVariables.map((variable) => (\n <button\n key={`custom-${variable.name}`}\n onClick={() => onSelect?.(variable)}\n className={cn(\n \"flex w-full items-start justify-between rounded-md px-3 py-2 text-start transition-colors hover:bg-accent\",\n selectedName === variable.name && \"bg-accent\"\n )}\n >\n <div className=\"flex flex-col\">\n <span className=\"text-sm font-medium text-foreground\">\n {variable.name}\n </span>\n {variable.label && (\n <span className=\"text-xs text-muted-foreground\">\n {variable.label}\n </span>\n )}\n </div>\n {selectedName === variable.name && (\n <Check className=\"mt-1 h-4 w-4 text-foreground\" />\n )}\n </button>\n ))}\n </div>\n </div>\n )}\n </div>\n ) : (\n <div className=\"px-3 py-6 text-center text-sm text-muted-foreground\">\n {searchQuery\n ? t(\"variableNotFound\", \"No variables found\")\n : t(\"variableEmpty\", \"No variables yet\")}\n </div>\n )}\n </div>\n\n <div className=\"border-t border-border p-2\">\n {isAddingNew ? (\n <div>\n <div className=\"flex items-center gap-2 rounded-md border border-border bg-background px-3 py-2\">\n <Input\n type=\"text\"\n placeholder={t(\"variableNamePlaceholder\", \"Variable name\")}\n value={newVariableName}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n autoFocus\n className=\"h-8 flex-1 border-0 px-0 focus-visible:ring-0 focus-visible:ring-offset-0\"\n />\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={handleCancelAdd}\n className=\"h-8 w-8 shrink-0 text-muted-foreground hover:text-foreground\"\n >\n <X className=\"h-4 w-4\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={handleAddVariable}\n className=\"h-8 w-8 shrink-0 text-muted-foreground hover:text-foreground\"\n >\n <Check className=\"h-4 w-4\" />\n </Button>\n </div>\n {(duplicateError || invalidNameError) && (\n <p className=\"mt-1 px-3 text-xs text-red-500\">\n {duplicateError\n ? t(\"variableAlreadyExists\", \"Variable already exists\")\n : t(\n \"variableNameInvalid\",\n \"Use letters, numbers, or underscores without spaces\"\n )}\n </p>\n )}\n </div>\n ) : (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setIsAddingNew(true)}\n className=\"w-full justify-start text-muted-foreground hover:text-foreground\"\n >\n <Plus className=\"me-2 h-4 w-4\" />\n {t(\"variableAddNew\", \"Add new variable\")}\n </Button>\n )}\n </div>\n </div>\n );\n};\nexport default VariableSelect;\n"],"names":["EMPTY_VARIABLES","VariableSelect","initialVariables","initialSystemVariables","selectedName","onSelect","onAddVariable","t","useTranslation","safeInitialVariables","safeInitialSystemVariables","variables","setVariables","useState","useEffect","systemVariables","searchQuery","setSearchQuery","isAddingNew","setIsAddingNew","newVariableName","setNewVariableName","duplicateError","setDuplicateError","invalidNameError","setInvalidNameError","resetErrors","normalizedSearch","filterPredicate","variable","nameMatch","labelMatch","filteredSystemVariables","useMemo","filteredCustomVariables","hasAnyResult","handleAddVariable","inputValue","isValidVariableName","lowerName","v","newVariable","prev","handleCancelAdd","handleInputChange","handleKeyDown","jsxs","jsx","Search","Input","cn","Check","Button","X","Plus"],"mappings":"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"}