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.
- package/dist/_virtual/index.cjs8.js +1 -1
- package/dist/_virtual/index.cjs9.js +1 -1
- package/dist/_virtual/index.es8.js +2 -2
- package/dist/_virtual/index.es9.js +2 -2
- package/dist/components/ContentRender/ContentRender.cjs.js +2 -2
- package/dist/components/ContentRender/ContentRender.cjs.js.map +1 -1
- package/dist/components/ContentRender/ContentRender.d.ts +4 -0
- package/dist/components/ContentRender/ContentRender.es.js +217 -211
- package/dist/components/ContentRender/ContentRender.es.js.map +1 -1
- package/dist/components/ContentRender/ContentRender.stories.d.ts +1 -0
- package/dist/components/ContentRender/IframeSandbox.cjs.js +4 -4
- package/dist/components/ContentRender/IframeSandbox.cjs.js.map +1 -1
- package/dist/components/ContentRender/IframeSandbox.d.ts +3 -0
- package/dist/components/ContentRender/IframeSandbox.es.js +210 -196
- package/dist/components/ContentRender/IframeSandbox.es.js.map +1 -1
- package/dist/components/ContentRender/MarkdownFlowInput.cjs.js +1 -1
- package/dist/components/ContentRender/MarkdownFlowInput.cjs.js.map +1 -1
- package/dist/components/ContentRender/MarkdownFlowInput.d.ts +3 -0
- package/dist/components/ContentRender/MarkdownFlowInput.es.js +35 -32
- package/dist/components/ContentRender/MarkdownFlowInput.es.js.map +1 -1
- package/dist/components/ContentRender/MarkdownFlowInput.stories.d.ts +6 -0
- package/dist/components/ContentRender/SandboxApp.cjs.js +2 -2
- package/dist/components/ContentRender/SandboxApp.cjs.js.map +1 -1
- package/dist/components/ContentRender/SandboxApp.d.ts +3 -0
- package/dist/components/ContentRender/SandboxApp.es.js +117 -104
- package/dist/components/ContentRender/SandboxApp.es.js.map +1 -1
- package/dist/components/ContentRender/blackboard-vendor.cjs.js +1 -1
- package/dist/components/ContentRender/blackboard-vendor.cjs.js.map +1 -1
- package/dist/components/ContentRender/blackboard-vendor.es.js +14 -9
- package/dist/components/ContentRender/blackboard-vendor.es.js.map +1 -1
- package/dist/components/ContentRender/cjkFontFamily.cjs.js +2 -0
- package/dist/components/ContentRender/cjkFontFamily.cjs.js.map +1 -0
- package/dist/components/ContentRender/cjkFontFamily.d.ts +5 -0
- package/dist/components/ContentRender/cjkFontFamily.es.js +45 -0
- package/dist/components/ContentRender/cjkFontFamily.es.js.map +1 -0
- package/dist/components/ContentRender/cjkFontFamily.test.d.ts +1 -0
- package/dist/components/ContentRender/contentRenderI18n.cjs.js +2 -0
- package/dist/components/ContentRender/contentRenderI18n.cjs.js.map +1 -0
- package/dist/components/ContentRender/contentRenderI18n.d.ts +15 -0
- package/dist/components/ContentRender/contentRenderI18n.es.js +59 -0
- package/dist/components/ContentRender/contentRenderI18n.es.js.map +1 -0
- package/dist/components/ContentRender/index.cjs.js +1 -1
- package/dist/components/ContentRender/index.d.ts +1 -0
- package/dist/components/ContentRender/index.es.js +1 -0
- package/dist/components/ContentRender/index.es.js.map +1 -1
- package/dist/components/ContentRender/plugins/CustomVariable.cjs.js +1 -1
- package/dist/components/ContentRender/plugins/CustomVariable.cjs.js.map +1 -1
- package/dist/components/ContentRender/plugins/CustomVariable.d.ts +3 -1
- package/dist/components/ContentRender/plugins/CustomVariable.es.js +131 -124
- package/dist/components/ContentRender/plugins/CustomVariable.es.js.map +1 -1
- package/dist/components/ContentRender/plugins/MermaidChart.cjs.js +1 -1
- package/dist/components/ContentRender/plugins/MermaidChart.cjs.js.map +1 -1
- package/dist/components/ContentRender/plugins/MermaidChart.es.js +19 -18
- package/dist/components/ContentRender/plugins/MermaidChart.es.js.map +1 -1
- package/dist/components/MarkdownFlow/MarkdownFlow.cjs.js +1 -1
- package/dist/components/MarkdownFlow/MarkdownFlow.cjs.js.map +1 -1
- package/dist/components/MarkdownFlow/MarkdownFlow.d.ts +3 -0
- package/dist/components/MarkdownFlow/MarkdownFlow.es.js +18 -15
- package/dist/components/MarkdownFlow/MarkdownFlow.es.js.map +1 -1
- package/dist/components/MarkdownFlow/MarkdownFlow.stories.d.ts +6 -0
- package/dist/components/MarkdownFlow/ScrollableMarkdownFlow.d.ts +1 -0
- package/dist/components/MarkdownFlow/index.cjs.js +1 -1
- package/dist/components/MarkdownFlow/index.es.js +1 -0
- package/dist/components/MarkdownFlow/index.es.js.map +1 -1
- package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.cjs.js +1 -1
- package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.cjs.js.map +1 -1
- package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.d.ts +2 -2
- package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.es.js +23 -22
- package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.es.js.map +1 -1
- package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.stories.d.ts +1 -1
- package/dist/components/MarkdownFlowEditor/editorI18n.cjs.js +1 -1
- package/dist/components/MarkdownFlowEditor/editorI18n.cjs.js.map +1 -1
- package/dist/components/MarkdownFlowEditor/editorI18n.d.ts +0 -2
- package/dist/components/MarkdownFlowEditor/editorI18n.es.js +12 -24
- package/dist/components/MarkdownFlowEditor/editorI18n.es.js.map +1 -1
- package/dist/components/MarkdownFlowEditor/index.d.ts +1 -1
- package/dist/components/Slide/Player.cjs.js +1 -1
- package/dist/components/Slide/Player.cjs.js.map +1 -1
- package/dist/components/Slide/Player.d.ts +14 -30
- package/dist/components/Slide/Player.es.js +395 -383
- package/dist/components/Slide/Player.es.js.map +1 -1
- package/dist/components/Slide/Slide.cjs.js +1 -1
- package/dist/components/Slide/Slide.cjs.js.map +1 -1
- package/dist/components/Slide/Slide.d.ts +22 -4
- package/dist/components/Slide/Slide.es.js +701 -659
- package/dist/components/Slide/Slide.es.js.map +1 -1
- package/dist/components/Slide/Slide.stories.d.ts +19 -20
- package/dist/components/Slide/constants.d.ts +0 -24
- package/dist/components/Slide/index.d.ts +2 -1
- package/dist/components/Slide/slideI18n.cjs.js +2 -0
- package/dist/components/Slide/slideI18n.cjs.js.map +1 -0
- package/dist/components/Slide/slideI18n.d.ts +44 -0
- package/dist/components/Slide/slideI18n.es.js +158 -0
- package/dist/components/Slide/slideI18n.es.js.map +1 -0
- package/dist/components/Slide/slideI18n.test.d.ts +1 -0
- package/dist/components/Slide/utils/playerVisibility.cjs.js +2 -0
- package/dist/components/Slide/utils/playerVisibility.cjs.js.map +1 -0
- package/dist/components/Slide/utils/playerVisibility.d.ts +10 -0
- package/dist/components/Slide/utils/playerVisibility.es.js +11 -0
- package/dist/components/Slide/utils/playerVisibility.es.js.map +1 -0
- package/dist/components/Slide/utils/playerVisibility.test.d.ts +1 -0
- package/dist/components/index.d.ts +2 -1
- package/dist/editor.d.ts +3 -2
- package/dist/index.cjs.js +1 -1
- package/dist/index.es.js +14 -13
- package/dist/index.es.js.map +1 -1
- package/dist/lib/locale.cjs.js +2 -0
- package/dist/lib/locale.cjs.js.map +1 -0
- package/dist/lib/locale.d.ts +4 -0
- package/dist/lib/locale.es.js +19 -0
- package/dist/lib/locale.es.js.map +1 -0
- package/dist/lib/localeTextMap.cjs.js +2 -0
- package/dist/lib/localeTextMap.cjs.js.map +1 -0
- package/dist/lib/localeTextMap.d.ts +4 -0
- package/dist/lib/localeTextMap.es.js +5 -0
- package/dist/lib/localeTextMap.es.js.map +1 -0
- package/dist/markdown-flow-ui-lib.css +1 -1
- package/dist/node_modules/@braintree/sanitize-url/dist/index.cjs.js +1 -1
- package/dist/node_modules/@braintree/sanitize-url/dist/index.es.js +1 -1
- package/dist/node_modules/classnames/index.cjs.js +1 -1
- package/dist/node_modules/classnames/index.es.js +1 -1
- package/dist/renderer.cjs.js +1 -1
- package/dist/renderer.d.ts +1 -0
- package/dist/renderer.es.js +15 -14
- package/dist/renderer.es.js.map +1 -1
- package/dist/slide.d.ts +1 -0
- package/package.json +1 -1
- package/dist/components/Slide/constants.cjs.js +0 -2
- package/dist/components/Slide/constants.cjs.js.map +0 -1
- package/dist/components/Slide/constants.es.js +0 -28
- 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';
|
|
@@ -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"),
|
|
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
|
|
3
|
-
import { Button as
|
|
4
|
-
import { Checkbox as
|
|
5
|
-
import
|
|
6
|
-
import { InputGroup as
|
|
7
|
-
import { cn as
|
|
8
|
-
|
|
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:
|
|
13
|
-
confirmButtonText:
|
|
14
|
-
handleCheckboxChange:
|
|
15
|
-
handleInputChange:
|
|
16
|
-
handleKeyDown:
|
|
17
|
-
handleConfirmClick:
|
|
13
|
+
inputValue: n,
|
|
14
|
+
confirmButtonText: a,
|
|
15
|
+
handleCheckboxChange: c,
|
|
16
|
+
handleInputChange: f,
|
|
17
|
+
handleKeyDown: g,
|
|
18
|
+
handleConfirmClick: p
|
|
18
19
|
}) => {
|
|
19
|
-
const
|
|
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:
|
|
23
|
+
className: D(
|
|
23
24
|
"multi-select-confirm-wrapper flex flex-col items-center",
|
|
24
|
-
|
|
25
|
-
|
|
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:
|
|
33
|
-
onClick:
|
|
34
|
-
children:
|
|
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((
|
|
41
|
-
const
|
|
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
|
-
|
|
44
|
+
O,
|
|
44
45
|
{
|
|
45
|
-
label:
|
|
46
|
+
label: h,
|
|
46
47
|
disabled: r,
|
|
47
|
-
checked: l.includes(
|
|
48
|
-
onCheckedChange: (
|
|
48
|
+
checked: l.includes(u),
|
|
49
|
+
onCheckedChange: (j) => c(u, j),
|
|
49
50
|
className: "text-sm"
|
|
50
51
|
},
|
|
51
|
-
|
|
52
|
+
b
|
|
52
53
|
);
|
|
53
54
|
}) }),
|
|
54
|
-
|
|
55
|
-
/* @__PURE__ */ s.jsx(
|
|
56
|
-
|
|
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:
|
|
60
|
-
value:
|
|
61
|
-
onChange:
|
|
62
|
-
onKeyDown:
|
|
60
|
+
placeholder: m,
|
|
61
|
+
value: n,
|
|
62
|
+
onChange: f,
|
|
63
|
+
onKeyDown: g,
|
|
63
64
|
className: "text-sm px-3",
|
|
64
|
-
title:
|
|
65
|
+
title: m
|
|
65
66
|
}
|
|
66
67
|
) }),
|
|
67
|
-
|
|
68
|
-
] }) }) :
|
|
68
|
+
i("shrink-0")
|
|
69
|
+
] }) }) : i("self-start multi-select-confirm-wrapper--stacked")
|
|
69
70
|
] });
|
|
70
|
-
},
|
|
71
|
+
}, A = ({
|
|
71
72
|
node: e,
|
|
72
73
|
readonly: r,
|
|
73
|
-
|
|
74
|
-
|
|
74
|
+
locale: l,
|
|
75
|
+
resolvedDefaultButtonText: n,
|
|
76
|
+
handleButtonClick: a,
|
|
75
77
|
inputValue: c,
|
|
76
|
-
handleInputChange:
|
|
77
|
-
handleSendClick:
|
|
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,
|
|
80
|
-
const
|
|
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
|
-
|
|
84
|
+
L,
|
|
83
85
|
{
|
|
84
86
|
disabled: r,
|
|
85
87
|
variant: "outline",
|
|
86
88
|
type: "button",
|
|
87
89
|
size: "sm",
|
|
88
|
-
onClick: () =>
|
|
89
|
-
className:
|
|
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
|
-
|
|
94
|
+
n === p && "select"
|
|
93
95
|
),
|
|
94
96
|
children: p
|
|
95
97
|
},
|
|
96
|
-
|
|
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
|
-
|
|
102
|
+
M,
|
|
101
103
|
{
|
|
102
104
|
disabled: r,
|
|
105
|
+
locale: l,
|
|
103
106
|
placeholder: e.properties.placeholder,
|
|
104
107
|
value: c,
|
|
105
|
-
onChange:
|
|
106
|
-
onSend:
|
|
108
|
+
onChange: f,
|
|
109
|
+
onSend: g,
|
|
107
110
|
title: e.properties.placeholder
|
|
108
111
|
}
|
|
109
112
|
) })
|
|
110
|
-
] }),
|
|
113
|
+
] }), H = ({
|
|
111
114
|
readonly: e,
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
+
locale: r,
|
|
116
|
+
placeholder: l,
|
|
117
|
+
value: n,
|
|
118
|
+
onChange: a,
|
|
115
119
|
onSend: c
|
|
116
|
-
}) =>
|
|
117
|
-
|
|
120
|
+
}) => l ? /* @__PURE__ */ s.jsx(
|
|
121
|
+
M,
|
|
118
122
|
{
|
|
119
123
|
disabled: e,
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
124
|
+
locale: r,
|
|
125
|
+
placeholder: l,
|
|
126
|
+
value: n,
|
|
127
|
+
onChange: a,
|
|
123
128
|
onSend: c,
|
|
124
|
-
title:
|
|
129
|
+
title: l
|
|
125
130
|
}
|
|
126
|
-
) : null,
|
|
131
|
+
) : null, ee = ({
|
|
127
132
|
node: e,
|
|
128
133
|
readonly: r,
|
|
129
|
-
|
|
130
|
-
|
|
134
|
+
locale: l,
|
|
135
|
+
defaultButtonText: n,
|
|
136
|
+
defaultInputText: a,
|
|
131
137
|
defaultSelectedValues: c,
|
|
132
|
-
onSend:
|
|
133
|
-
confirmButtonText:
|
|
134
|
-
// Default to English, can be overridden
|
|
138
|
+
onSend: f,
|
|
139
|
+
confirmButtonText: g,
|
|
135
140
|
beforeSend: p = () => !0
|
|
136
141
|
}) => {
|
|
137
|
-
const [
|
|
142
|
+
const m = U(l), x = g || m.confirmButtonText, [i, h] = d.useState(a || ""), [b, v] = d.useState(
|
|
138
143
|
c || []
|
|
139
|
-
),
|
|
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: [
|
|
144
|
-
buttonValues: [
|
|
148
|
+
buttonTexts: [C],
|
|
149
|
+
buttonValues: [C]
|
|
145
150
|
}
|
|
146
|
-
} : e, [
|
|
147
|
-
const
|
|
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?.(
|
|
152
|
-
},
|
|
153
|
-
|
|
154
|
-
},
|
|
155
|
-
const t =
|
|
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:
|
|
158
|
-
inputText:
|
|
162
|
+
selectedValues: b,
|
|
163
|
+
inputText: i?.trim() || void 0
|
|
159
164
|
};
|
|
160
|
-
r || t || p?.(
|
|
161
|
-
},
|
|
162
|
-
|
|
163
|
-
},
|
|
164
|
-
t.nativeEvent.isComposing || t.keyCode === 229 || t.key === "Enter" && !t.shiftKey && (t.preventDefault(),
|
|
165
|
-
},
|
|
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:
|
|
173
|
+
inputText: i
|
|
169
174
|
};
|
|
170
|
-
p?.(t) &&
|
|
171
|
-
},
|
|
172
|
-
if (!
|
|
175
|
+
p?.(t) && f?.(t);
|
|
176
|
+
}, F = d.useMemo(() => {
|
|
177
|
+
if (!n)
|
|
173
178
|
return;
|
|
174
|
-
const t =
|
|
179
|
+
const t = B.indexOf(n);
|
|
175
180
|
if (t > -1)
|
|
176
|
-
return N[t] ??
|
|
177
|
-
const
|
|
178
|
-
if (
|
|
179
|
-
return N[
|
|
180
|
-
}, [
|
|
181
|
-
return
|
|
182
|
-
|
|
183
|
-
}, [
|
|
184
|
-
|
|
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
|
-
|
|
187
|
-
|
|
191
|
+
u && /* @__PURE__ */ s.jsx(
|
|
192
|
+
q,
|
|
188
193
|
{
|
|
189
194
|
node: e,
|
|
190
195
|
readonly: r,
|
|
191
|
-
selectedValues:
|
|
192
|
-
inputValue:
|
|
193
|
-
confirmButtonText:
|
|
194
|
-
handleCheckboxChange:
|
|
195
|
-
handleInputChange:
|
|
196
|
-
handleKeyDown:
|
|
197
|
-
handleConfirmClick:
|
|
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
|
-
!
|
|
201
|
-
|
|
205
|
+
!u && V && /* @__PURE__ */ s.jsx(
|
|
206
|
+
A,
|
|
202
207
|
{
|
|
203
|
-
node:
|
|
208
|
+
node: k,
|
|
204
209
|
readonly: r,
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
+
locale: l,
|
|
211
|
+
resolvedDefaultButtonText: F,
|
|
212
|
+
handleButtonClick: E,
|
|
213
|
+
inputValue: i,
|
|
214
|
+
handleInputChange: w,
|
|
215
|
+
handleSendClick: S
|
|
210
216
|
}
|
|
211
217
|
),
|
|
212
|
-
!
|
|
213
|
-
|
|
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:
|
|
218
|
-
onChange:
|
|
219
|
-
onSend:
|
|
224
|
+
value: i,
|
|
225
|
+
onChange: w,
|
|
226
|
+
onSend: S
|
|
220
227
|
}
|
|
221
228
|
)
|
|
222
229
|
] });
|
|
223
230
|
};
|
|
224
231
|
export {
|
|
225
|
-
|
|
232
|
+
ee as default
|
|
226
233
|
};
|
|
227
234
|
//# sourceMappingURL=CustomVariable.es.js.map
|