markdown-flow-ui 0.1.129 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/dist/_virtual/index.cjs8.js +1 -1
  2. package/dist/_virtual/index.cjs9.js +1 -1
  3. package/dist/_virtual/index.es8.js +2 -2
  4. package/dist/_virtual/index.es9.js +2 -2
  5. package/dist/components/ContentRender/ContentRender.cjs.js +2 -2
  6. package/dist/components/ContentRender/ContentRender.cjs.js.map +1 -1
  7. package/dist/components/ContentRender/ContentRender.d.ts +4 -0
  8. package/dist/components/ContentRender/ContentRender.es.js +217 -211
  9. package/dist/components/ContentRender/ContentRender.es.js.map +1 -1
  10. package/dist/components/ContentRender/ContentRender.stories.d.ts +1 -0
  11. package/dist/components/ContentRender/IframeSandbox.cjs.js +4 -4
  12. package/dist/components/ContentRender/IframeSandbox.cjs.js.map +1 -1
  13. package/dist/components/ContentRender/IframeSandbox.d.ts +3 -0
  14. package/dist/components/ContentRender/IframeSandbox.es.js +210 -196
  15. package/dist/components/ContentRender/IframeSandbox.es.js.map +1 -1
  16. package/dist/components/ContentRender/MarkdownFlowInput.cjs.js +1 -1
  17. package/dist/components/ContentRender/MarkdownFlowInput.cjs.js.map +1 -1
  18. package/dist/components/ContentRender/MarkdownFlowInput.d.ts +3 -0
  19. package/dist/components/ContentRender/MarkdownFlowInput.es.js +35 -32
  20. package/dist/components/ContentRender/MarkdownFlowInput.es.js.map +1 -1
  21. package/dist/components/ContentRender/MarkdownFlowInput.stories.d.ts +6 -0
  22. package/dist/components/ContentRender/SandboxApp.cjs.js +2 -2
  23. package/dist/components/ContentRender/SandboxApp.cjs.js.map +1 -1
  24. package/dist/components/ContentRender/SandboxApp.d.ts +3 -0
  25. package/dist/components/ContentRender/SandboxApp.es.js +117 -104
  26. package/dist/components/ContentRender/SandboxApp.es.js.map +1 -1
  27. package/dist/components/ContentRender/blackboard-vendor.cjs.js +1 -1
  28. package/dist/components/ContentRender/blackboard-vendor.cjs.js.map +1 -1
  29. package/dist/components/ContentRender/blackboard-vendor.es.js +14 -9
  30. package/dist/components/ContentRender/blackboard-vendor.es.js.map +1 -1
  31. package/dist/components/ContentRender/cjkFontFamily.cjs.js +2 -0
  32. package/dist/components/ContentRender/cjkFontFamily.cjs.js.map +1 -0
  33. package/dist/components/ContentRender/cjkFontFamily.d.ts +5 -0
  34. package/dist/components/ContentRender/cjkFontFamily.es.js +45 -0
  35. package/dist/components/ContentRender/cjkFontFamily.es.js.map +1 -0
  36. package/dist/components/ContentRender/cjkFontFamily.test.d.ts +1 -0
  37. package/dist/components/ContentRender/contentRenderI18n.cjs.js +2 -0
  38. package/dist/components/ContentRender/contentRenderI18n.cjs.js.map +1 -0
  39. package/dist/components/ContentRender/contentRenderI18n.d.ts +15 -0
  40. package/dist/components/ContentRender/contentRenderI18n.es.js +59 -0
  41. package/dist/components/ContentRender/contentRenderI18n.es.js.map +1 -0
  42. package/dist/components/ContentRender/index.cjs.js +1 -1
  43. package/dist/components/ContentRender/index.d.ts +1 -0
  44. package/dist/components/ContentRender/index.es.js +1 -0
  45. package/dist/components/ContentRender/index.es.js.map +1 -1
  46. package/dist/components/ContentRender/plugins/CustomVariable.cjs.js +1 -1
  47. package/dist/components/ContentRender/plugins/CustomVariable.cjs.js.map +1 -1
  48. package/dist/components/ContentRender/plugins/CustomVariable.d.ts +3 -1
  49. package/dist/components/ContentRender/plugins/CustomVariable.es.js +131 -124
  50. package/dist/components/ContentRender/plugins/CustomVariable.es.js.map +1 -1
  51. package/dist/components/ContentRender/plugins/MermaidChart.cjs.js +1 -1
  52. package/dist/components/ContentRender/plugins/MermaidChart.cjs.js.map +1 -1
  53. package/dist/components/ContentRender/plugins/MermaidChart.es.js +19 -18
  54. package/dist/components/ContentRender/plugins/MermaidChart.es.js.map +1 -1
  55. package/dist/components/MarkdownFlow/MarkdownFlow.cjs.js +1 -1
  56. package/dist/components/MarkdownFlow/MarkdownFlow.cjs.js.map +1 -1
  57. package/dist/components/MarkdownFlow/MarkdownFlow.d.ts +3 -0
  58. package/dist/components/MarkdownFlow/MarkdownFlow.es.js +18 -15
  59. package/dist/components/MarkdownFlow/MarkdownFlow.es.js.map +1 -1
  60. package/dist/components/MarkdownFlow/MarkdownFlow.stories.d.ts +6 -0
  61. package/dist/components/MarkdownFlow/ScrollableMarkdownFlow.d.ts +1 -0
  62. package/dist/components/MarkdownFlow/index.cjs.js +1 -1
  63. package/dist/components/MarkdownFlow/index.es.js +1 -0
  64. package/dist/components/MarkdownFlow/index.es.js.map +1 -1
  65. package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.cjs.js +1 -1
  66. package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.cjs.js.map +1 -1
  67. package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.d.ts +2 -2
  68. package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.es.js +23 -22
  69. package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.es.js.map +1 -1
  70. package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.stories.d.ts +1 -1
  71. package/dist/components/MarkdownFlowEditor/editorI18n.cjs.js +1 -1
  72. package/dist/components/MarkdownFlowEditor/editorI18n.cjs.js.map +1 -1
  73. package/dist/components/MarkdownFlowEditor/editorI18n.d.ts +0 -2
  74. package/dist/components/MarkdownFlowEditor/editorI18n.es.js +12 -24
  75. package/dist/components/MarkdownFlowEditor/editorI18n.es.js.map +1 -1
  76. package/dist/components/MarkdownFlowEditor/index.d.ts +1 -1
  77. package/dist/components/Slide/Player.cjs.js +1 -1
  78. package/dist/components/Slide/Player.cjs.js.map +1 -1
  79. package/dist/components/Slide/Player.d.ts +14 -30
  80. package/dist/components/Slide/Player.es.js +395 -383
  81. package/dist/components/Slide/Player.es.js.map +1 -1
  82. package/dist/components/Slide/Slide.cjs.js +1 -1
  83. package/dist/components/Slide/Slide.cjs.js.map +1 -1
  84. package/dist/components/Slide/Slide.d.ts +22 -4
  85. package/dist/components/Slide/Slide.es.js +701 -659
  86. package/dist/components/Slide/Slide.es.js.map +1 -1
  87. package/dist/components/Slide/Slide.stories.d.ts +19 -20
  88. package/dist/components/Slide/constants.d.ts +0 -24
  89. package/dist/components/Slide/index.d.ts +2 -1
  90. package/dist/components/Slide/slideI18n.cjs.js +2 -0
  91. package/dist/components/Slide/slideI18n.cjs.js.map +1 -0
  92. package/dist/components/Slide/slideI18n.d.ts +44 -0
  93. package/dist/components/Slide/slideI18n.es.js +158 -0
  94. package/dist/components/Slide/slideI18n.es.js.map +1 -0
  95. package/dist/components/Slide/slideI18n.test.d.ts +1 -0
  96. package/dist/components/Slide/utils/playerVisibility.cjs.js +2 -0
  97. package/dist/components/Slide/utils/playerVisibility.cjs.js.map +1 -0
  98. package/dist/components/Slide/utils/playerVisibility.d.ts +10 -0
  99. package/dist/components/Slide/utils/playerVisibility.es.js +11 -0
  100. package/dist/components/Slide/utils/playerVisibility.es.js.map +1 -0
  101. package/dist/components/Slide/utils/playerVisibility.test.d.ts +1 -0
  102. package/dist/components/index.d.ts +2 -1
  103. package/dist/editor.d.ts +3 -2
  104. package/dist/index.cjs.js +1 -1
  105. package/dist/index.es.js +14 -13
  106. package/dist/index.es.js.map +1 -1
  107. package/dist/lib/locale.cjs.js +2 -0
  108. package/dist/lib/locale.cjs.js.map +1 -0
  109. package/dist/lib/locale.d.ts +4 -0
  110. package/dist/lib/locale.es.js +19 -0
  111. package/dist/lib/locale.es.js.map +1 -0
  112. package/dist/lib/localeTextMap.cjs.js +2 -0
  113. package/dist/lib/localeTextMap.cjs.js.map +1 -0
  114. package/dist/lib/localeTextMap.d.ts +4 -0
  115. package/dist/lib/localeTextMap.es.js +5 -0
  116. package/dist/lib/localeTextMap.es.js.map +1 -0
  117. package/dist/markdown-flow-ui-lib.css +1 -1
  118. package/dist/node_modules/@braintree/sanitize-url/dist/index.cjs.js +1 -1
  119. package/dist/node_modules/@braintree/sanitize-url/dist/index.es.js +1 -1
  120. package/dist/node_modules/classnames/index.cjs.js +1 -1
  121. package/dist/node_modules/classnames/index.es.js +1 -1
  122. package/dist/renderer.cjs.js +1 -1
  123. package/dist/renderer.d.ts +1 -0
  124. package/dist/renderer.es.js +15 -14
  125. package/dist/renderer.es.js.map +1 -1
  126. package/dist/slide.d.ts +1 -0
  127. package/package.json +1 -1
  128. package/dist/components/Slide/constants.cjs.js +0 -2
  129. package/dist/components/Slide/constants.cjs.js.map +0 -1
  130. package/dist/components/Slide/constants.es.js +0 -28
  131. package/dist/components/Slide/constants.es.js.map +0 -1
@@ -0,0 +1,59 @@
1
+ import { normalizeMarkdownFlowLocale as o } from "../../lib/locale.es.js";
2
+ import { buildLocaleTexts as n } from "../../lib/localeTextMap.es.js";
3
+ const r = [
4
+ "confirmButtonText",
5
+ "copyButtonText",
6
+ "copiedButtonText",
7
+ "sandboxLoadingText",
8
+ "sandboxStyleLoadingText",
9
+ "sandboxScriptLoadingText",
10
+ "sandboxFullscreenButtonText",
11
+ "sandboxExitFullscreenButtonText",
12
+ "sendButtonLabel",
13
+ "scrollToBottomLabel"
14
+ ], t = (e) => n(
15
+ r,
16
+ e
17
+ ), i = {
18
+ "en-US": t([
19
+ "Submit",
20
+ "Copy",
21
+ "Copied",
22
+ "Loading content...",
23
+ "Building styles...",
24
+ "Building scripts cache...",
25
+ "Fullscreen",
26
+ "Exit fullscreen",
27
+ "Send",
28
+ "Scroll to bottom"
29
+ ]),
30
+ "fr-FR": t([
31
+ "Soumettre",
32
+ "Copier",
33
+ "Copié",
34
+ "Chargement du contenu...",
35
+ "Génération des styles...",
36
+ "Génération du cache des scripts...",
37
+ "Plein écran",
38
+ "Quitter le plein écran",
39
+ "Envoyer",
40
+ "Faire défiler jusqu'en bas"
41
+ ]),
42
+ "zh-CN": t([
43
+ "提交",
44
+ "复制",
45
+ "已复制",
46
+ "正在加载内容...",
47
+ "正在生成样式...",
48
+ "正在生成脚本缓存...",
49
+ "全屏浏览",
50
+ "退出全屏",
51
+ "发送",
52
+ "滚动到底部"
53
+ ])
54
+ }, c = (e) => i[o(e)];
55
+ export {
56
+ i as CONTENT_RENDER_LOCALE_TEXTS,
57
+ c as getContentRenderLocaleTexts
58
+ };
59
+ //# sourceMappingURL=contentRenderI18n.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contentRenderI18n.es.js","sources":["../../../src/components/ContentRender/contentRenderI18n.ts"],"sourcesContent":["import {\n normalizeMarkdownFlowLocale,\n type MarkdownFlowLocale,\n} from \"../../lib/locale\";\nimport {\n buildLocaleTexts,\n type LocaleTextValues,\n} from \"../../lib/localeTextMap\";\n\nexport interface ContentRenderLocaleTexts {\n confirmButtonText: string;\n copyButtonText: string;\n copiedButtonText: string;\n sandboxLoadingText: string;\n sandboxStyleLoadingText: string;\n sandboxScriptLoadingText: string;\n sandboxFullscreenButtonText: string;\n sandboxExitFullscreenButtonText: string;\n sendButtonLabel: string;\n scrollToBottomLabel: string;\n}\n\nconst CONTENT_RENDER_TEXT_KEYS = [\n \"confirmButtonText\",\n \"copyButtonText\",\n \"copiedButtonText\",\n \"sandboxLoadingText\",\n \"sandboxStyleLoadingText\",\n \"sandboxScriptLoadingText\",\n \"sandboxFullscreenButtonText\",\n \"sandboxExitFullscreenButtonText\",\n \"sendButtonLabel\",\n \"scrollToBottomLabel\",\n] as const satisfies readonly (keyof ContentRenderLocaleTexts)[];\n\nconst createContentRenderLocaleTexts = (\n values: LocaleTextValues<typeof CONTENT_RENDER_TEXT_KEYS>\n): ContentRenderLocaleTexts =>\n buildLocaleTexts(\n CONTENT_RENDER_TEXT_KEYS,\n values\n ) as ContentRenderLocaleTexts;\n\nexport const CONTENT_RENDER_LOCALE_TEXTS: Record<\n MarkdownFlowLocale,\n ContentRenderLocaleTexts\n> = {\n \"en-US\": createContentRenderLocaleTexts([\n \"Submit\",\n \"Copy\",\n \"Copied\",\n \"Loading content...\",\n \"Building styles...\",\n \"Building scripts cache...\",\n \"Fullscreen\",\n \"Exit fullscreen\",\n \"Send\",\n \"Scroll to bottom\",\n ]),\n \"fr-FR\": createContentRenderLocaleTexts([\n \"Soumettre\",\n \"Copier\",\n \"Copié\",\n \"Chargement du contenu...\",\n \"Génération des styles...\",\n \"Génération du cache des scripts...\",\n \"Plein écran\",\n \"Quitter le plein écran\",\n \"Envoyer\",\n \"Faire défiler jusqu'en bas\",\n ]),\n \"zh-CN\": createContentRenderLocaleTexts([\n \"提交\",\n \"复制\",\n \"已复制\",\n \"正在加载内容...\",\n \"正在生成样式...\",\n \"正在生成脚本缓存...\",\n \"全屏浏览\",\n \"退出全屏\",\n \"发送\",\n \"滚动到底部\",\n ]),\n};\n\nexport const getContentRenderLocaleTexts = (\n locale?: string | null\n): ContentRenderLocaleTexts =>\n CONTENT_RENDER_LOCALE_TEXTS[normalizeMarkdownFlowLocale(locale)];\n"],"names":["CONTENT_RENDER_TEXT_KEYS","createContentRenderLocaleTexts","values","buildLocaleTexts","CONTENT_RENDER_LOCALE_TEXTS","getContentRenderLocaleTexts","locale","normalizeMarkdownFlowLocale"],"mappings":";;AAsBA,MAAMA,IAA2B;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAEMC,IAAiC,CACrCC,MAEAC;AAAA,EACEH;AAAA,EACAE;AACF,GAEWE,IAGT;AAAA,EACF,SAASH,EAA+B;AAAA,IACtC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AAAA,EACD,SAASA,EAA+B;AAAA,IACtC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AAAA,EACD,SAASA,EAA+B;AAAA,IACtC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AACH,GAEaI,IAA8B,CACzCC,MAEAF,EAA4BG,EAA4BD,CAAM,CAAC;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./ContentRender.cjs.js");require("../../_virtual/jsx-runtime.cjs.js");require("react");require("react-dom/client");require("../ui/inputGroup/input-group.cjs.js");exports.ContentRender=e.default;exports.default=e.default;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./ContentRender.cjs.js");require("../../_virtual/jsx-runtime.cjs.js");require("react");require("react-dom/client");require("./contentRenderI18n.cjs.js");require("../ui/inputGroup/input-group.cjs.js");exports.ContentRender=e.default;exports.default=e.default;
2
2
  //# sourceMappingURL=index.cjs.js.map
@@ -7,5 +7,6 @@ export type { RenderSegment } from './utils/split-content';
7
7
  export { splitContentSegments } from './utils/split-content';
8
8
  export { default as ContentRender } from './ContentRender';
9
9
  export type { ContentRenderProps } from './ContentRender';
10
+ export type { MarkdownFlowLocale } from '../../lib/locale';
10
11
  export { default as MarkdownFlowInput } from './MarkdownFlowInput';
11
12
  export type { MarkdownFlowInputProps } from './MarkdownFlowInput';
@@ -2,6 +2,7 @@ import o from "./ContentRender.es.js";
2
2
  import "../../_virtual/jsx-runtime.es.js";
3
3
  import "react";
4
4
  import "react-dom/client";
5
+ import "./contentRenderI18n.es.js";
5
6
  import "../ui/inputGroup/input-group.es.js";
6
7
  export {
7
8
  o as ContentRender,
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
1
+ {"version":3,"file":"index.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const s=require("../../../_virtual/jsx-runtime.cjs.js"),b=require("react"),G=require("../../ui/button.cjs.js"),K=require("../../ui/checkbox.cjs.js"),V=require("../MarkdownFlowInput.cjs.js"),M=require("../../ui/inputGroup/input-group.cjs.js"),q=require("../../../lib/utils.cjs.js"),O=({node:e,readonly:r,selectedValues:n,inputValue:a,confirmButtonText:c,handleCheckboxChange:m,handleInputChange:f,handleKeyDown:u,handleConfirmClick:i})=>{const p=e.properties?.placeholder,x=r||n.length===0&&!a?.trim(),j=l=>s.jsxRuntimeExports.jsx("span",{className:q.cn("multi-select-confirm-wrapper flex flex-col items-center",x?"opacity-50 cursor-not-allowed":"cursor-pointer",l),children:s.jsxRuntimeExports.jsx("button",{type:"button",className:"multi-select-confirm-button text-sm font-medium text-primary",disabled:x,onClick:i,children:c})});return s.jsxRuntimeExports.jsxs("span",{className:"multi-select-container flex w-full flex-col",children:[s.jsxRuntimeExports.jsx("span",{className:"flex flex-wrap gap-y-[9px] gap-x-6",children:e.properties?.buttonTexts?.map((l,E)=>{const d=e.properties?.buttonValues?.[E],h=d!==void 0?d:l;return s.jsxRuntimeExports.jsx(K.Checkbox,{label:l,disabled:r,checked:n.includes(h),onCheckedChange:g=>m(h,g),className:"text-sm"},E)})}),p?s.jsxRuntimeExports.jsx("span",{className:"block mb-1 w-full max-w-[500px]",children:s.jsxRuntimeExports.jsxs("span",{className:"multi-select-input-row flex w-full items-end gap-3",children:[s.jsxRuntimeExports.jsx(M.InputGroup,{"data-disabled":r,className:"flex-1",children:s.jsxRuntimeExports.jsx(M.InputGroupTextarea,{disabled:r,placeholder:p,value:a,onChange:f,onKeyDown:u,className:"text-sm px-3",title:p})}),j("shrink-0")]})}):j("self-start multi-select-confirm-wrapper--stacked")]})},F=({node:e,readonly:r,resolvedDefaultButtonText:n,handleButtonClick:a,inputValue:c,handleInputChange:m,handleSendClick:f})=>s.jsxRuntimeExports.jsxs("span",{className:"single-select-container inline-flex w-full flex-col",children:[s.jsxRuntimeExports.jsx("span",{className:"flex flex-wrap gap-y-[9px] gap-x-2",children:e.properties?.buttonTexts?.map((u,i)=>{const p=e.properties?.buttonValues?.[i],x=p!==void 0?p:u;return s.jsxRuntimeExports.jsx(G.Button,{disabled:r,variant:"outline",type:"button",size:"sm",onClick:()=>a(x),className:q.cn("max-w-full shrink whitespace-normal break-words text-left leading-5 h-auto min-h-8 px-3 py-1.5","hover:bg-gray-200",n===u&&"select"),children:u},i)})}),e.properties?.placeholder&&s.jsxRuntimeExports.jsx("span",{className:"mt-[9px] mb-1",children:s.jsxRuntimeExports.jsx(V.default,{disabled:r,placeholder:e.properties.placeholder,value:c,onChange:m,onSend:f,title:e.properties.placeholder})})]}),_=({readonly:e,placeholder:r,value:n,onChange:a,onSend:c})=>r?s.jsxRuntimeExports.jsx(V.default,{disabled:e,placeholder:r,value:n,onChange:a,onSend:c,title:r}):null,z=({node:e,readonly:r,defaultButtonText:n,defaultInputText:a,defaultSelectedValues:c,onSend:m,confirmButtonText:f="Submit",beforeSend:u=()=>!0})=>{const[i,p]=b.useState(a||""),[x,j]=b.useState(c||[]),l=e.properties?.isMultiSelect??!1,E=e.properties?.buttonTexts||[],d=!l&&E.length===0&&!e.properties?.placeholder,h=e.properties?.variableName?.trim()||n||"Submit",g=b.useMemo(()=>d?{...e,properties:{...e.properties||{},buttonTexts:[h],buttonValues:[h]}}:e,[h,e,d]),v=g.properties?.buttonTexts||[],k=g.properties?.buttonValues||[],S=!l&&v.length>0,y=t=>{const o={variableName:e.properties?.variableName||"",buttonText:t};u?.(o)&&m?.(o)},I=(t,o)=>{j(C=>o?[...C,t]:C.filter(D=>D!==t))},w=()=>{const t=x.length===0&&!i?.trim(),o={variableName:e.properties?.variableName||"",selectedValues:x,inputText:i?.trim()||void 0};r||t||u?.(o)&&m?.(o)},N=t=>{p(t.target.value)},T=t=>{t.nativeEvent.isComposing||t.keyCode===229||t.key==="Enter"&&!t.shiftKey&&(t.preventDefault(),l?x.length===0&&!i.trim()||w():R())},R=()=>{const t={variableName:e.properties?.variableName||"",inputText:i};u?.(t)&&m?.(t)},B=b.useMemo(()=>{if(!n)return;const t=k.indexOf(n);if(t>-1)return v[t]??n;const o=v.indexOf(n);if(o>-1)return v[o]},[n,v,k]);return b.useEffect(()=>{p(a||"")},[a,e]),b.useEffect(()=>{j(c||[])},[c,e]),s.jsxRuntimeExports.jsxs("span",{className:"custom-variable-container inline-flex items-center flex-wrap",children:[l&&s.jsxRuntimeExports.jsx(O,{node:e,readonly:r,selectedValues:x,inputValue:i,confirmButtonText:f,handleCheckboxChange:I,handleInputChange:N,handleKeyDown:T,handleConfirmClick:w}),!l&&S&&s.jsxRuntimeExports.jsx(F,{node:g,readonly:r,resolvedDefaultButtonText:B,handleButtonClick:y,inputValue:i,handleInputChange:N,handleSendClick:R}),!l&&!S&&e.properties?.placeholder&&s.jsxRuntimeExports.jsx(_,{readonly:r,placeholder:e.properties.placeholder,value:i,onChange:N,onSend:R})]})};exports.default=z;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const s=require("../../../_virtual/jsx-runtime.cjs.js"),j=require("react"),F=require("../../ui/button.cjs.js"),L=require("../../ui/checkbox.cjs.js"),M=require("../MarkdownFlowInput.cjs.js"),I=require("../../ui/inputGroup/input-group.cjs.js"),V=require("../../../lib/utils.cjs.js"),_=require("../contentRenderI18n.cjs.js"),z=({node:e,readonly:n,selectedValues:i,inputValue:r,confirmButtonText:a,handleCheckboxChange:c,handleInputChange:f,handleKeyDown:d,handleConfirmClick:u})=>{const x=e.properties?.placeholder,m=n||i.length===0&&!r?.trim(),l=h=>s.jsxRuntimeExports.jsx("span",{className:V.cn("multi-select-confirm-wrapper flex flex-col items-center",m?"opacity-50 cursor-not-allowed":"cursor-pointer",h),children:s.jsxRuntimeExports.jsx("button",{type:"button",className:"multi-select-confirm-button text-sm font-medium text-primary",disabled:m,onClick:u,children:a})});return s.jsxRuntimeExports.jsxs("span",{className:"multi-select-container flex w-full flex-col",children:[s.jsxRuntimeExports.jsx("span",{className:"flex flex-wrap gap-y-[9px] gap-x-6",children:e.properties?.buttonTexts?.map((h,b)=>{const g=e.properties?.buttonValues?.[b],p=g!==void 0?g:h;return s.jsxRuntimeExports.jsx(L.Checkbox,{label:h,disabled:n,checked:i.includes(p),onCheckedChange:E=>c(p,E),className:"text-sm"},b)})}),x?s.jsxRuntimeExports.jsx("span",{className:"block mb-1 w-full max-w-[500px]",children:s.jsxRuntimeExports.jsxs("span",{className:"multi-select-input-row flex w-full items-end gap-3",children:[s.jsxRuntimeExports.jsx(I.InputGroup,{"data-disabled":n,className:"flex-1",children:s.jsxRuntimeExports.jsx(I.InputGroupTextarea,{disabled:n,placeholder:x,value:r,onChange:f,onKeyDown:d,className:"text-sm px-3",title:x})}),l("shrink-0")]})}):l("self-start multi-select-confirm-wrapper--stacked")]})},P=({node:e,readonly:n,locale:i,resolvedDefaultButtonText:r,handleButtonClick:a,inputValue:c,handleInputChange:f,handleSendClick:d})=>s.jsxRuntimeExports.jsxs("span",{className:"single-select-container inline-flex w-full flex-col",children:[s.jsxRuntimeExports.jsx("span",{className:"flex flex-wrap gap-y-[9px] gap-x-2",children:e.properties?.buttonTexts?.map((u,x)=>{const m=e.properties?.buttonValues?.[x],l=m!==void 0?m:u;return s.jsxRuntimeExports.jsx(F.Button,{disabled:n,variant:"outline",type:"button",size:"sm",onClick:()=>a(l),className:V.cn("max-w-full shrink whitespace-normal break-words text-left leading-5 h-auto min-h-8 px-3 py-1.5","hover:bg-gray-200",r===u&&"select"),children:u},x)})}),e.properties?.placeholder&&s.jsxRuntimeExports.jsx("span",{className:"mt-[9px] mb-1",children:s.jsxRuntimeExports.jsx(M.default,{disabled:n,locale:i,placeholder:e.properties.placeholder,value:c,onChange:f,onSend:d,title:e.properties.placeholder})})]}),U=({readonly:e,locale:n,placeholder:i,value:r,onChange:a,onSend:c})=>i?s.jsxRuntimeExports.jsx(M.default,{disabled:e,locale:n,placeholder:i,value:r,onChange:a,onSend:c,title:i}):null,A=({node:e,readonly:n,locale:i,defaultButtonText:r,defaultInputText:a,defaultSelectedValues:c,onSend:f,confirmButtonText:d,beforeSend:u=()=>!0})=>{const x=_.getContentRenderLocaleTexts(i),m=d||x.confirmButtonText,[l,h]=j.useState(a||""),[b,g]=j.useState(c||[]),p=e.properties?.isMultiSelect??!1,E=e.properties?.buttonTexts||[],w=!p&&E.length===0&&!e.properties?.placeholder,R=e.properties?.variableName?.trim()||r||m,N=j.useMemo(()=>w?{...e,properties:{...e.properties||{},buttonTexts:[R],buttonValues:[R]}}:e,[R,e,w]),v=N.properties?.buttonTexts||[],S=N.properties?.buttonValues||[],T=!p&&v.length>0,y=t=>{const o={variableName:e.properties?.variableName||"",buttonText:t};u?.(o)&&f?.(o)},D=(t,o)=>{g(B=>o?[...B,t]:B.filter(O=>O!==t))},q=()=>{const t=b.length===0&&!l?.trim(),o={variableName:e.properties?.variableName||"",selectedValues:b,inputText:l?.trim()||void 0};n||t||u?.(o)&&f?.(o)},C=t=>{h(t.target.value)},G=t=>{t.nativeEvent.isComposing||t.keyCode===229||t.key==="Enter"&&!t.shiftKey&&(t.preventDefault(),p?b.length===0&&!l.trim()||q():k())},k=()=>{const t={variableName:e.properties?.variableName||"",inputText:l};u?.(t)&&f?.(t)},K=j.useMemo(()=>{if(!r)return;const t=S.indexOf(r);if(t>-1)return v[t]??r;const o=v.indexOf(r);if(o>-1)return v[o]},[r,v,S]);return j.useEffect(()=>{h(a||"")},[a,e]),j.useEffect(()=>{g(c||[])},[c,e]),s.jsxRuntimeExports.jsxs("span",{className:"custom-variable-container inline-flex items-center flex-wrap",children:[p&&s.jsxRuntimeExports.jsx(z,{node:e,readonly:n,selectedValues:b,inputValue:l,confirmButtonText:m,handleCheckboxChange:D,handleInputChange:C,handleKeyDown:G,handleConfirmClick:q}),!p&&T&&s.jsxRuntimeExports.jsx(P,{node:N,readonly:n,locale:i,resolvedDefaultButtonText:K,handleButtonClick:y,inputValue:l,handleInputChange:C,handleSendClick:k}),!p&&!T&&e.properties?.placeholder&&s.jsxRuntimeExports.jsx(U,{readonly:n,locale:i,placeholder:e.properties.placeholder,value:l,onChange:C,onSend:k})]})};exports.default=A;
2
2
  //# sourceMappingURL=CustomVariable.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CustomVariable.cjs.js","sources":["../../../../src/components/ContentRender/plugins/CustomVariable.tsx"],"sourcesContent":["import React from \"react\";\nimport type { Components } from \"react-markdown\";\nimport { OnSendContentParams } from \"../../types\";\nimport { Button } from \"../../ui/button\";\nimport { Checkbox } from \"../../ui/checkbox\";\nimport MarkdownFlowInput from \"../MarkdownFlowInput\";\nimport {\n InputGroup,\n InputGroupTextarea,\n} from \"../../ui/inputGroup/input-group\";\nimport { cn } from \"../../../lib/utils\";\n\n// Define custom variable node type\ninterface CustomVariableNode {\n tagName: \"custom-variable\";\n properties?: {\n variableName?: string;\n buttonTexts?: string[];\n buttonValues?: string[];\n placeholder?: string;\n isMultiSelect?: boolean;\n };\n}\n\n// Define custom variable component Props type\ninterface CustomVariableProps {\n node: CustomVariableNode;\n defaultButtonText?: string;\n defaultInputText?: string;\n defaultSelectedValues?: string[];\n readonly?: boolean;\n onSend?: (content: OnSendContentParams) => void;\n // Multi-select confirm button text (i18n support)\n confirmButtonText?: string;\n beforeSend?: (param: OnSendContentParams) => boolean;\n}\n\ninterface ComponentsWithCustomVariable extends Components {\n \"custom-variable\"?: React.ComponentType<CustomVariableProps>;\n}\n\n// Multi select section( with checkboxes and input)\ninterface MultiSelectSectionProps {\n node: CustomVariableNode;\n readonly?: boolean;\n selectedValues: string[];\n inputValue: string;\n confirmButtonText: string;\n handleCheckboxChange: (value: string, checked: boolean) => void;\n handleInputChange: (event: React.ChangeEvent<HTMLTextAreaElement>) => void;\n handleKeyDown: (event: React.KeyboardEvent<HTMLTextAreaElement>) => void;\n handleConfirmClick: () => void;\n}\n\nconst MultiSelectSection = ({\n node,\n readonly,\n selectedValues,\n inputValue,\n confirmButtonText,\n handleCheckboxChange,\n handleInputChange,\n handleKeyDown,\n handleConfirmClick,\n}: MultiSelectSectionProps) => {\n const placeholder = node.properties?.placeholder;\n const confirmDisabled =\n readonly || (selectedValues.length === 0 && !inputValue?.trim());\n\n const renderConfirmButton = (extraWrapperClassName?: string) => (\n <span\n className={cn(\n \"multi-select-confirm-wrapper flex flex-col items-center\",\n confirmDisabled ? \"opacity-50 cursor-not-allowed\" : \"cursor-pointer\",\n extraWrapperClassName\n )}\n >\n <button\n type=\"button\"\n className=\"multi-select-confirm-button text-sm font-medium text-primary\"\n disabled={confirmDisabled}\n onClick={handleConfirmClick}\n >\n {confirmButtonText}\n </button>\n </span>\n );\n\n return (\n <span className=\"multi-select-container flex w-full flex-col\">\n <span className=\"flex flex-wrap gap-y-[9px] gap-x-6\">\n {node.properties?.buttonTexts?.map((text, index) => {\n const value = node.properties?.buttonValues?.[index];\n const buttonValue = value !== undefined ? value : text;\n return (\n <Checkbox\n key={index}\n label={text}\n disabled={readonly}\n checked={selectedValues.includes(buttonValue)}\n onCheckedChange={(checked) =>\n handleCheckboxChange(buttonValue, checked)\n }\n className=\"text-sm\"\n />\n );\n })}\n </span>\n {placeholder ? (\n <span className=\"block mb-1 w-full max-w-[500px]\">\n <span className=\"multi-select-input-row flex w-full items-end gap-3\">\n <InputGroup data-disabled={readonly} className=\"flex-1\">\n <InputGroupTextarea\n disabled={readonly}\n placeholder={placeholder}\n value={inputValue}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n className=\"text-sm px-3\"\n title={placeholder}\n />\n </InputGroup>\n {renderConfirmButton(\"shrink-0\")}\n </span>\n </span>\n ) : (\n renderConfirmButton(\"self-start multi-select-confirm-wrapper--stacked\")\n )}\n </span>\n );\n};\n\n// Single select section( with buttons and input)\ninterface SingleSelectSectionProps {\n node: CustomVariableNode;\n readonly?: boolean;\n resolvedDefaultButtonText?: string;\n handleButtonClick: (value: string) => void;\n inputValue: string;\n handleInputChange: (event: React.ChangeEvent<HTMLTextAreaElement>) => void;\n handleSendClick: () => void;\n}\n\nconst SingleSelectSection = ({\n node,\n readonly,\n resolvedDefaultButtonText,\n handleButtonClick,\n inputValue,\n handleInputChange,\n handleSendClick,\n}: SingleSelectSectionProps) => (\n <span className=\"single-select-container inline-flex w-full flex-col\">\n <span className=\"flex flex-wrap gap-y-[9px] gap-x-2\">\n {node.properties?.buttonTexts?.map((text, index) => {\n const value = node.properties?.buttonValues?.[index];\n const buttonValue = value !== undefined ? value : text;\n return (\n <Button\n key={index}\n disabled={readonly}\n variant=\"outline\"\n type=\"button\"\n size=\"sm\"\n onClick={() => handleButtonClick(buttonValue)}\n className={cn(\n \"max-w-full shrink whitespace-normal break-words text-left leading-5 h-auto min-h-8 px-3 py-1.5\",\n \"hover:bg-gray-200\",\n resolvedDefaultButtonText === text && \"select\"\n )}\n >\n {text}\n </Button>\n );\n })}\n </span>\n {node.properties?.placeholder && (\n <span className=\"mt-[9px] mb-1\">\n <MarkdownFlowInput\n disabled={readonly}\n placeholder={node.properties.placeholder}\n value={inputValue}\n onChange={handleInputChange}\n onSend={handleSendClick}\n title={node.properties.placeholder}\n />\n </span>\n )}\n </span>\n);\n\n// Pure input\ninterface InputSectionProps {\n readonly?: boolean;\n placeholder?: string;\n value: string;\n onChange: (event: React.ChangeEvent<HTMLTextAreaElement>) => void;\n onSend: () => void;\n}\n\nconst InputSection = ({\n readonly,\n placeholder,\n value,\n onChange,\n onSend,\n}: InputSectionProps) => {\n if (!placeholder) {\n return null;\n }\n\n return (\n <MarkdownFlowInput\n disabled={readonly}\n placeholder={placeholder}\n value={value}\n onChange={onChange}\n onSend={onSend}\n title={placeholder}\n />\n );\n};\n\n// Define custom variable component\nconst CustomButtonInputVariable = ({\n node,\n readonly,\n defaultButtonText,\n defaultInputText,\n defaultSelectedValues,\n onSend,\n confirmButtonText = \"Submit\", // Default to English, can be overridden\n beforeSend = () => true,\n}: CustomVariableProps) => {\n const [inputValue, setInputValue] = React.useState(defaultInputText || \"\");\n const [selectedValues, setSelectedValues] = React.useState<string[]>(\n defaultSelectedValues || []\n );\n const isMultiSelect = node.properties?.isMultiSelect ?? false;\n const baseButtonTexts = node.properties?.buttonTexts || [];\n const shouldUseFallbackButton =\n !isMultiSelect &&\n baseButtonTexts.length === 0 &&\n !node.properties?.placeholder;\n const fallbackButtonLabel =\n node.properties?.variableName?.trim() || defaultButtonText || \"Submit\";\n\n const singleSelectNode = React.useMemo<CustomVariableNode>(() => {\n if (!shouldUseFallbackButton) {\n return node;\n }\n return {\n ...node,\n properties: {\n ...(node.properties || {}),\n buttonTexts: [fallbackButtonLabel],\n buttonValues: [fallbackButtonLabel],\n },\n };\n }, [fallbackButtonLabel, node, shouldUseFallbackButton]);\n\n const singleSelectButtonTexts =\n singleSelectNode.properties?.buttonTexts || [];\n const singleSelectButtonValues =\n singleSelectNode.properties?.buttonValues || [];\n const isSingleSelect = !isMultiSelect && singleSelectButtonTexts.length > 0;\n\n const handleButtonClick = (value: string) => {\n const param = {\n variableName: node.properties?.variableName || \"\",\n buttonText: value,\n };\n if (!beforeSend?.(param)) return;\n onSend?.(param);\n };\n\n const handleCheckboxChange = (value: string, checked: boolean) => {\n setSelectedValues((prev) => {\n if (checked) {\n return [...prev, value];\n } else {\n return prev.filter((v) => v !== value);\n }\n });\n };\n\n const handleConfirmClick = () => {\n const noSelection = selectedValues.length === 0 && !inputValue?.trim();\n const param = {\n variableName: node.properties?.variableName || \"\",\n selectedValues,\n inputText: inputValue?.trim() || undefined,\n };\n if (readonly || noSelection) return;\n if (!beforeSend?.(param)) return;\n onSend?.(param);\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n setInputValue(e.target.value);\n };\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.nativeEvent.isComposing || e.keyCode === 229) {\n return;\n }\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n if (isMultiSelect) {\n const noSelection = selectedValues.length === 0 && !inputValue.trim();\n if (!noSelection) handleConfirmClick();\n } else {\n handleSendClick();\n }\n }\n };\n const handleSendClick = () => {\n const param = {\n variableName: node.properties?.variableName || \"\",\n inputText: inputValue,\n };\n if (!beforeSend?.(param)) return;\n onSend?.(param);\n };\n\n const resolvedDefaultButtonText = React.useMemo(() => {\n if (!defaultButtonText) {\n return undefined;\n }\n const valueIndex = singleSelectButtonValues.indexOf(defaultButtonText);\n if (valueIndex > -1) {\n return singleSelectButtonTexts[valueIndex] ?? defaultButtonText;\n }\n const textIndex = singleSelectButtonTexts.indexOf(defaultButtonText);\n if (textIndex > -1) {\n return singleSelectButtonTexts[textIndex];\n }\n return undefined;\n }, [defaultButtonText, singleSelectButtonTexts, singleSelectButtonValues]);\n\n React.useEffect(() => {\n setInputValue(defaultInputText || \"\");\n }, [defaultInputText, node]);\n\n React.useEffect(() => {\n setSelectedValues(defaultSelectedValues || []);\n }, [defaultSelectedValues, node]);\n\n return (\n <span className=\"custom-variable-container inline-flex items-center flex-wrap\">\n {isMultiSelect && (\n <MultiSelectSection\n node={node}\n readonly={readonly}\n selectedValues={selectedValues}\n inputValue={inputValue}\n confirmButtonText={confirmButtonText}\n handleCheckboxChange={handleCheckboxChange}\n handleInputChange={handleInputChange}\n handleKeyDown={handleKeyDown}\n handleConfirmClick={handleConfirmClick}\n />\n )}\n\n {!isMultiSelect && isSingleSelect && (\n <SingleSelectSection\n node={singleSelectNode}\n readonly={readonly}\n resolvedDefaultButtonText={resolvedDefaultButtonText}\n handleButtonClick={handleButtonClick}\n inputValue={inputValue}\n handleInputChange={handleInputChange}\n handleSendClick={handleSendClick}\n />\n )}\n\n {!isMultiSelect && !isSingleSelect && node.properties?.placeholder && (\n <InputSection\n readonly={readonly}\n placeholder={node.properties.placeholder}\n value={inputValue}\n onChange={handleInputChange}\n onSend={handleSendClick}\n />\n )}\n </span>\n );\n};\n\nexport default CustomButtonInputVariable;\nexport type {\n ComponentsWithCustomVariable,\n CustomVariableNode,\n CustomVariableProps,\n};\n"],"names":["MultiSelectSection","node","readonly","selectedValues","inputValue","confirmButtonText","handleCheckboxChange","handleInputChange","handleKeyDown","handleConfirmClick","placeholder","confirmDisabled","renderConfirmButton","extraWrapperClassName","jsx","cn","jsxs","text","index","value","buttonValue","Checkbox","checked","InputGroup","InputGroupTextarea","SingleSelectSection","resolvedDefaultButtonText","handleButtonClick","handleSendClick","Button","MarkdownFlowInput","InputSection","onChange","onSend","CustomButtonInputVariable","defaultButtonText","defaultInputText","defaultSelectedValues","beforeSend","setInputValue","React","setSelectedValues","isMultiSelect","baseButtonTexts","shouldUseFallbackButton","fallbackButtonLabel","singleSelectNode","singleSelectButtonTexts","singleSelectButtonValues","isSingleSelect","param","prev","v","noSelection","e","valueIndex","textIndex"],"mappings":"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"}
1
+ {"version":3,"file":"CustomVariable.cjs.js","sources":["../../../../src/components/ContentRender/plugins/CustomVariable.tsx"],"sourcesContent":["import React from \"react\";\nimport type { Components } from \"react-markdown\";\nimport { OnSendContentParams } from \"../../types\";\nimport { Button } from \"../../ui/button\";\nimport { Checkbox } from \"../../ui/checkbox\";\nimport MarkdownFlowInput from \"../MarkdownFlowInput\";\nimport {\n InputGroup,\n InputGroupTextarea,\n} from \"../../ui/inputGroup/input-group\";\nimport type { MarkdownFlowLocale } from \"../../../lib/locale\";\nimport { cn } from \"../../../lib/utils\";\nimport { getContentRenderLocaleTexts } from \"../contentRenderI18n\";\n\n// Define custom variable node type\ninterface CustomVariableNode {\n tagName: \"custom-variable\";\n properties?: {\n variableName?: string;\n buttonTexts?: string[];\n buttonValues?: string[];\n placeholder?: string;\n isMultiSelect?: boolean;\n };\n}\n\n// Define custom variable component Props type\ninterface CustomVariableProps {\n node: CustomVariableNode;\n defaultButtonText?: string;\n defaultInputText?: string;\n defaultSelectedValues?: string[];\n locale?: MarkdownFlowLocale;\n readonly?: boolean;\n onSend?: (content: OnSendContentParams) => void;\n // Multi-select confirm button text (i18n support)\n confirmButtonText?: string;\n beforeSend?: (param: OnSendContentParams) => boolean;\n}\n\ninterface ComponentsWithCustomVariable extends Components {\n \"custom-variable\"?: React.ComponentType<CustomVariableProps>;\n}\n\n// Multi select section( with checkboxes and input)\ninterface MultiSelectSectionProps {\n node: CustomVariableNode;\n readonly?: boolean;\n selectedValues: string[];\n inputValue: string;\n confirmButtonText: string;\n handleCheckboxChange: (value: string, checked: boolean) => void;\n handleInputChange: (event: React.ChangeEvent<HTMLTextAreaElement>) => void;\n handleKeyDown: (event: React.KeyboardEvent<HTMLTextAreaElement>) => void;\n handleConfirmClick: () => void;\n}\n\nconst MultiSelectSection = ({\n node,\n readonly,\n selectedValues,\n inputValue,\n confirmButtonText,\n handleCheckboxChange,\n handleInputChange,\n handleKeyDown,\n handleConfirmClick,\n}: MultiSelectSectionProps) => {\n const placeholder = node.properties?.placeholder;\n const confirmDisabled =\n readonly || (selectedValues.length === 0 && !inputValue?.trim());\n\n const renderConfirmButton = (extraWrapperClassName?: string) => (\n <span\n className={cn(\n \"multi-select-confirm-wrapper flex flex-col items-center\",\n confirmDisabled ? \"opacity-50 cursor-not-allowed\" : \"cursor-pointer\",\n extraWrapperClassName\n )}\n >\n <button\n type=\"button\"\n className=\"multi-select-confirm-button text-sm font-medium text-primary\"\n disabled={confirmDisabled}\n onClick={handleConfirmClick}\n >\n {confirmButtonText}\n </button>\n </span>\n );\n\n return (\n <span className=\"multi-select-container flex w-full flex-col\">\n <span className=\"flex flex-wrap gap-y-[9px] gap-x-6\">\n {node.properties?.buttonTexts?.map((text, index) => {\n const value = node.properties?.buttonValues?.[index];\n const buttonValue = value !== undefined ? value : text;\n return (\n <Checkbox\n key={index}\n label={text}\n disabled={readonly}\n checked={selectedValues.includes(buttonValue)}\n onCheckedChange={(checked) =>\n handleCheckboxChange(buttonValue, checked)\n }\n className=\"text-sm\"\n />\n );\n })}\n </span>\n {placeholder ? (\n <span className=\"block mb-1 w-full max-w-[500px]\">\n <span className=\"multi-select-input-row flex w-full items-end gap-3\">\n <InputGroup data-disabled={readonly} className=\"flex-1\">\n <InputGroupTextarea\n disabled={readonly}\n placeholder={placeholder}\n value={inputValue}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n className=\"text-sm px-3\"\n title={placeholder}\n />\n </InputGroup>\n {renderConfirmButton(\"shrink-0\")}\n </span>\n </span>\n ) : (\n renderConfirmButton(\"self-start multi-select-confirm-wrapper--stacked\")\n )}\n </span>\n );\n};\n\n// Single select section( with buttons and input)\ninterface SingleSelectSectionProps {\n node: CustomVariableNode;\n readonly?: boolean;\n locale?: MarkdownFlowLocale;\n resolvedDefaultButtonText?: string;\n handleButtonClick: (value: string) => void;\n inputValue: string;\n handleInputChange: (event: React.ChangeEvent<HTMLTextAreaElement>) => void;\n handleSendClick: () => void;\n}\n\nconst SingleSelectSection = ({\n node,\n readonly,\n locale,\n resolvedDefaultButtonText,\n handleButtonClick,\n inputValue,\n handleInputChange,\n handleSendClick,\n}: SingleSelectSectionProps) => (\n <span className=\"single-select-container inline-flex w-full flex-col\">\n <span className=\"flex flex-wrap gap-y-[9px] gap-x-2\">\n {node.properties?.buttonTexts?.map((text, index) => {\n const value = node.properties?.buttonValues?.[index];\n const buttonValue = value !== undefined ? value : text;\n return (\n <Button\n key={index}\n disabled={readonly}\n variant=\"outline\"\n type=\"button\"\n size=\"sm\"\n onClick={() => handleButtonClick(buttonValue)}\n className={cn(\n \"max-w-full shrink whitespace-normal break-words text-left leading-5 h-auto min-h-8 px-3 py-1.5\",\n \"hover:bg-gray-200\",\n resolvedDefaultButtonText === text && \"select\"\n )}\n >\n {text}\n </Button>\n );\n })}\n </span>\n {node.properties?.placeholder && (\n <span className=\"mt-[9px] mb-1\">\n <MarkdownFlowInput\n disabled={readonly}\n locale={locale}\n placeholder={node.properties.placeholder}\n value={inputValue}\n onChange={handleInputChange}\n onSend={handleSendClick}\n title={node.properties.placeholder}\n />\n </span>\n )}\n </span>\n);\n\n// Pure input\ninterface InputSectionProps {\n readonly?: boolean;\n locale?: MarkdownFlowLocale;\n placeholder?: string;\n value: string;\n onChange: (event: React.ChangeEvent<HTMLTextAreaElement>) => void;\n onSend: () => void;\n}\n\nconst InputSection = ({\n readonly,\n locale,\n placeholder,\n value,\n onChange,\n onSend,\n}: InputSectionProps) => {\n if (!placeholder) {\n return null;\n }\n\n return (\n <MarkdownFlowInput\n disabled={readonly}\n locale={locale}\n placeholder={placeholder}\n value={value}\n onChange={onChange}\n onSend={onSend}\n title={placeholder}\n />\n );\n};\n\n// Define custom variable component\nconst CustomButtonInputVariable = ({\n node,\n readonly,\n locale,\n defaultButtonText,\n defaultInputText,\n defaultSelectedValues,\n onSend,\n confirmButtonText,\n beforeSend = () => true,\n}: CustomVariableProps) => {\n const localeTexts = getContentRenderLocaleTexts(locale);\n const resolvedConfirmButtonText =\n confirmButtonText || localeTexts.confirmButtonText;\n const [inputValue, setInputValue] = React.useState(defaultInputText || \"\");\n const [selectedValues, setSelectedValues] = React.useState<string[]>(\n defaultSelectedValues || []\n );\n const isMultiSelect = node.properties?.isMultiSelect ?? false;\n const baseButtonTexts = node.properties?.buttonTexts || [];\n const shouldUseFallbackButton =\n !isMultiSelect &&\n baseButtonTexts.length === 0 &&\n !node.properties?.placeholder;\n const fallbackButtonLabel =\n node.properties?.variableName?.trim() ||\n defaultButtonText ||\n resolvedConfirmButtonText;\n\n const singleSelectNode = React.useMemo<CustomVariableNode>(() => {\n if (!shouldUseFallbackButton) {\n return node;\n }\n return {\n ...node,\n properties: {\n ...(node.properties || {}),\n buttonTexts: [fallbackButtonLabel],\n buttonValues: [fallbackButtonLabel],\n },\n };\n }, [fallbackButtonLabel, node, shouldUseFallbackButton]);\n\n const singleSelectButtonTexts =\n singleSelectNode.properties?.buttonTexts || [];\n const singleSelectButtonValues =\n singleSelectNode.properties?.buttonValues || [];\n const isSingleSelect = !isMultiSelect && singleSelectButtonTexts.length > 0;\n\n const handleButtonClick = (value: string) => {\n const param = {\n variableName: node.properties?.variableName || \"\",\n buttonText: value,\n };\n if (!beforeSend?.(param)) return;\n onSend?.(param);\n };\n\n const handleCheckboxChange = (value: string, checked: boolean) => {\n setSelectedValues((prev) => {\n if (checked) {\n return [...prev, value];\n } else {\n return prev.filter((v) => v !== value);\n }\n });\n };\n\n const handleConfirmClick = () => {\n const noSelection = selectedValues.length === 0 && !inputValue?.trim();\n const param = {\n variableName: node.properties?.variableName || \"\",\n selectedValues,\n inputText: inputValue?.trim() || undefined,\n };\n if (readonly || noSelection) return;\n if (!beforeSend?.(param)) return;\n onSend?.(param);\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n setInputValue(e.target.value);\n };\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.nativeEvent.isComposing || e.keyCode === 229) {\n return;\n }\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n if (isMultiSelect) {\n const noSelection = selectedValues.length === 0 && !inputValue.trim();\n if (!noSelection) handleConfirmClick();\n } else {\n handleSendClick();\n }\n }\n };\n const handleSendClick = () => {\n const param = {\n variableName: node.properties?.variableName || \"\",\n inputText: inputValue,\n };\n if (!beforeSend?.(param)) return;\n onSend?.(param);\n };\n\n const resolvedDefaultButtonText = React.useMemo(() => {\n if (!defaultButtonText) {\n return undefined;\n }\n const valueIndex = singleSelectButtonValues.indexOf(defaultButtonText);\n if (valueIndex > -1) {\n return singleSelectButtonTexts[valueIndex] ?? defaultButtonText;\n }\n const textIndex = singleSelectButtonTexts.indexOf(defaultButtonText);\n if (textIndex > -1) {\n return singleSelectButtonTexts[textIndex];\n }\n return undefined;\n }, [defaultButtonText, singleSelectButtonTexts, singleSelectButtonValues]);\n\n React.useEffect(() => {\n setInputValue(defaultInputText || \"\");\n }, [defaultInputText, node]);\n\n React.useEffect(() => {\n setSelectedValues(defaultSelectedValues || []);\n }, [defaultSelectedValues, node]);\n\n return (\n <span className=\"custom-variable-container inline-flex items-center flex-wrap\">\n {isMultiSelect && (\n <MultiSelectSection\n node={node}\n readonly={readonly}\n selectedValues={selectedValues}\n inputValue={inputValue}\n confirmButtonText={resolvedConfirmButtonText}\n handleCheckboxChange={handleCheckboxChange}\n handleInputChange={handleInputChange}\n handleKeyDown={handleKeyDown}\n handleConfirmClick={handleConfirmClick}\n />\n )}\n\n {!isMultiSelect && isSingleSelect && (\n <SingleSelectSection\n node={singleSelectNode}\n readonly={readonly}\n locale={locale}\n resolvedDefaultButtonText={resolvedDefaultButtonText}\n handleButtonClick={handleButtonClick}\n inputValue={inputValue}\n handleInputChange={handleInputChange}\n handleSendClick={handleSendClick}\n />\n )}\n\n {!isMultiSelect && !isSingleSelect && node.properties?.placeholder && (\n <InputSection\n readonly={readonly}\n locale={locale}\n placeholder={node.properties.placeholder}\n value={inputValue}\n onChange={handleInputChange}\n onSend={handleSendClick}\n />\n )}\n </span>\n );\n};\n\nexport default CustomButtonInputVariable;\nexport type {\n ComponentsWithCustomVariable,\n CustomVariableNode,\n CustomVariableProps,\n};\n"],"names":["MultiSelectSection","node","readonly","selectedValues","inputValue","confirmButtonText","handleCheckboxChange","handleInputChange","handleKeyDown","handleConfirmClick","placeholder","confirmDisabled","renderConfirmButton","extraWrapperClassName","jsx","cn","jsxs","text","index","value","buttonValue","Checkbox","checked","InputGroup","InputGroupTextarea","SingleSelectSection","locale","resolvedDefaultButtonText","handleButtonClick","handleSendClick","Button","MarkdownFlowInput","InputSection","onChange","onSend","CustomButtonInputVariable","defaultButtonText","defaultInputText","defaultSelectedValues","beforeSend","localeTexts","getContentRenderLocaleTexts","resolvedConfirmButtonText","setInputValue","React","setSelectedValues","isMultiSelect","baseButtonTexts","shouldUseFallbackButton","fallbackButtonLabel","singleSelectNode","singleSelectButtonTexts","singleSelectButtonValues","isSingleSelect","param","prev","v","noSelection","e","valueIndex","textIndex"],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { default as React } from 'react';
2
2
  import { Components } from 'react-markdown';
3
3
  import { OnSendContentParams } from '../../types';
4
+ import { MarkdownFlowLocale } from '../../../lib/locale';
4
5
  interface CustomVariableNode {
5
6
  tagName: "custom-variable";
6
7
  properties?: {
@@ -16,6 +17,7 @@ interface CustomVariableProps {
16
17
  defaultButtonText?: string;
17
18
  defaultInputText?: string;
18
19
  defaultSelectedValues?: string[];
20
+ locale?: MarkdownFlowLocale;
19
21
  readonly?: boolean;
20
22
  onSend?: (content: OnSendContentParams) => void;
21
23
  confirmButtonText?: string;
@@ -24,6 +26,6 @@ interface CustomVariableProps {
24
26
  interface ComponentsWithCustomVariable extends Components {
25
27
  "custom-variable"?: React.ComponentType<CustomVariableProps>;
26
28
  }
27
- declare const CustomButtonInputVariable: ({ node, readonly, defaultButtonText, defaultInputText, defaultSelectedValues, onSend, confirmButtonText, beforeSend, }: CustomVariableProps) => React.JSX.Element;
29
+ declare const CustomButtonInputVariable: ({ node, readonly, locale, defaultButtonText, defaultInputText, defaultSelectedValues, onSend, confirmButtonText, beforeSend, }: CustomVariableProps) => React.JSX.Element;
28
30
  export default CustomButtonInputVariable;
29
31
  export type { ComponentsWithCustomVariable, CustomVariableNode, CustomVariableProps, };
@@ -1,227 +1,234 @@
1
1
  import { j as s } from "../../../_virtual/jsx-runtime.es.js";
2
- import h from "react";
3
- import { Button as F } from "../../ui/button.es.js";
4
- import { Checkbox as G } from "../../ui/checkbox.es.js";
5
- import y from "../MarkdownFlowInput.es.js";
6
- import { InputGroup as O, InputGroupTextarea as R } from "../../ui/inputGroup/input-group.es.js";
7
- import { cn as M } from "../../../lib/utils.es.js";
8
- const _ = ({
2
+ import d from "react";
3
+ import { Button as L } from "../../ui/button.es.js";
4
+ import { Checkbox as O } from "../../ui/checkbox.es.js";
5
+ import M from "../MarkdownFlowInput.es.js";
6
+ import { InputGroup as _, InputGroupTextarea as z } from "../../ui/inputGroup/input-group.es.js";
7
+ import { cn as D } from "../../../lib/utils.es.js";
8
+ import { getContentRenderLocaleTexts as U } from "../contentRenderI18n.es.js";
9
+ const q = ({
9
10
  node: e,
10
11
  readonly: r,
11
12
  selectedValues: l,
12
- inputValue: o,
13
- confirmButtonText: c,
14
- handleCheckboxChange: x,
15
- handleInputChange: b,
16
- handleKeyDown: p,
17
- handleConfirmClick: n
13
+ inputValue: n,
14
+ confirmButtonText: a,
15
+ handleCheckboxChange: c,
16
+ handleInputChange: f,
17
+ handleKeyDown: g,
18
+ handleConfirmClick: p
18
19
  }) => {
19
- const u = e.properties?.placeholder, m = r || l.length === 0 && !o?.trim(), d = (i) => /* @__PURE__ */ s.jsx(
20
+ const m = e.properties?.placeholder, x = r || l.length === 0 && !n?.trim(), i = (h) => /* @__PURE__ */ s.jsx(
20
21
  "span",
21
22
  {
22
- className: M(
23
+ className: D(
23
24
  "multi-select-confirm-wrapper flex flex-col items-center",
24
- m ? "opacity-50 cursor-not-allowed" : "cursor-pointer",
25
- i
25
+ x ? "opacity-50 cursor-not-allowed" : "cursor-pointer",
26
+ h
26
27
  ),
27
28
  children: /* @__PURE__ */ s.jsx(
28
29
  "button",
29
30
  {
30
31
  type: "button",
31
32
  className: "multi-select-confirm-button text-sm font-medium text-primary",
32
- disabled: m,
33
- onClick: n,
34
- children: c
33
+ disabled: x,
34
+ onClick: p,
35
+ children: a
35
36
  }
36
37
  )
37
38
  }
38
39
  );
39
40
  return /* @__PURE__ */ s.jsxs("span", { className: "multi-select-container flex w-full flex-col", children: [
40
- /* @__PURE__ */ s.jsx("span", { className: "flex flex-wrap gap-y-[9px] gap-x-6", children: e.properties?.buttonTexts?.map((i, j) => {
41
- const g = e.properties?.buttonValues?.[j], f = g !== void 0 ? g : i;
41
+ /* @__PURE__ */ s.jsx("span", { className: "flex flex-wrap gap-y-[9px] gap-x-6", children: e.properties?.buttonTexts?.map((h, b) => {
42
+ const v = e.properties?.buttonValues?.[b], u = v !== void 0 ? v : h;
42
43
  return /* @__PURE__ */ s.jsx(
43
- G,
44
+ O,
44
45
  {
45
- label: i,
46
+ label: h,
46
47
  disabled: r,
47
- checked: l.includes(f),
48
- onCheckedChange: (v) => x(f, v),
48
+ checked: l.includes(u),
49
+ onCheckedChange: (j) => c(u, j),
49
50
  className: "text-sm"
50
51
  },
51
- j
52
+ b
52
53
  );
53
54
  }) }),
54
- u ? /* @__PURE__ */ s.jsx("span", { className: "block mb-1 w-full max-w-[500px]", children: /* @__PURE__ */ s.jsxs("span", { className: "multi-select-input-row flex w-full items-end gap-3", children: [
55
- /* @__PURE__ */ s.jsx(O, { "data-disabled": r, className: "flex-1", children: /* @__PURE__ */ s.jsx(
56
- R,
55
+ m ? /* @__PURE__ */ s.jsx("span", { className: "block mb-1 w-full max-w-[500px]", children: /* @__PURE__ */ s.jsxs("span", { className: "multi-select-input-row flex w-full items-end gap-3", children: [
56
+ /* @__PURE__ */ s.jsx(_, { "data-disabled": r, className: "flex-1", children: /* @__PURE__ */ s.jsx(
57
+ z,
57
58
  {
58
59
  disabled: r,
59
- placeholder: u,
60
- value: o,
61
- onChange: b,
62
- onKeyDown: p,
60
+ placeholder: m,
61
+ value: n,
62
+ onChange: f,
63
+ onKeyDown: g,
63
64
  className: "text-sm px-3",
64
- title: u
65
+ title: m
65
66
  }
66
67
  ) }),
67
- d("shrink-0")
68
- ] }) }) : d("self-start multi-select-confirm-wrapper--stacked")
68
+ i("shrink-0")
69
+ ] }) }) : i("self-start multi-select-confirm-wrapper--stacked")
69
70
  ] });
70
- }, z = ({
71
+ }, A = ({
71
72
  node: e,
72
73
  readonly: r,
73
- resolvedDefaultButtonText: l,
74
- handleButtonClick: o,
74
+ locale: l,
75
+ resolvedDefaultButtonText: n,
76
+ handleButtonClick: a,
75
77
  inputValue: c,
76
- handleInputChange: x,
77
- handleSendClick: b
78
+ handleInputChange: f,
79
+ handleSendClick: g
78
80
  }) => /* @__PURE__ */ s.jsxs("span", { className: "single-select-container inline-flex w-full flex-col", children: [
79
- /* @__PURE__ */ s.jsx("span", { className: "flex flex-wrap gap-y-[9px] gap-x-2", children: e.properties?.buttonTexts?.map((p, n) => {
80
- const u = e.properties?.buttonValues?.[n], m = u !== void 0 ? u : p;
81
+ /* @__PURE__ */ s.jsx("span", { className: "flex flex-wrap gap-y-[9px] gap-x-2", children: e.properties?.buttonTexts?.map((p, m) => {
82
+ const x = e.properties?.buttonValues?.[m], i = x !== void 0 ? x : p;
81
83
  return /* @__PURE__ */ s.jsx(
82
- F,
84
+ L,
83
85
  {
84
86
  disabled: r,
85
87
  variant: "outline",
86
88
  type: "button",
87
89
  size: "sm",
88
- onClick: () => o(m),
89
- className: M(
90
+ onClick: () => a(i),
91
+ className: D(
90
92
  "max-w-full shrink whitespace-normal break-words text-left leading-5 h-auto min-h-8 px-3 py-1.5",
91
93
  "hover:bg-gray-200",
92
- l === p && "select"
94
+ n === p && "select"
93
95
  ),
94
96
  children: p
95
97
  },
96
- n
98
+ m
97
99
  );
98
100
  }) }),
99
101
  e.properties?.placeholder && /* @__PURE__ */ s.jsx("span", { className: "mt-[9px] mb-1", children: /* @__PURE__ */ s.jsx(
100
- y,
102
+ M,
101
103
  {
102
104
  disabled: r,
105
+ locale: l,
103
106
  placeholder: e.properties.placeholder,
104
107
  value: c,
105
- onChange: x,
106
- onSend: b,
108
+ onChange: f,
109
+ onSend: g,
107
110
  title: e.properties.placeholder
108
111
  }
109
112
  ) })
110
- ] }), L = ({
113
+ ] }), H = ({
111
114
  readonly: e,
112
- placeholder: r,
113
- value: l,
114
- onChange: o,
115
+ locale: r,
116
+ placeholder: l,
117
+ value: n,
118
+ onChange: a,
115
119
  onSend: c
116
- }) => r ? /* @__PURE__ */ s.jsx(
117
- y,
120
+ }) => l ? /* @__PURE__ */ s.jsx(
121
+ M,
118
122
  {
119
123
  disabled: e,
120
- placeholder: r,
121
- value: l,
122
- onChange: o,
124
+ locale: r,
125
+ placeholder: l,
126
+ value: n,
127
+ onChange: a,
123
128
  onSend: c,
124
- title: r
129
+ title: l
125
130
  }
126
- ) : null, W = ({
131
+ ) : null, ee = ({
127
132
  node: e,
128
133
  readonly: r,
129
- defaultButtonText: l,
130
- defaultInputText: o,
134
+ locale: l,
135
+ defaultButtonText: n,
136
+ defaultInputText: a,
131
137
  defaultSelectedValues: c,
132
- onSend: x,
133
- confirmButtonText: b = "Submit",
134
- // Default to English, can be overridden
138
+ onSend: f,
139
+ confirmButtonText: g,
135
140
  beforeSend: p = () => !0
136
141
  }) => {
137
- const [n, u] = h.useState(o || ""), [m, d] = h.useState(
142
+ const m = U(l), x = g || m.confirmButtonText, [i, h] = d.useState(a || ""), [b, v] = d.useState(
138
143
  c || []
139
- ), i = e.properties?.isMultiSelect ?? !1, j = e.properties?.buttonTexts || [], g = !i && j.length === 0 && !e.properties?.placeholder, f = e.properties?.variableName?.trim() || l || "Submit", v = h.useMemo(() => g ? {
144
+ ), u = e.properties?.isMultiSelect ?? !1, j = e.properties?.buttonTexts || [], T = !u && j.length === 0 && !e.properties?.placeholder, C = e.properties?.variableName?.trim() || n || x, k = d.useMemo(() => T ? {
140
145
  ...e,
141
146
  properties: {
142
147
  ...e.properties || {},
143
- buttonTexts: [f],
144
- buttonValues: [f]
148
+ buttonTexts: [C],
149
+ buttonValues: [C]
145
150
  }
146
- } : e, [f, e, g]), N = v.properties?.buttonTexts || [], C = v.properties?.buttonValues || [], S = !i && N.length > 0, B = (t) => {
147
- const a = {
151
+ } : e, [C, e, T]), N = k.properties?.buttonTexts || [], B = k.properties?.buttonValues || [], V = !u && N.length > 0, E = (t) => {
152
+ const o = {
148
153
  variableName: e.properties?.variableName || "",
149
154
  buttonText: t
150
155
  };
151
- p?.(a) && x?.(a);
152
- }, D = (t, a) => {
153
- d((I) => a ? [...I, t] : I.filter((K) => K !== t));
154
- }, V = () => {
155
- const t = m.length === 0 && !n?.trim(), a = {
156
+ p?.(o) && f?.(o);
157
+ }, K = (t, o) => {
158
+ v((y) => o ? [...y, t] : y.filter((G) => G !== t));
159
+ }, I = () => {
160
+ const t = b.length === 0 && !i?.trim(), o = {
156
161
  variableName: e.properties?.variableName || "",
157
- selectedValues: m,
158
- inputText: n?.trim() || void 0
162
+ selectedValues: b,
163
+ inputText: i?.trim() || void 0
159
164
  };
160
- r || t || p?.(a) && x?.(a);
161
- }, k = (t) => {
162
- u(t.target.value);
163
- }, E = (t) => {
164
- t.nativeEvent.isComposing || t.keyCode === 229 || t.key === "Enter" && !t.shiftKey && (t.preventDefault(), i ? m.length === 0 && !n.trim() || V() : w());
165
- }, w = () => {
165
+ r || t || p?.(o) && f?.(o);
166
+ }, w = (t) => {
167
+ h(t.target.value);
168
+ }, R = (t) => {
169
+ t.nativeEvent.isComposing || t.keyCode === 229 || t.key === "Enter" && !t.shiftKey && (t.preventDefault(), u ? b.length === 0 && !i.trim() || I() : S());
170
+ }, S = () => {
166
171
  const t = {
167
172
  variableName: e.properties?.variableName || "",
168
- inputText: n
173
+ inputText: i
169
174
  };
170
- p?.(t) && x?.(t);
171
- }, T = h.useMemo(() => {
172
- if (!l)
175
+ p?.(t) && f?.(t);
176
+ }, F = d.useMemo(() => {
177
+ if (!n)
173
178
  return;
174
- const t = C.indexOf(l);
179
+ const t = B.indexOf(n);
175
180
  if (t > -1)
176
- return N[t] ?? l;
177
- const a = N.indexOf(l);
178
- if (a > -1)
179
- return N[a];
180
- }, [l, N, C]);
181
- return h.useEffect(() => {
182
- u(o || "");
183
- }, [o, e]), h.useEffect(() => {
184
- d(c || []);
181
+ return N[t] ?? n;
182
+ const o = N.indexOf(n);
183
+ if (o > -1)
184
+ return N[o];
185
+ }, [n, N, B]);
186
+ return d.useEffect(() => {
187
+ h(a || "");
188
+ }, [a, e]), d.useEffect(() => {
189
+ v(c || []);
185
190
  }, [c, e]), /* @__PURE__ */ s.jsxs("span", { className: "custom-variable-container inline-flex items-center flex-wrap", children: [
186
- i && /* @__PURE__ */ s.jsx(
187
- _,
191
+ u && /* @__PURE__ */ s.jsx(
192
+ q,
188
193
  {
189
194
  node: e,
190
195
  readonly: r,
191
- selectedValues: m,
192
- inputValue: n,
193
- confirmButtonText: b,
194
- handleCheckboxChange: D,
195
- handleInputChange: k,
196
- handleKeyDown: E,
197
- handleConfirmClick: V
196
+ selectedValues: b,
197
+ inputValue: i,
198
+ confirmButtonText: x,
199
+ handleCheckboxChange: K,
200
+ handleInputChange: w,
201
+ handleKeyDown: R,
202
+ handleConfirmClick: I
198
203
  }
199
204
  ),
200
- !i && S && /* @__PURE__ */ s.jsx(
201
- z,
205
+ !u && V && /* @__PURE__ */ s.jsx(
206
+ A,
202
207
  {
203
- node: v,
208
+ node: k,
204
209
  readonly: r,
205
- resolvedDefaultButtonText: T,
206
- handleButtonClick: B,
207
- inputValue: n,
208
- handleInputChange: k,
209
- handleSendClick: w
210
+ locale: l,
211
+ resolvedDefaultButtonText: F,
212
+ handleButtonClick: E,
213
+ inputValue: i,
214
+ handleInputChange: w,
215
+ handleSendClick: S
210
216
  }
211
217
  ),
212
- !i && !S && e.properties?.placeholder && /* @__PURE__ */ s.jsx(
213
- L,
218
+ !u && !V && e.properties?.placeholder && /* @__PURE__ */ s.jsx(
219
+ H,
214
220
  {
215
221
  readonly: r,
222
+ locale: l,
216
223
  placeholder: e.properties.placeholder,
217
- value: n,
218
- onChange: k,
219
- onSend: w
224
+ value: i,
225
+ onChange: w,
226
+ onSend: S
220
227
  }
221
228
  )
222
229
  ] });
223
230
  };
224
231
  export {
225
- W as default
232
+ ee as default
226
233
  };
227
234
  //# sourceMappingURL=CustomVariable.es.js.map