@bikdotai/bik-component-library 0.0.839 → 0.0.840-beta.0
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/cjs/components/SearchFilter/index.js +1 -1
- package/dist/cjs/components/SearchFilter/index.js.map +1 -1
- package/dist/cjs/components/agent-builder/AgentBuilder.js +1 -1
- package/dist/cjs/components/agent-builder/AgentBuilder.js.map +1 -1
- package/dist/cjs/components/agent-builder/AgentBuilder.styled.js +51 -39
- package/dist/cjs/components/agent-builder/AgentBuilder.styled.js.map +1 -1
- package/dist/cjs/components/agent-builder/components/AgentBuilderFooter.js +1 -1
- package/dist/cjs/components/agent-builder/components/AgentBuilderFooter.js.map +1 -1
- package/dist/cjs/components/agent-builder/components/AgentBuilderTopBar.js +1 -1
- package/dist/cjs/components/agent-builder/components/AgentBuilderTopBar.js.map +1 -1
- package/dist/cjs/components/agent-builder/components/ConfigToolPanel.js +2 -2
- package/dist/cjs/components/agent-builder/components/ConfigToolPanel.js.map +1 -1
- package/dist/cjs/components/agent-builder/components/CreateSubAgentPanel.js +1 -1
- package/dist/cjs/components/agent-builder/components/CreateSubAgentPanel.js.map +1 -1
- package/dist/cjs/components/agent-builder/components/DiscardModal.js +1 -1
- package/dist/cjs/components/agent-builder/components/DiscardModal.js.map +1 -1
- package/dist/cjs/components/agent-builder/components/GoLiveModal.js +1 -1
- package/dist/cjs/components/agent-builder/components/GoLiveModal.js.map +1 -1
- package/dist/cjs/components/agent-builder/components/MentionEditor.js +1 -1
- package/dist/cjs/components/agent-builder/components/MentionEditor.js.map +1 -1
- package/dist/cjs/components/agent-builder/components/MentionPicker.js +22 -22
- package/dist/cjs/components/agent-builder/components/MentionPicker.js.map +1 -1
- package/dist/cjs/components/agent-builder/components/RestApiToolPanel.js +4 -4
- package/dist/cjs/components/agent-builder/components/RestApiToolPanel.js.map +1 -1
- package/dist/cjs/components/agent-builder/components/SelectableListSection.js +6 -6
- package/dist/cjs/components/agent-builder/components/SelectableListSection.js.map +1 -1
- package/dist/cjs/components/agent-builder/components/StepSectionHeader.js +1 -1
- package/dist/cjs/components/agent-builder/components/StepSectionHeader.js.map +1 -1
- package/dist/cjs/components/agent-builder/constants/tools.js +1 -1
- package/dist/cjs/components/agent-builder/constants/tools.js.map +1 -1
- package/dist/cjs/components/agent-builder/context/AgentBuilderContext.js +1 -1
- package/dist/cjs/components/agent-builder/context/AgentBuilderContext.js.map +1 -1
- package/dist/cjs/components/agent-builder/steps/Step2WhenItStepsIn.js +3 -1
- package/dist/cjs/components/agent-builder/steps/Step2WhenItStepsIn.js.map +1 -1
- package/dist/cjs/components/agent-builder/steps/Step3HowItResponds.js +1 -1
- package/dist/cjs/components/agent-builder/steps/Step3HowItResponds.js.map +1 -1
- package/dist/cjs/components/agent-builder/steps/Step4HandoverRules.js +1 -1
- package/dist/cjs/components/agent-builder/steps/Step4HandoverRules.js.map +1 -1
- package/dist/cjs/components/agent-builder/utils/mentionSerialization.js +5 -3
- package/dist/cjs/components/agent-builder/utils/mentionSerialization.js.map +1 -1
- package/dist/cjs/components/agent-listing/AgentListing.js +1 -1
- package/dist/cjs/components/agent-listing/AgentListing.js.map +1 -1
- package/dist/cjs/components/agent-listing/AgentTable.js +1 -1
- package/dist/cjs/components/agent-listing/AgentTable.js.map +1 -1
- package/dist/cjs/components/agent-listing/AgentTableRow.js +1 -1
- package/dist/cjs/components/agent-listing/AgentTableRow.js.map +1 -1
- package/dist/cjs/components/agent-listing/AgentTableShimmer.js +2 -0
- package/dist/cjs/components/agent-listing/AgentTableShimmer.js.map +1 -0
- package/dist/cjs/components/agent-listing/DeleteAgentModal.js +1 -1
- package/dist/cjs/components/agent-listing/DeleteAgentModal.js.map +1 -1
- package/dist/cjs/components/analytics-chips-and-dropdowns/AnalyticsChip.js +1 -1
- package/dist/cjs/components/analytics-chips-and-dropdowns/AnalyticsChip.js.map +1 -1
- package/dist/cjs/components/button/Button.styled.js +1 -0
- package/dist/cjs/components/button/Button.styled.js.map +1 -1
- package/dist/cjs/components/dashboard-review-popup/DashboardReviewPopUp.js +1 -1
- package/dist/cjs/components/dashboard-review-popup/DashboardReviewPopUp.js.map +1 -1
- package/dist/cjs/components/dropdown/Dropdown.js +1 -1
- package/dist/cjs/components/dropdown/Dropdown.js.map +1 -1
- package/dist/cjs/components/input/Input.js +1 -1
- package/dist/cjs/components/input/Input.js.map +1 -1
- package/dist/cjs/components/multi-level-dropdown/MenuItem.js +1 -1
- package/dist/cjs/components/multi-level-dropdown/MenuItem.js.map +1 -1
- package/dist/cjs/components/radioButton/RadioButton.js +1 -1
- package/dist/cjs/components/radioButton/RadioButton.js.map +1 -1
- package/dist/cjs/components/radioList/RadioList.js +1 -1
- package/dist/cjs/components/radioList/RadioList.js.map +1 -1
- package/dist/cjs/components/searchBar/searchBar.js +1 -1
- package/dist/cjs/components/searchBar/searchBar.js.map +1 -1
- package/dist/cjs/components/side-modal/SideModal.js +1 -1
- package/dist/cjs/components/side-modal/SideModal.js.map +1 -1
- package/dist/cjs/components/star-rating/Star.js +1 -1
- package/dist/cjs/components/star-rating/Star.js.map +1 -1
- package/dist/cjs/components/star-rating/StarRating.js +2 -2
- package/dist/cjs/components/star-rating/StarRating.js.map +1 -1
- package/dist/cjs/components/template-preview/TemplatePreview.js +1 -1
- package/dist/cjs/components/template-preview/TemplatePreview.js.map +1 -1
- package/dist/cjs/components/thumbnail/Thumbnail.js +1 -1
- package/dist/cjs/components/thumbnail/Thumbnail.js.map +1 -1
- package/dist/cjs/components/zeroState/ZeroState.js +3 -3
- package/dist/cjs/components/zeroState/ZeroState.js.map +1 -1
- package/dist/cjs/editor/BikEditor.js +1 -1
- package/dist/cjs/editor/BikEditor.js.map +1 -1
- package/dist/cjs/editor/BikEditor.styles.js +97 -54
- package/dist/cjs/editor/BikEditor.styles.js.map +1 -1
- package/dist/cjs/editor/extensions/jsonHighlight/JsonHighlightExtension.js +3 -3
- package/dist/cjs/editor/extensions/jsonHighlight/JsonHighlightExtension.js.map +1 -1
- package/dist/esm/components/SearchFilter/index.js +11 -10
- package/dist/esm/components/SearchFilter/index.js.map +1 -1
- package/dist/esm/components/agent-builder/AgentBuilder.js +106 -102
- package/dist/esm/components/agent-builder/AgentBuilder.js.map +1 -1
- package/dist/esm/components/agent-builder/AgentBuilder.styled.d.ts +3 -6
- package/dist/esm/components/agent-builder/AgentBuilder.styled.js +118 -106
- package/dist/esm/components/agent-builder/AgentBuilder.styled.js.map +1 -1
- package/dist/esm/components/agent-builder/__fixtures__/agentValue.d.ts +11 -0
- package/dist/esm/components/agent-builder/components/AgentBuilderFooter.js +29 -21
- package/dist/esm/components/agent-builder/components/AgentBuilderFooter.js.map +1 -1
- package/dist/esm/components/agent-builder/components/AgentBuilderTopBar.js +27 -26
- package/dist/esm/components/agent-builder/components/AgentBuilderTopBar.js.map +1 -1
- package/dist/esm/components/agent-builder/components/ConfigToolPanel.js +25 -25
- package/dist/esm/components/agent-builder/components/ConfigToolPanel.js.map +1 -1
- package/dist/esm/components/agent-builder/components/CreateSubAgentPanel.js +24 -23
- package/dist/esm/components/agent-builder/components/CreateSubAgentPanel.js.map +1 -1
- package/dist/esm/components/agent-builder/components/DiscardModal.d.ts +3 -1
- package/dist/esm/components/agent-builder/components/DiscardModal.js +33 -24
- package/dist/esm/components/agent-builder/components/DiscardModal.js.map +1 -1
- package/dist/esm/components/agent-builder/components/GoLiveModal.js +23 -21
- package/dist/esm/components/agent-builder/components/GoLiveModal.js.map +1 -1
- package/dist/esm/components/agent-builder/components/MentionEditor.js +19 -19
- package/dist/esm/components/agent-builder/components/MentionEditor.js.map +1 -1
- package/dist/esm/components/agent-builder/components/MentionPicker.js +177 -147
- package/dist/esm/components/agent-builder/components/MentionPicker.js.map +1 -1
- package/dist/esm/components/agent-builder/components/RestApiToolPanel.d.ts +2 -0
- package/dist/esm/components/agent-builder/components/RestApiToolPanel.js +111 -105
- package/dist/esm/components/agent-builder/components/RestApiToolPanel.js.map +1 -1
- package/dist/esm/components/agent-builder/components/SelectableListSection.d.ts +13 -4
- package/dist/esm/components/agent-builder/components/SelectableListSection.js +173 -148
- package/dist/esm/components/agent-builder/components/SelectableListSection.js.map +1 -1
- package/dist/esm/components/agent-builder/components/StepSectionHeader.js +7 -7
- package/dist/esm/components/agent-builder/components/StepSectionHeader.js.map +1 -1
- package/dist/esm/components/agent-builder/constants/tools.js +1 -1
- package/dist/esm/components/agent-builder/constants/tools.js.map +1 -1
- package/dist/esm/components/agent-builder/context/AgentBuilderContext.js +104 -103
- package/dist/esm/components/agent-builder/context/AgentBuilderContext.js.map +1 -1
- package/dist/esm/components/agent-builder/steps/Step2WhenItStepsIn.js +101 -102
- package/dist/esm/components/agent-builder/steps/Step2WhenItStepsIn.js.map +1 -1
- package/dist/esm/components/agent-builder/steps/Step3HowItResponds.js +144 -142
- package/dist/esm/components/agent-builder/steps/Step3HowItResponds.js.map +1 -1
- package/dist/esm/components/agent-builder/steps/Step4HandoverRules.js +23 -79
- package/dist/esm/components/agent-builder/steps/Step4HandoverRules.js.map +1 -1
- package/dist/esm/components/agent-builder/utils/mentionSerialization.js +35 -23
- package/dist/esm/components/agent-builder/utils/mentionSerialization.js.map +1 -1
- package/dist/esm/components/agent-listing/AgentListing.js +70 -65
- package/dist/esm/components/agent-listing/AgentListing.js.map +1 -1
- package/dist/esm/components/agent-listing/AgentTable.d.ts +2 -0
- package/dist/esm/components/agent-listing/AgentTable.js +16 -15
- package/dist/esm/components/agent-listing/AgentTable.js.map +1 -1
- package/dist/esm/components/agent-listing/AgentTableRow.js +11 -11
- package/dist/esm/components/agent-listing/AgentTableRow.js.map +1 -1
- package/dist/esm/components/agent-listing/AgentTableShimmer.d.ts +12 -0
- package/dist/esm/components/agent-listing/AgentTableShimmer.js +20 -0
- package/dist/esm/components/agent-listing/AgentTableShimmer.js.map +1 -0
- package/dist/esm/components/agent-listing/DeleteAgentModal.js +8 -8
- package/dist/esm/components/agent-listing/DeleteAgentModal.js.map +1 -1
- package/dist/esm/components/agent-listing/__fixtures__/agents.d.ts +3 -0
- package/dist/esm/components/analytics-chips-and-dropdowns/AnalyticsChip.js +11 -10
- package/dist/esm/components/analytics-chips-and-dropdowns/AnalyticsChip.js.map +1 -1
- package/dist/esm/components/button/Button.styled.js +25 -19
- package/dist/esm/components/button/Button.styled.js.map +1 -1
- package/dist/esm/components/dashboard-review-popup/DashboardReviewPopUp.js +28 -21
- package/dist/esm/components/dashboard-review-popup/DashboardReviewPopUp.js.map +1 -1
- package/dist/esm/components/dropdown/Dropdown.js +18 -13
- package/dist/esm/components/dropdown/Dropdown.js.map +1 -1
- package/dist/esm/components/input/Input.js +35 -34
- package/dist/esm/components/input/Input.js.map +1 -1
- package/dist/esm/components/input/Input.model.d.ts +1 -0
- package/dist/esm/components/multi-level-dropdown/MenuItem.js +28 -27
- package/dist/esm/components/multi-level-dropdown/MenuItem.js.map +1 -1
- package/dist/esm/components/radioButton/RadioButton.js +10 -9
- package/dist/esm/components/radioButton/RadioButton.js.map +1 -1
- package/dist/esm/components/radioList/RadioList.js +28 -19
- package/dist/esm/components/radioList/RadioList.js.map +1 -1
- package/dist/esm/components/searchBar/searchBar.js +11 -10
- package/dist/esm/components/searchBar/searchBar.js.map +1 -1
- package/dist/esm/components/side-modal/SideModal.js +13 -5
- package/dist/esm/components/side-modal/SideModal.js.map +1 -1
- package/dist/esm/components/star-rating/Star.d.ts +1 -0
- package/dist/esm/components/star-rating/Star.js +32 -27
- package/dist/esm/components/star-rating/Star.js.map +1 -1
- package/dist/esm/components/star-rating/StarRating.js +17 -16
- package/dist/esm/components/star-rating/StarRating.js.map +1 -1
- package/dist/esm/components/template-preview/TemplatePreview.js +41 -40
- package/dist/esm/components/template-preview/TemplatePreview.js.map +1 -1
- package/dist/esm/components/thumbnail/Thumbnail.js +3 -3
- package/dist/esm/components/thumbnail/Thumbnail.js.map +1 -1
- package/dist/esm/components/zeroState/ZeroState.js +20 -13
- package/dist/esm/components/zeroState/ZeroState.js.map +1 -1
- package/dist/esm/editor/BikEditor.js +173 -160
- package/dist/esm/editor/BikEditor.js.map +1 -1
- package/dist/esm/editor/BikEditor.styles.d.ts +20 -3
- package/dist/esm/editor/BikEditor.styles.js +102 -57
- package/dist/esm/editor/BikEditor.styles.js.map +1 -1
- package/dist/esm/editor/extensions/jsonHighlight/JsonHighlightExtension.d.ts +5 -8
- package/dist/esm/editor/extensions/jsonHighlight/JsonHighlightExtension.js +87 -68
- package/dist/esm/editor/extensions/jsonHighlight/JsonHighlightExtension.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
2
|
-
`)
|
|
3
|
-
`)
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const h=require("../../../node_modules/@tiptap/core/dist/index.js"),l=require("@tiptap/pm/state"),d=require("@tiptap/pm/view"),g=require("./tokenizeJson.js"),p={key:"bik-json-key",string:"bik-json-string",number:"bik-json-number",boolean:"bik-json-boolean",null:"bik-json-null",punctuation:"bik-json-punct"};function f(r){return r.trim().length===0?0:r.split(`
|
|
2
|
+
`).length}class m{dom;contentDOM;gutter;constructor(n){const t=document.createElement("pre"),e=document.createElement("div");e.className="bik-json-gutter",e.contentEditable="false";const o=document.createElement("code");t.appendChild(e),t.appendChild(o),this.dom=t,this.contentDOM=o,this.gutter=e,this.renderGutter(n)}renderGutter(n){const t=f(n.textContent);if(this.gutter.childElementCount===t)return;const e=[];for(let o=1;o<=t;o++){const s=document.createElement("span");s.className="bik-json-lineno",s.textContent=String(o),e.push(s)}this.gutter.replaceChildren(...e)}update(n){return n.type.name!=="codeBlock"?!1:(this.renderGutter(n),!0)}ignoreMutation(n){return this.gutter===n.target||this.gutter.contains(n.target)}}const k=h.Extension.create({name:"jsonHighlight",priority:1e3,addKeyboardShortcuts(){return{Backspace:()=>{const{selection:r}=this.editor.state,{empty:n,$from:t}=r;return n&&t.parent.type.name==="codeBlock"&&t.parentOffset===0}}},addProseMirrorPlugins(){return[new l.Plugin({key:new l.PluginKey("jsonHighlightGuard"),appendTransaction(r,n,t){if(!r.some(u=>u.docChanged))return null;const{doc:e,schema:o}=t,s=o.nodes.codeBlock;if(!s||e.childCount===1&&e.firstChild?.type===s)return null;let i=!1;if(e.forEach(u=>{u.type===s&&(i=!0)}),i)return null;const a=e.textBetween(0,e.content.size,`
|
|
3
|
+
`),c=t.tr;return c.replaceWith(0,e.content.size,s.create(null,a?o.text(a):null)),c.setSelection(l.TextSelection.create(c.doc,1)),c}}),new l.Plugin({key:new l.PluginKey("jsonHighlight"),props:{nodeViews:{codeBlock:r=>new m(r)},handlePaste(r,n){const t=n.clipboardData?.getData("text/plain");if(!t||!t.trim())return!1;let e;try{e=JSON.parse(t)}catch{return!1}const o=JSON.stringify(e,null,2);if(o===t)return!1;const{state:s,dispatch:i}=r,{from:a,to:c}=s.selection;return i(s.tr.insertText(o,a,c).scrollIntoView()),!0},decorations(r){const n=[];return r.doc.descendants((t,e)=>{if(t.type.name!=="codeBlock")return;const o=t.textContent;if(o.length===0)return;const s=e+1;for(const i of g.tokenizeJson(o))n.push(d.Decoration.inline(s+i.start,s+i.end,{class:p[i.type]}))}),d.DecorationSet.create(r.doc,n)}}})]}});exports.JsonHighlightExtension=k;
|
|
4
4
|
//# sourceMappingURL=JsonHighlightExtension.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JsonHighlightExtension.js","sources":["../../../../../src/editor/extensions/jsonHighlight/JsonHighlightExtension.ts"],"sourcesContent":["import { Extension } from '@tiptap/core';\nimport { Plugin, PluginKey, TextSelection } from '@tiptap/pm/state';\nimport { Decoration, DecorationSet } from '@tiptap/pm/view';\nimport { JsonTokenType, tokenizeJson } from './tokenizeJson';\n\nconst CLASS_BY_TYPE: Record<JsonTokenType, string> = {\n\tkey: 'bik-json-key',\n\tstring: 'bik-json-string',\n\tnumber: 'bik-json-number',\n\tboolean: 'bik-json-boolean',\n\tnull: 'bik-json-null',\n\tpunctuation: 'bik-json-punct',\n};\n\n/** Line-number widget rendered in the hanging gutter at each line start. */\nfunction lineNumberWidget(n: number): HTMLElement {\n\tconst span = document.createElement('span');\n\tspan.className = 'bik-json-lineno';\n\tspan.textContent = String(n);\n\tspan.setAttribute('contenteditable', 'false');\n\treturn span;\n}\n\n/**\n * Colours JSON tokens inside `codeBlock` nodes and renders a line-number gutter.\n * A code block stores its whole multi-line body in a single text node, so token\n * offsets map 1:1 onto document positions (`nodeStart + offset`) — no cross-node\n * bookkeeping needed, and lines are just the `\\n`-separated runs of that text.\n *\n * Purely decorative: the document text is never rewritten, so undo/redo,\n * character count and the cursor all behave exactly as with plain text. The\n * gutter numbers are `side: -1` widgets that hang into the code block's left\n * padding (see `.bik-json-lineno` in BikEditor.styles.ts), so they never enter\n * the document text or shift character offsets.\n */\nexport const JsonHighlightExtension = Extension.create({\n\tname: 'jsonHighlight',\n\t// Above CodeBlock (default 100) so our Backspace handler runs first and can\n\t// veto CodeBlock's own \"clearNodes at start\" shortcut (which would lift the\n\t// block to a paragraph).\n\tpriority: 1000,\n\taddKeyboardShortcuts() {\n\t\treturn {\n\t\t\t// In JSON mode the document is a single code block. A Backspace at its very\n\t\t\t// start would lift it to a plain paragraph (killing the highlight, the\n\t\t\t// line-number gutter and the monospace font). There's nothing to delete\n\t\t\t// before the caret there anyway, so swallow it. Mid-text Backspace (and\n\t\t\t// deleting a leading `\\n` from line 2+) still works — those have\n\t\t\t// parentOffset > 0.\n\t\t\tBackspace: () => {\n\t\t\t\tconst { selection } = this.editor.state;\n\t\t\t\tconst { empty, $from } = selection;\n\t\t\t\treturn (\n\t\t\t\t\tempty &&\n\t\t\t\t\t$from.parent.type.name === 'codeBlock' &&\n\t\t\t\t\t$from.parentOffset === 0\n\t\t\t\t);\n\t\t\t},\n\t\t};\n\t},\n\taddProseMirrorPlugins() {\n\t\treturn [\n\t\t\tnew Plugin({\n\t\t\t\tkey: new PluginKey('jsonHighlightGuard'),\n\t\t\t\t// jsonMode invariant: the whole document is ONE codeBlock. Several\n\t\t\t\t// default Backspace paths can lift it to a plain paragraph — and one\n\t\t\t\t// of them, TipTap core's `clearDocument` appendTransaction (fired when\n\t\t\t\t// the whole doc is selected then deleted, e.g. Cmd-A → Backspace),\n\t\t\t\t// runs AFTER our Backspace shortcut, so a keymap veto can't stop it.\n\t\t\t\t// A paragraph has no gutter and no monospace rule, so the line numbers\n\t\t\t\t// and font vanish. Re-wrap the content back into a codeBlock whenever\n\t\t\t\t// something lifts it, restoring the invariant.\n\t\t\t\tappendTransaction(transactions, _oldState, newState) {\n\t\t\t\t\tif (!transactions.some((tr) => tr.docChanged)) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t\tconst { doc, schema } = newState;\n\t\t\t\t\tconst codeBlock = schema.nodes['codeBlock'];\n\t\t\t\t\tif (!codeBlock) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t\t// Common case: already a single codeBlock → nothing to do.\n\t\t\t\t\tif (doc.childCount === 1 && doc.firstChild?.type === codeBlock) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t\t// If a codeBlock survives anywhere, leave it alone (don't fight\n\t\t\t\t\t// legitimate multi-node edits that shouldn't happen in jsonMode).\n\t\t\t\t\tlet hasCodeBlock = false;\n\t\t\t\t\tdoc.forEach((node) => {\n\t\t\t\t\t\tif (node.type === codeBlock) {\n\t\t\t\t\t\t\thasCodeBlock = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tif (hasCodeBlock) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t\t// A lift happened: rebuild a single codeBlock from the text\n\t\t\t\t\t// (block boundaries preserved as newlines, matching JSON lines).\n\t\t\t\t\tconst text = doc.textBetween(0, doc.content.size, '\\n');\n\t\t\t\t\tconst tr = newState.tr;\n\t\t\t\t\ttr.replaceWith(\n\t\t\t\t\t\t0,\n\t\t\t\t\t\tdoc.content.size,\n\t\t\t\t\t\tcodeBlock.create(null, text ? schema.text(text) : null),\n\t\t\t\t\t);\n\t\t\t\t\ttr.setSelection(TextSelection.create(tr.doc, 1));\n\t\t\t\t\treturn tr;\n\t\t\t\t},\n\t\t\t}),\n\t\t\tnew Plugin({\n\t\t\t\tkey: new PluginKey('jsonHighlight'),\n\t\t\t\tprops: {\n\t\t\t\t\t// Paste beautify: if the clipboard text is valid JSON, drop in a\n\t\t\t\t\t// pretty-printed version (2-space indent, matching the Beautify\n\t\t\t\t\t// button) instead of the raw blob. Non-JSON pastes fall through to\n\t\t\t\t\t// the default handler untouched.\n\t\t\t\t\thandlePaste(view, event) {\n\t\t\t\t\t\tconst raw = event.clipboardData?.getData('text/plain');\n\t\t\t\t\t\tif (!raw || !raw.trim()) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet value: unknown;\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tvalue = JSON.parse(raw);\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst pretty = JSON.stringify(value, null, 2);\n\t\t\t\t\t\t// No-op if it was already beautified (avoids a redundant tx).\n\t\t\t\t\t\tif (pretty === raw) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst { state, dispatch } = view;\n\t\t\t\t\t\tconst { from, to } = state.selection;\n\t\t\t\t\t\tdispatch(state.tr.insertText(pretty, from, to).scrollIntoView());\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t},\n\t\t\t\t\tdecorations(state) {\n\t\t\t\t\t\tconst decorations: Decoration[] = [];\n\t\t\t\t\t\tstate.doc.descendants((node, pos) => {\n\t\t\t\t\t\t\tif (node.type.name !== 'codeBlock') return;\n\t\t\t\t\t\t\tconst text = node.textContent;\n\t\t\t\t\t\t\t// +1: step past the code-block node boundary into its text.\n\t\t\t\t\t\t\tconst base = pos + 1;\n\n\t\t\t\t\t\t\tfor (const tok of tokenizeJson(text)) {\n\t\t\t\t\t\t\t\tdecorations.push(\n\t\t\t\t\t\t\t\t\tDecoration.inline(base + tok.start, base + tok.end, {\n\t\t\t\t\t\t\t\t\t\tclass: CLASS_BY_TYPE[tok.type],\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// One line number per `\\n`-separated line (line 1 at offset 0,\n\t\t\t\t\t\t\t// then one after every newline). `white-space: pre` on the block\n\t\t\t\t\t\t\t// disables wrapping, so logical lines == visual lines.\n\t\t\t\t\t\t\tlet line = 1;\n\t\t\t\t\t\t\tdecorations.push(\n\t\t\t\t\t\t\t\tDecoration.widget(base, () => lineNumberWidget(1), {\n\t\t\t\t\t\t\t\t\tside: -1,\n\t\t\t\t\t\t\t\t\tkey: 'ln-1',\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tfor (let i = 0; i < text.length; i++) {\n\t\t\t\t\t\t\t\tif (text[i] !== '\\n') continue;\n\t\t\t\t\t\t\t\tline += 1;\n\t\t\t\t\t\t\t\tconst n = line;\n\t\t\t\t\t\t\t\tdecorations.push(\n\t\t\t\t\t\t\t\t\tDecoration.widget(base + i + 1, () => lineNumberWidget(n), {\n\t\t\t\t\t\t\t\t\t\tside: -1,\n\t\t\t\t\t\t\t\t\t\tkey: `ln-${n}`,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn DecorationSet.create(state.doc, decorations);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}),\n\t\t];\n\t},\n});\n"],"names":["CLASS_BY_TYPE","lineNumberWidget","n","span","JsonHighlightExtension","Extension","selection","empty","$from","Plugin","PluginKey","transactions","_oldState","newState","tr","doc","schema","codeBlock","hasCodeBlock","node","text","TextSelection","view","event","raw","value","pretty","state","dispatch","from","to","decorations","pos","base","tok","tokenizeJson","Decoration","line","i","DecorationSet"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"JsonHighlightExtension.js","sources":["../../../../../src/editor/extensions/jsonHighlight/JsonHighlightExtension.ts"],"sourcesContent":["import { Extension } from '@tiptap/core';\nimport type { Node as ProseMirrorNode } from '@tiptap/pm/model';\nimport { Plugin, PluginKey, TextSelection } from '@tiptap/pm/state';\nimport type { NodeView } from '@tiptap/pm/view';\nimport { Decoration, DecorationSet } from '@tiptap/pm/view';\nimport { JsonTokenType, tokenizeJson } from './tokenizeJson';\n\nconst CLASS_BY_TYPE: Record<JsonTokenType, string> = {\n\tkey: 'bik-json-key',\n\tstring: 'bik-json-string',\n\tnumber: 'bik-json-number',\n\tboolean: 'bik-json-boolean',\n\tnull: 'bik-json-null',\n\tpunctuation: 'bik-json-punct',\n};\n\n/**\n * Visual line count of a code block's text (0 → no gutter). Whitespace-only\n * content counts as 0: that's exactly when BikEditor shows the placeholder\n * overlay (`jsonEmpty = !text.trim()`), so the gutter must be empty too —\n * otherwise a blank field shows a stray \"1\" behind the placeholder.\n */\nfunction lineCount(text: string): number {\n\treturn text.trim().length === 0 ? 0 : text.split('\\n').length;\n}\n\n/**\n * Node view for the JSON `codeBlock` that renders the line-number gutter as a\n * `contenteditable=false` sibling of the editable `<code>` — NOT as ProseMirror\n * widget decorations.\n *\n * Why: widget decorations are re-inserted into the content flow on every\n * decoration recompute (i.e. every keystroke). Re-inserting a node next to the\n * caret reset the contenteditable selection to the line start, so typing a JSON\n * key and then its `:` dropped the caret to the start of the line (MAP-7286).\n * A node view lets us update the gutter DOM independently of `contentDOM`, so\n * the caret is never touched — and we only rebuild it when the line count\n * actually changes.\n */\nclass JsonCodeBlockView implements NodeView {\n\tdom: HTMLPreElement;\n\tcontentDOM: HTMLElement;\n\tprivate gutter: HTMLElement;\n\n\tconstructor(node: ProseMirrorNode) {\n\t\tconst pre = document.createElement('pre');\n\t\tconst gutter = document.createElement('div');\n\t\tgutter.className = 'bik-json-gutter';\n\t\tgutter.contentEditable = 'false';\n\t\tconst code = document.createElement('code');\n\t\t// Gutter is absolutely positioned into the reserved left padding, so its\n\t\t// order relative to <code> doesn't affect the code layout.\n\t\tpre.appendChild(gutter);\n\t\tpre.appendChild(code);\n\n\t\tthis.dom = pre;\n\t\tthis.contentDOM = code;\n\t\tthis.gutter = gutter;\n\t\tthis.renderGutter(node);\n\t}\n\n\tprivate renderGutter(node: ProseMirrorNode): void {\n\t\tconst count = lineCount(node.textContent);\n\t\t// Nothing to do while the line count is unchanged — this is the common case\n\t\t// (typing within a line) and skipping it avoids touching the gutter DOM.\n\t\tif (this.gutter.childElementCount === count) {\n\t\t\treturn;\n\t\t}\n\t\tconst numbers: HTMLElement[] = [];\n\t\tfor (let n = 1; n <= count; n++) {\n\t\t\tconst span = document.createElement('span');\n\t\t\tspan.className = 'bik-json-lineno';\n\t\t\tspan.textContent = String(n);\n\t\t\tnumbers.push(span);\n\t\t}\n\t\tthis.gutter.replaceChildren(...numbers);\n\t}\n\n\tupdate(node: ProseMirrorNode): boolean {\n\t\tif (node.type.name !== 'codeBlock') {\n\t\t\treturn false;\n\t\t}\n\t\tthis.renderGutter(node);\n\t\treturn true;\n\t}\n\n\t// The gutter is ours to manage — never let ProseMirror parse it as content.\n\tignoreMutation(mutation: MutationRecord | { target: Node }): boolean {\n\t\treturn (\n\t\t\tthis.gutter === mutation.target || this.gutter.contains(mutation.target)\n\t\t);\n\t}\n}\n\n/**\n * Colours JSON tokens inside `codeBlock` nodes and renders a line-number gutter\n * (via {@link JsonCodeBlockView}). A code block stores its whole multi-line body\n * in a single text node, so token offsets map 1:1 onto document positions\n * (`nodeStart + offset`) — no cross-node bookkeeping needed.\n *\n * Purely decorative: the document text is never rewritten, so undo/redo,\n * character count and the cursor all behave exactly as with plain text.\n */\nexport const JsonHighlightExtension = Extension.create({\n\tname: 'jsonHighlight',\n\t// Above CodeBlock (default 100) so our Backspace handler runs first and can\n\t// veto CodeBlock's own \"clearNodes at start\" shortcut (which would lift the\n\t// block to a paragraph).\n\tpriority: 1000,\n\taddKeyboardShortcuts() {\n\t\treturn {\n\t\t\t// In JSON mode the document is a single code block. A Backspace at its very\n\t\t\t// start would lift it to a plain paragraph (killing the highlight, the\n\t\t\t// line-number gutter and the monospace font). There's nothing to delete\n\t\t\t// before the caret there anyway, so swallow it. Mid-text Backspace (and\n\t\t\t// deleting a leading `\\n` from line 2+) still works — those have\n\t\t\t// parentOffset > 0.\n\t\t\tBackspace: () => {\n\t\t\t\tconst { selection } = this.editor.state;\n\t\t\t\tconst { empty, $from } = selection;\n\t\t\t\treturn (\n\t\t\t\t\tempty &&\n\t\t\t\t\t$from.parent.type.name === 'codeBlock' &&\n\t\t\t\t\t$from.parentOffset === 0\n\t\t\t\t);\n\t\t\t},\n\t\t};\n\t},\n\taddProseMirrorPlugins() {\n\t\treturn [\n\t\t\tnew Plugin({\n\t\t\t\tkey: new PluginKey('jsonHighlightGuard'),\n\t\t\t\t// jsonMode invariant: the whole document is ONE codeBlock. Several\n\t\t\t\t// default Backspace paths can lift it to a plain paragraph — and one\n\t\t\t\t// of them, TipTap core's `clearDocument` appendTransaction (fired when\n\t\t\t\t// the whole doc is selected then deleted, e.g. Cmd-A → Backspace),\n\t\t\t\t// runs AFTER our Backspace shortcut, so a keymap veto can't stop it.\n\t\t\t\t// A paragraph has no gutter and no monospace rule, so the line numbers\n\t\t\t\t// and font vanish. Re-wrap the content back into a codeBlock whenever\n\t\t\t\t// something lifts it, restoring the invariant.\n\t\t\t\tappendTransaction(transactions, _oldState, newState) {\n\t\t\t\t\tif (!transactions.some((tr) => tr.docChanged)) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t\tconst { doc, schema } = newState;\n\t\t\t\t\tconst codeBlock = schema.nodes['codeBlock'];\n\t\t\t\t\tif (!codeBlock) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t\t// Common case: already a single codeBlock → nothing to do.\n\t\t\t\t\tif (doc.childCount === 1 && doc.firstChild?.type === codeBlock) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t\t// If a codeBlock survives anywhere, leave it alone (don't fight\n\t\t\t\t\t// legitimate multi-node edits that shouldn't happen in jsonMode).\n\t\t\t\t\tlet hasCodeBlock = false;\n\t\t\t\t\tdoc.forEach((node) => {\n\t\t\t\t\t\tif (node.type === codeBlock) {\n\t\t\t\t\t\t\thasCodeBlock = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tif (hasCodeBlock) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t\t// A lift happened: rebuild a single codeBlock from the text\n\t\t\t\t\t// (block boundaries preserved as newlines, matching JSON lines).\n\t\t\t\t\tconst text = doc.textBetween(0, doc.content.size, '\\n');\n\t\t\t\t\tconst tr = newState.tr;\n\t\t\t\t\ttr.replaceWith(\n\t\t\t\t\t\t0,\n\t\t\t\t\t\tdoc.content.size,\n\t\t\t\t\t\tcodeBlock.create(null, text ? schema.text(text) : null),\n\t\t\t\t\t);\n\t\t\t\t\ttr.setSelection(TextSelection.create(tr.doc, 1));\n\t\t\t\t\treturn tr;\n\t\t\t\t},\n\t\t\t}),\n\t\t\tnew Plugin({\n\t\t\t\tkey: new PluginKey('jsonHighlight'),\n\t\t\t\tprops: {\n\t\t\t\t\t// The gutter is a node view, not a widget decoration — see\n\t\t\t\t\t// JsonCodeBlockView for why (MAP-7286).\n\t\t\t\t\tnodeViews: {\n\t\t\t\t\t\tcodeBlock: (node) => new JsonCodeBlockView(node),\n\t\t\t\t\t},\n\t\t\t\t\t// Paste beautify: if the clipboard text is valid JSON, drop in a\n\t\t\t\t\t// pretty-printed version (2-space indent, matching the Beautify\n\t\t\t\t\t// button) instead of the raw blob. Non-JSON pastes fall through to\n\t\t\t\t\t// the default handler untouched.\n\t\t\t\t\thandlePaste(view, event) {\n\t\t\t\t\t\tconst raw = event.clipboardData?.getData('text/plain');\n\t\t\t\t\t\tif (!raw || !raw.trim()) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet value: unknown;\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tvalue = JSON.parse(raw);\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst pretty = JSON.stringify(value, null, 2);\n\t\t\t\t\t\t// No-op if it was already beautified (avoids a redundant tx).\n\t\t\t\t\t\tif (pretty === raw) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst { state, dispatch } = view;\n\t\t\t\t\t\tconst { from, to } = state.selection;\n\t\t\t\t\t\tdispatch(state.tr.insertText(pretty, from, to).scrollIntoView());\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t},\n\t\t\t\t\t// Inline token colours only. Recolouring an inline span does not\n\t\t\t\t\t// disturb the caret (unlike the old gutter widgets).\n\t\t\t\t\tdecorations(state) {\n\t\t\t\t\t\tconst decorations: Decoration[] = [];\n\t\t\t\t\t\tstate.doc.descendants((node, pos) => {\n\t\t\t\t\t\t\tif (node.type.name !== 'codeBlock') return;\n\t\t\t\t\t\t\tconst text = node.textContent;\n\t\t\t\t\t\t\tif (text.length === 0) return;\n\t\t\t\t\t\t\t// +1: step past the code-block node boundary into its text.\n\t\t\t\t\t\t\tconst base = pos + 1;\n\t\t\t\t\t\t\tfor (const tok of tokenizeJson(text)) {\n\t\t\t\t\t\t\t\tdecorations.push(\n\t\t\t\t\t\t\t\t\tDecoration.inline(base + tok.start, base + tok.end, {\n\t\t\t\t\t\t\t\t\t\tclass: CLASS_BY_TYPE[tok.type],\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn DecorationSet.create(state.doc, decorations);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}),\n\t\t];\n\t},\n});\n"],"names":["CLASS_BY_TYPE","lineCount","text","JsonCodeBlockView","node","pre","gutter","code","count","numbers","n","span","mutation","JsonHighlightExtension","Extension","selection","empty","$from","Plugin","PluginKey","transactions","_oldState","newState","tr","doc","schema","codeBlock","hasCodeBlock","TextSelection","view","event","raw","value","pretty","state","dispatch","from","to","decorations","pos","base","tok","tokenizeJson","Decoration","DecorationSet"],"mappings":"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"}
|
|
@@ -6,13 +6,13 @@ import { FilterType as p } from "./types/SearchFilter.type.js";
|
|
|
6
6
|
import { SearchBar as R } from "../searchBar/searchBar.js";
|
|
7
7
|
const L = ({
|
|
8
8
|
direction: s = "row",
|
|
9
|
-
schema:
|
|
9
|
+
schema: d,
|
|
10
10
|
variant: w,
|
|
11
11
|
onChange: u,
|
|
12
12
|
showSelectedChips: v
|
|
13
13
|
}) => {
|
|
14
14
|
const i = D(
|
|
15
|
-
|
|
15
|
+
d?.filter((e) => e.defaultValue).map(
|
|
16
16
|
(e) => ({
|
|
17
17
|
id: e.id,
|
|
18
18
|
value: e.defaultValue,
|
|
@@ -20,12 +20,12 @@ const L = ({
|
|
|
20
20
|
text: e.text
|
|
21
21
|
})
|
|
22
22
|
) ?? []
|
|
23
|
-
), [x, y] = F([]),
|
|
23
|
+
), [x, y] = F([]), f = d.find(
|
|
24
24
|
(e) => e.type === p.Search
|
|
25
25
|
), h = (e) => {
|
|
26
|
-
|
|
26
|
+
f && typeof e == "string" && S(f.id, e);
|
|
27
27
|
}, S = (e, l) => {
|
|
28
|
-
const n =
|
|
28
|
+
const n = d.find((t) => t.id === e), a = [...x];
|
|
29
29
|
if (n) {
|
|
30
30
|
const t = a.findIndex((r) => r.id === e);
|
|
31
31
|
t !== -1 ? a[t] = { id: n.id, value: l } : a.push({ id: n.id, value: l }), i.current.find(
|
|
@@ -48,7 +48,7 @@ const L = ({
|
|
|
48
48
|
], u(n.id, i.current, l), y([...a]);
|
|
49
49
|
}
|
|
50
50
|
}, m = (e, l) => {
|
|
51
|
-
const n =
|
|
51
|
+
const n = d.find((t) => t.id === e);
|
|
52
52
|
let a = [...x];
|
|
53
53
|
n && (n.type === p.Multiple ? (a = a.map((t) => {
|
|
54
54
|
if (t.id === e) {
|
|
@@ -82,6 +82,7 @@ const L = ({
|
|
|
82
82
|
/* @__PURE__ */ g(
|
|
83
83
|
"div",
|
|
84
84
|
{
|
|
85
|
+
"data-testid": "search-filter-row",
|
|
85
86
|
style: {
|
|
86
87
|
display: "flex",
|
|
87
88
|
flexDirection: s,
|
|
@@ -90,14 +91,14 @@ const L = ({
|
|
|
90
91
|
alignItems: s === "row" ? "center" : "self-start"
|
|
91
92
|
},
|
|
92
93
|
children: [
|
|
93
|
-
|
|
94
|
+
f && /* @__PURE__ */ c(
|
|
94
95
|
R,
|
|
95
96
|
{
|
|
96
|
-
width:
|
|
97
|
+
width: f.width?.toString() ?? "100%",
|
|
97
98
|
isEnabled: !0,
|
|
98
99
|
onChange: h,
|
|
99
100
|
onEnter: h,
|
|
100
|
-
placeholder:
|
|
101
|
+
placeholder: f.text,
|
|
101
102
|
variant: "small"
|
|
102
103
|
}
|
|
103
104
|
),
|
|
@@ -111,7 +112,7 @@ const L = ({
|
|
|
111
112
|
flexWrap: "wrap",
|
|
112
113
|
alignItems: s === "row" ? "center" : "self-start"
|
|
113
114
|
},
|
|
114
|
-
children:
|
|
115
|
+
children: d.filter((e) => e.type !== p.Search).map((e, l) => /* @__PURE__ */ V(
|
|
115
116
|
E,
|
|
116
117
|
{
|
|
117
118
|
...e,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/SearchFilter/index.tsx"],"sourcesContent":["import React, { useRef, useState } from 'react';\nimport { SingleOption } from '../dropdown/type';\nimport { SearchBar } from '../searchBar';\nimport { FilterChipListRenderer } from './components/FilterChipListRenderer';\nimport { SearchFilterItem } from './components/SearchFilterItem';\nimport {\n\tFilterType,\n\tFilterValueType,\n\tSearchFilterOutputState,\n\tSearchFilterProps,\n} from './types/SearchFilter.type';\n\nexport const SearchFilter: React.FC<SearchFilterProps> = ({\n\tdirection = 'row',\n\tschema,\n\tvariant,\n\tonChange,\n\tshowSelectedChips,\n}) => {\n\t/** this will always have the latest value and all the selected ids */\n\tconst selectedStateRef = useRef<SearchFilterOutputState[]>(\n\t\tschema\n\t\t\t?.filter((filterItem) => filterItem.defaultValue)\n\t\t\t.map(\n\t\t\t\t(filterItem) =>\n\t\t\t\t\t({\n\t\t\t\t\t\tid: filterItem.id,\n\t\t\t\t\t\tvalue: filterItem.defaultValue,\n\t\t\t\t\t\ttype: filterItem.type,\n\t\t\t\t\t\ttext: filterItem.text,\n\t\t\t\t\t} as SearchFilterOutputState),\n\t\t\t) ?? [],\n\t);\n\n\tconst [selectedIds, setSelectedIds] = useState<\n\t\t{ id: string; value: FilterValueType }[]\n\t>([]);\n\n\tconst searchSchema = schema.find(\n\t\t(filterItem) => filterItem.type === FilterType.Search,\n\t);\n\n\tconst onSearchChange = (searchText: string) => {\n\t\tif (searchSchema && typeof searchText === 'string') {\n\t\t\tselect(searchSchema.id, searchText);\n\t\t}\n\t};\n\n\tconst select = (id: string, value: FilterValueType) => {\n\t\tconst selectedSchema = schema.find((schemaItem) => schemaItem.id === id);\n\t\tconst localSelectedIds = [...selectedIds];\n\n\t\tif (selectedSchema) {\n\t\t\tconst idx = localSelectedIds.findIndex((el) => el.id === id);\n\t\t\tif (idx !== -1) {\n\t\t\t\tlocalSelectedIds[idx] = { id: selectedSchema.id, value };\n\t\t\t} else {\n\t\t\t\tlocalSelectedIds.push({ id: selectedSchema.id, value });\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * loop through selectedStateRef.current and if `id` present (1), update the value\n\t\t\t * and if id not present (2), push\n\t\t\t */\n\n\t\t\tconst idPresent = selectedStateRef.current.find(\n\t\t\t\t(selectedSchemaItem) => selectedSchemaItem.id === id,\n\t\t\t);\n\n\t\t\tif (idPresent) {\n\t\t\t\t/** (1) */\n\t\t\t\tselectedStateRef.current = selectedStateRef.current.map(\n\t\t\t\t\t(selectedSchemaItem) => {\n\t\t\t\t\t\tif (selectedSchemaItem.id === id) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tid: selectedSchemaItem.id,\n\t\t\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\t\t\ttype: selectedSchemaItem.type,\n\t\t\t\t\t\t\t\ttext: selectedSchemaItem.text,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn selectedSchemaItem;\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t/** (2) */\n\t\t\t\tselectedStateRef.current = [\n\t\t\t\t\t...selectedStateRef.current,\n\t\t\t\t\t{\n\t\t\t\t\t\tid: id,\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\ttype: selectedSchema.type,\n\t\t\t\t\t\ttext: selectedSchema.text,\n\t\t\t\t\t},\n\t\t\t\t];\n\t\t\t}\n\n\t\t\tonChange(selectedSchema.id, selectedStateRef.current, value);\n\n\t\t\tsetSelectedIds([...localSelectedIds]);\n\t\t}\n\t};\n\n\tconst deSelect = (id: string, value?: FilterValueType) => {\n\t\tconst selectedSchema = schema.find((schemaItem) => schemaItem.id === id);\n\t\tlet localSelectedIds = [...selectedIds];\n\t\tif (selectedSchema) {\n\t\t\t/**\n\t\t\t * only FilterType.Multiple, id can be present in selectedIds and selectedStateRef, so\n\t\t\t * delete id always except for FilterType.Multiple,\n\t\t\t *\n\t\t\t * for FilterType.Multiple,\n\t\t\t * \t\tif value.length === 0, delete id\n\t\t\t * \t\telse\n\t\t\t * \t\t\tjust update the value\n\t\t\t *\n\t\t\t */\n\n\t\t\tif (selectedSchema.type === FilterType.Multiple) {\n\t\t\t\t/** only update value i.e remove value from selectedItem.value */\n\t\t\t\tlocalSelectedIds = localSelectedIds\n\t\t\t\t\t.map((selected) => {\n\t\t\t\t\t\tif (selected.id === id) {\n\t\t\t\t\t\t\tconst newVal = (selected.value as SingleOption[]).filter(\n\t\t\t\t\t\t\t\t(val) => val.value !== (value as SingleOption).value,\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tif (newVal.length) {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t...selected,\n\t\t\t\t\t\t\t\t\tvalue: newVal,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn selected;\n\t\t\t\t\t})\n\t\t\t\t\t.filter((selected) => !!selected) as {\n\t\t\t\t\tid: string;\n\t\t\t\t\tvalue: FilterValueType;\n\t\t\t\t}[];\n\n\t\t\t\tselectedStateRef.current = selectedStateRef.current\n\t\t\t\t\t.map((selectedItem) => {\n\t\t\t\t\t\tif (selectedItem.id === id) {\n\t\t\t\t\t\t\tconst newVal = (selectedItem.value as SingleOption[])?.filter(\n\t\t\t\t\t\t\t\t(val) => val.value !== (value as SingleOption).value,\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tif (newVal.length) {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t...selectedItem,\n\t\t\t\t\t\t\t\t\tvalue: newVal,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn selectedItem;\n\t\t\t\t\t})\n\t\t\t\t\t.filter((selected) => !!selected) as SearchFilterOutputState[];\n\t\t\t} else {\n\t\t\t\t/** Delete */\n\t\t\t\tlocalSelectedIds = localSelectedIds.filter(\n\t\t\t\t\t(selected) => selected.id !== id,\n\t\t\t\t);\n\n\t\t\t\tselectedStateRef.current = selectedStateRef.current.filter(\n\t\t\t\t\t(selectedItem) => selectedItem.id !== id,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tonChange(selectedSchema.id, selectedStateRef.current, value);\n\n\t\t\tsetSelectedIds([...localSelectedIds]);\n\t\t}\n\t};\n\n\treturn (\n\t\t<div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\tflexDirection: direction,\n\t\t\t\t\tgap: 8,\n\t\t\t\t\tflexWrap: 'wrap',\n\t\t\t\t\talignItems: direction === 'row' ? 'center' : 'self-start',\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{searchSchema && (\n\t\t\t\t\t<SearchBar\n\t\t\t\t\t\twidth={searchSchema.width?.toString() ?? '100%'}\n\t\t\t\t\t\tisEnabled={true}\n\t\t\t\t\t\tonChange={onSearchChange}\n\t\t\t\t\t\tonEnter={onSearchChange}\n\t\t\t\t\t\tplaceholder={searchSchema.text}\n\t\t\t\t\t\tvariant={'small'}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t\t<div\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\tflexDirection: 'row',\n\t\t\t\t\t\tgap: 8,\n\t\t\t\t\t\tflexWrap: 'wrap',\n\t\t\t\t\t\talignItems: direction === 'row' ? 'center' : 'self-start',\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{schema\n\t\t\t\t\t\t.filter((filterItem) => filterItem.type !== FilterType.Search)\n\t\t\t\t\t\t.map((filterItem, i) => (\n\t\t\t\t\t\t\t<SearchFilterItem\n\t\t\t\t\t\t\t\t{...filterItem}\n\t\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\t\tvariant={variant}\n\t\t\t\t\t\t\t\tonChange={(val) => {\n\t\t\t\t\t\t\t\t\tselect(filterItem.id, val);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t{showSelectedChips && (\n\t\t\t\t<div\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\tflexDirection: 'row',\n\t\t\t\t\t\tgap: 8,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<FilterChipListRenderer\n\t\t\t\t\t\tselectedState={selectedStateRef.current}\n\t\t\t\t\t\tonDeSelect={deSelect}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n"],"names":["SearchFilter","direction","schema","variant","onChange","showSelectedChips","selectedStateRef","useRef","filterItem","selectedIds","setSelectedIds","useState","searchSchema","FilterType","onSearchChange","searchText","select","id","value","selectedSchema","schemaItem","localSelectedIds","idx","el","selectedSchemaItem","deSelect","selected","newVal","val","selectedItem","jsxs","jsx","SearchBar","i","createElement","SearchFilterItem","FilterChipListRenderer"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/SearchFilter/index.tsx"],"sourcesContent":["import React, { useRef, useState } from 'react';\nimport { SingleOption } from '../dropdown/type';\nimport { SearchBar } from '../searchBar';\nimport { FilterChipListRenderer } from './components/FilterChipListRenderer';\nimport { SearchFilterItem } from './components/SearchFilterItem';\nimport {\n\tFilterType,\n\tFilterValueType,\n\tSearchFilterOutputState,\n\tSearchFilterProps,\n} from './types/SearchFilter.type';\n\nexport const SearchFilter: React.FC<SearchFilterProps> = ({\n\tdirection = 'row',\n\tschema,\n\tvariant,\n\tonChange,\n\tshowSelectedChips,\n}) => {\n\t/** this will always have the latest value and all the selected ids */\n\tconst selectedStateRef = useRef<SearchFilterOutputState[]>(\n\t\tschema\n\t\t\t?.filter((filterItem) => filterItem.defaultValue)\n\t\t\t.map(\n\t\t\t\t(filterItem) =>\n\t\t\t\t\t({\n\t\t\t\t\t\tid: filterItem.id,\n\t\t\t\t\t\tvalue: filterItem.defaultValue,\n\t\t\t\t\t\ttype: filterItem.type,\n\t\t\t\t\t\ttext: filterItem.text,\n\t\t\t\t\t} as SearchFilterOutputState),\n\t\t\t) ?? [],\n\t);\n\n\tconst [selectedIds, setSelectedIds] = useState<\n\t\t{ id: string; value: FilterValueType }[]\n\t>([]);\n\n\tconst searchSchema = schema.find(\n\t\t(filterItem) => filterItem.type === FilterType.Search,\n\t);\n\n\tconst onSearchChange = (searchText: string) => {\n\t\tif (searchSchema && typeof searchText === 'string') {\n\t\t\tselect(searchSchema.id, searchText);\n\t\t}\n\t};\n\n\tconst select = (id: string, value: FilterValueType) => {\n\t\tconst selectedSchema = schema.find((schemaItem) => schemaItem.id === id);\n\t\tconst localSelectedIds = [...selectedIds];\n\n\t\tif (selectedSchema) {\n\t\t\tconst idx = localSelectedIds.findIndex((el) => el.id === id);\n\t\t\tif (idx !== -1) {\n\t\t\t\tlocalSelectedIds[idx] = { id: selectedSchema.id, value };\n\t\t\t} else {\n\t\t\t\tlocalSelectedIds.push({ id: selectedSchema.id, value });\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * loop through selectedStateRef.current and if `id` present (1), update the value\n\t\t\t * and if id not present (2), push\n\t\t\t */\n\n\t\t\tconst idPresent = selectedStateRef.current.find(\n\t\t\t\t(selectedSchemaItem) => selectedSchemaItem.id === id,\n\t\t\t);\n\n\t\t\tif (idPresent) {\n\t\t\t\t/** (1) */\n\t\t\t\tselectedStateRef.current = selectedStateRef.current.map(\n\t\t\t\t\t(selectedSchemaItem) => {\n\t\t\t\t\t\tif (selectedSchemaItem.id === id) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tid: selectedSchemaItem.id,\n\t\t\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\t\t\ttype: selectedSchemaItem.type,\n\t\t\t\t\t\t\t\ttext: selectedSchemaItem.text,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn selectedSchemaItem;\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t/** (2) */\n\t\t\t\tselectedStateRef.current = [\n\t\t\t\t\t...selectedStateRef.current,\n\t\t\t\t\t{\n\t\t\t\t\t\tid: id,\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\ttype: selectedSchema.type,\n\t\t\t\t\t\ttext: selectedSchema.text,\n\t\t\t\t\t},\n\t\t\t\t];\n\t\t\t}\n\n\t\t\tonChange(selectedSchema.id, selectedStateRef.current, value);\n\n\t\t\tsetSelectedIds([...localSelectedIds]);\n\t\t}\n\t};\n\n\tconst deSelect = (id: string, value?: FilterValueType) => {\n\t\tconst selectedSchema = schema.find((schemaItem) => schemaItem.id === id);\n\t\tlet localSelectedIds = [...selectedIds];\n\t\tif (selectedSchema) {\n\t\t\t/**\n\t\t\t * only FilterType.Multiple, id can be present in selectedIds and selectedStateRef, so\n\t\t\t * delete id always except for FilterType.Multiple,\n\t\t\t *\n\t\t\t * for FilterType.Multiple,\n\t\t\t * \t\tif value.length === 0, delete id\n\t\t\t * \t\telse\n\t\t\t * \t\t\tjust update the value\n\t\t\t *\n\t\t\t */\n\n\t\t\tif (selectedSchema.type === FilterType.Multiple) {\n\t\t\t\t/** only update value i.e remove value from selectedItem.value */\n\t\t\t\tlocalSelectedIds = localSelectedIds\n\t\t\t\t\t.map((selected) => {\n\t\t\t\t\t\tif (selected.id === id) {\n\t\t\t\t\t\t\tconst newVal = (selected.value as SingleOption[]).filter(\n\t\t\t\t\t\t\t\t(val) => val.value !== (value as SingleOption).value,\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tif (newVal.length) {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t...selected,\n\t\t\t\t\t\t\t\t\tvalue: newVal,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn selected;\n\t\t\t\t\t})\n\t\t\t\t\t.filter((selected) => !!selected) as {\n\t\t\t\t\tid: string;\n\t\t\t\t\tvalue: FilterValueType;\n\t\t\t\t}[];\n\n\t\t\t\tselectedStateRef.current = selectedStateRef.current\n\t\t\t\t\t.map((selectedItem) => {\n\t\t\t\t\t\tif (selectedItem.id === id) {\n\t\t\t\t\t\t\tconst newVal = (selectedItem.value as SingleOption[])?.filter(\n\t\t\t\t\t\t\t\t(val) => val.value !== (value as SingleOption).value,\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tif (newVal.length) {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t...selectedItem,\n\t\t\t\t\t\t\t\t\tvalue: newVal,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn selectedItem;\n\t\t\t\t\t})\n\t\t\t\t\t.filter((selected) => !!selected) as SearchFilterOutputState[];\n\t\t\t} else {\n\t\t\t\t/** Delete */\n\t\t\t\tlocalSelectedIds = localSelectedIds.filter(\n\t\t\t\t\t(selected) => selected.id !== id,\n\t\t\t\t);\n\n\t\t\t\tselectedStateRef.current = selectedStateRef.current.filter(\n\t\t\t\t\t(selectedItem) => selectedItem.id !== id,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tonChange(selectedSchema.id, selectedStateRef.current, value);\n\n\t\t\tsetSelectedIds([...localSelectedIds]);\n\t\t}\n\t};\n\n\treturn (\n\t\t<div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n\t\t\t<div\n\t\t\t\tdata-testid=\"search-filter-row\"\n\t\t\t\tstyle={{\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\tflexDirection: direction,\n\t\t\t\t\tgap: 8,\n\t\t\t\t\tflexWrap: 'wrap',\n\t\t\t\t\talignItems: direction === 'row' ? 'center' : 'self-start',\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{searchSchema && (\n\t\t\t\t\t<SearchBar\n\t\t\t\t\t\twidth={searchSchema.width?.toString() ?? '100%'}\n\t\t\t\t\t\tisEnabled={true}\n\t\t\t\t\t\tonChange={onSearchChange}\n\t\t\t\t\t\tonEnter={onSearchChange}\n\t\t\t\t\t\tplaceholder={searchSchema.text}\n\t\t\t\t\t\tvariant={'small'}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t\t<div\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\tflexDirection: 'row',\n\t\t\t\t\t\tgap: 8,\n\t\t\t\t\t\tflexWrap: 'wrap',\n\t\t\t\t\t\talignItems: direction === 'row' ? 'center' : 'self-start',\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{schema\n\t\t\t\t\t\t.filter((filterItem) => filterItem.type !== FilterType.Search)\n\t\t\t\t\t\t.map((filterItem, i) => (\n\t\t\t\t\t\t\t<SearchFilterItem\n\t\t\t\t\t\t\t\t{...filterItem}\n\t\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\t\tvariant={variant}\n\t\t\t\t\t\t\t\tonChange={(val) => {\n\t\t\t\t\t\t\t\t\tselect(filterItem.id, val);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t{showSelectedChips && (\n\t\t\t\t<div\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\tflexDirection: 'row',\n\t\t\t\t\t\tgap: 8,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<FilterChipListRenderer\n\t\t\t\t\t\tselectedState={selectedStateRef.current}\n\t\t\t\t\t\tonDeSelect={deSelect}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n"],"names":["SearchFilter","direction","schema","variant","onChange","showSelectedChips","selectedStateRef","useRef","filterItem","selectedIds","setSelectedIds","useState","searchSchema","FilterType","onSearchChange","searchText","select","id","value","selectedSchema","schemaItem","localSelectedIds","idx","el","selectedSchemaItem","deSelect","selected","newVal","val","selectedItem","jsxs","jsx","SearchBar","i","createElement","SearchFilterItem","FilterChipListRenderer"],"mappings":"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"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { jsx as o, jsxs as
|
|
2
|
-
import { useState as
|
|
1
|
+
import { jsx as o, jsxs as h } from "react/jsx-runtime";
|
|
2
|
+
import { useState as c, useCallback as t } from "react";
|
|
3
3
|
import { COLORS as ie } from "../../constants/Theme.js";
|
|
4
|
-
import { BuilderRoot as se, Main as le, Rail as
|
|
4
|
+
import { BuilderRoot as se, Main as le, Rail as ce, Content as de, ContentCard as ue, StepScroll as ge } from "./AgentBuilder.styled.js";
|
|
5
5
|
import { AgentBuilderFooter as fe } from "./components/AgentBuilderFooter.js";
|
|
6
|
-
import { AgentBuilderTopBar as
|
|
7
|
-
import { DiscardModal as
|
|
8
|
-
import { GoLiveModal as
|
|
9
|
-
import { StepRail as
|
|
6
|
+
import { AgentBuilderTopBar as me } from "./components/AgentBuilderTopBar.js";
|
|
7
|
+
import { DiscardModal as he } from "./components/DiscardModal.js";
|
|
8
|
+
import { GoLiveModal as ve } from "./components/GoLiveModal.js";
|
|
9
|
+
import { StepRail as pe } from "./components/StepRail.js";
|
|
10
10
|
import { UndoToast as Se } from "./components/UndoToast.js";
|
|
11
11
|
import { AgentBuilderProvider as be, useAgentBuilderContext as Ce } from "./context/AgentBuilderContext.js";
|
|
12
12
|
import { Step1About as Ae } from "./steps/Step1About.js";
|
|
@@ -30,87 +30,87 @@ const Be = () => {
|
|
|
30
30
|
}
|
|
31
31
|
}, Ge = (d) => {
|
|
32
32
|
const {
|
|
33
|
-
config:
|
|
34
|
-
onChange:
|
|
35
|
-
onStepChange:
|
|
36
|
-
onDiscard:
|
|
33
|
+
config: P,
|
|
34
|
+
onChange: v,
|
|
35
|
+
onStepChange: u,
|
|
36
|
+
onDiscard: p,
|
|
37
37
|
onSaveDraft: r,
|
|
38
38
|
onPublish: S,
|
|
39
|
-
onBack:
|
|
40
|
-
onTestAgent:
|
|
41
|
-
onGoToDashboard:
|
|
39
|
+
onBack: g,
|
|
40
|
+
onTestAgent: f,
|
|
41
|
+
onGoToDashboard: m,
|
|
42
42
|
onCreateSubAgent: i,
|
|
43
|
-
onFetchSubAgent:
|
|
44
|
-
onUpdateSubAgent:
|
|
45
|
-
onImproveSubAgent:
|
|
46
|
-
onImproveToolInstructions:
|
|
47
|
-
onConnectIntegration:
|
|
48
|
-
...
|
|
43
|
+
onFetchSubAgent: w,
|
|
44
|
+
onUpdateSubAgent: M,
|
|
45
|
+
onImproveSubAgent: k,
|
|
46
|
+
onImproveToolInstructions: R,
|
|
47
|
+
onConnectIntegration: x,
|
|
48
|
+
...j
|
|
49
49
|
} = d, {
|
|
50
|
-
value:
|
|
51
|
-
activeStep:
|
|
52
|
-
availableTools:
|
|
53
|
-
availableSubAgents:
|
|
54
|
-
availableIntents:
|
|
55
|
-
availableModels:
|
|
56
|
-
configToolTemplates:
|
|
57
|
-
integrationStatus:
|
|
58
|
-
validation:
|
|
59
|
-
applicationType:
|
|
60
|
-
charLimits:
|
|
50
|
+
value: s,
|
|
51
|
+
activeStep: H,
|
|
52
|
+
availableTools: F,
|
|
53
|
+
availableSubAgents: N,
|
|
54
|
+
availableIntents: O = [],
|
|
55
|
+
availableModels: U = [],
|
|
56
|
+
configToolTemplates: z,
|
|
57
|
+
integrationStatus: E,
|
|
58
|
+
validation: W,
|
|
59
|
+
applicationType: $,
|
|
60
|
+
charLimits: q,
|
|
61
61
|
isSaving: b,
|
|
62
62
|
isPublishing: C,
|
|
63
|
-
isLoading:
|
|
64
|
-
footerHint:
|
|
65
|
-
disableStepNavigation:
|
|
63
|
+
isLoading: J,
|
|
64
|
+
footerHint: K = "Changes don’t affect customers until you go live",
|
|
65
|
+
disableStepNavigation: Q,
|
|
66
66
|
debugLog: A
|
|
67
|
-
} =
|
|
67
|
+
} = P, [L, a] = c(null), [D, T] = c(!1), [V, l] = c(!1), [y, B] = c(!1), e = t(
|
|
68
68
|
(n, ...re) => {
|
|
69
69
|
A && console.log(`[AgentBuilder] ${n}`, ...re);
|
|
70
70
|
},
|
|
71
71
|
[A]
|
|
72
|
-
),
|
|
72
|
+
), X = t(
|
|
73
73
|
(n) => {
|
|
74
|
-
e("onChange", n),
|
|
74
|
+
e("onChange", n), v(n);
|
|
75
75
|
},
|
|
76
|
-
[e,
|
|
77
|
-
),
|
|
76
|
+
[e, v]
|
|
77
|
+
), Y = t(
|
|
78
78
|
(n) => {
|
|
79
|
-
e("onStepChange", n),
|
|
79
|
+
e("onStepChange", n), u?.(n);
|
|
80
80
|
},
|
|
81
|
-
[e,
|
|
82
|
-
),
|
|
83
|
-
e("onBack"),
|
|
84
|
-
}, [e]),
|
|
85
|
-
e("onDiscardAndLeave"),
|
|
86
|
-
}, [e,
|
|
81
|
+
[e, u]
|
|
82
|
+
), Z = t(() => (e("onSaveDraft"), r()), [e, r]), _ = t(() => (e("onPublish"), S()), [e, S]), ee = t(() => {
|
|
83
|
+
e("onBack"), l(!0);
|
|
84
|
+
}, [e]), ne = t(() => {
|
|
85
|
+
e("onDiscardAndLeave"), l(!1), p();
|
|
86
|
+
}, [e, p]), G = t(async () => {
|
|
87
87
|
e("onSaveDraftAndLeave");
|
|
88
88
|
const n = r();
|
|
89
89
|
if (n && typeof n.then == "function") {
|
|
90
|
-
|
|
90
|
+
B(!0);
|
|
91
91
|
try {
|
|
92
92
|
await n;
|
|
93
93
|
} finally {
|
|
94
|
-
|
|
94
|
+
B(!1);
|
|
95
95
|
}
|
|
96
96
|
}
|
|
97
|
-
|
|
98
|
-
}, [e, r,
|
|
99
|
-
e("onTestAgent"),
|
|
100
|
-
}, [e,
|
|
101
|
-
e("onGoToDashboard"),
|
|
102
|
-
}, [e,
|
|
97
|
+
l(!1), g?.();
|
|
98
|
+
}, [e, r, g]), oe = t(() => {
|
|
99
|
+
e("onTestAgent"), f?.();
|
|
100
|
+
}, [e, f]), I = t(() => {
|
|
101
|
+
e("onGoToDashboard"), m?.();
|
|
102
|
+
}, [e, m]), te = t(
|
|
103
103
|
(n) => (e("onCreateSubAgent", n), i ? i(n) : Promise.reject(new Error("onCreateSubAgent not provided"))),
|
|
104
104
|
[e, i]
|
|
105
105
|
), ae = async () => {
|
|
106
106
|
e("onGoLiveConfirm");
|
|
107
|
-
const n =
|
|
107
|
+
const n = _();
|
|
108
108
|
if (n && typeof n.then == "function") {
|
|
109
|
-
|
|
109
|
+
T(!0);
|
|
110
110
|
try {
|
|
111
111
|
await n, a("success");
|
|
112
112
|
} finally {
|
|
113
|
-
|
|
113
|
+
T(!1);
|
|
114
114
|
}
|
|
115
115
|
} else
|
|
116
116
|
a("success");
|
|
@@ -118,40 +118,40 @@ const Be = () => {
|
|
|
118
118
|
return /* @__PURE__ */ o(
|
|
119
119
|
be,
|
|
120
120
|
{
|
|
121
|
-
value:
|
|
122
|
-
onChange:
|
|
123
|
-
activeStep:
|
|
124
|
-
onStepChange:
|
|
125
|
-
availableTools:
|
|
126
|
-
availableSubAgents:
|
|
127
|
-
availableIntents:
|
|
128
|
-
availableModels:
|
|
129
|
-
configToolTemplates:
|
|
130
|
-
integrationStatus:
|
|
131
|
-
onConnectIntegration:
|
|
132
|
-
validation:
|
|
133
|
-
applicationType:
|
|
134
|
-
charLimits:
|
|
135
|
-
disableStepNavigation:
|
|
121
|
+
value: s,
|
|
122
|
+
onChange: X,
|
|
123
|
+
activeStep: H,
|
|
124
|
+
onStepChange: u ? Y : void 0,
|
|
125
|
+
availableTools: F,
|
|
126
|
+
availableSubAgents: N,
|
|
127
|
+
availableIntents: O,
|
|
128
|
+
availableModels: U,
|
|
129
|
+
configToolTemplates: z,
|
|
130
|
+
integrationStatus: E,
|
|
131
|
+
onConnectIntegration: x,
|
|
132
|
+
validation: W,
|
|
133
|
+
applicationType: $,
|
|
134
|
+
charLimits: q,
|
|
135
|
+
disableStepNavigation: Q,
|
|
136
136
|
onCreateSubAgent: i ? te : void 0,
|
|
137
|
-
onFetchSubAgent:
|
|
138
|
-
onUpdateSubAgent:
|
|
139
|
-
onImproveSubAgent:
|
|
140
|
-
onImproveToolInstructions:
|
|
141
|
-
children: /* @__PURE__ */
|
|
137
|
+
onFetchSubAgent: w,
|
|
138
|
+
onUpdateSubAgent: M,
|
|
139
|
+
onImproveSubAgent: k,
|
|
140
|
+
onImproveToolInstructions: R,
|
|
141
|
+
children: /* @__PURE__ */ h(se, { "data-test": j["data-test"] ?? "agent-builder", children: [
|
|
142
142
|
/* @__PURE__ */ o(
|
|
143
|
-
|
|
143
|
+
me,
|
|
144
144
|
{
|
|
145
|
-
name:
|
|
146
|
-
status:
|
|
147
|
-
onBack:
|
|
148
|
-
onSaveDraft:
|
|
149
|
-
isSaving: b ||
|
|
145
|
+
name: s.name,
|
|
146
|
+
status: s.status,
|
|
147
|
+
onBack: g ? ee : void 0,
|
|
148
|
+
onSaveDraft: G,
|
|
149
|
+
isSaving: b || y
|
|
150
150
|
}
|
|
151
151
|
),
|
|
152
|
-
/* @__PURE__ */
|
|
153
|
-
/* @__PURE__ */ o(
|
|
154
|
-
/* @__PURE__ */ o(
|
|
152
|
+
/* @__PURE__ */ h(le, { children: [
|
|
153
|
+
/* @__PURE__ */ o(ce, { children: /* @__PURE__ */ o(pe, {}) }),
|
|
154
|
+
/* @__PURE__ */ o(de, { children: J ? /* @__PURE__ */ o(
|
|
155
155
|
"div",
|
|
156
156
|
{
|
|
157
157
|
style: {
|
|
@@ -162,42 +162,46 @@ const Be = () => {
|
|
|
162
162
|
},
|
|
163
163
|
children: /* @__PURE__ */ o(ye, { size: "large", color: ie.stroke.brand })
|
|
164
164
|
}
|
|
165
|
-
) : /* @__PURE__ */
|
|
165
|
+
) : /* @__PURE__ */ h(ue, { children: [
|
|
166
166
|
/* @__PURE__ */ o(ge, { children: /* @__PURE__ */ o(Be, {}) }),
|
|
167
167
|
/* @__PURE__ */ o(
|
|
168
168
|
fe,
|
|
169
169
|
{
|
|
170
|
-
footerHint:
|
|
171
|
-
onTestAgent:
|
|
170
|
+
footerHint: K,
|
|
171
|
+
onTestAgent: f ? oe : void 0,
|
|
172
172
|
onGoLive: () => {
|
|
173
173
|
e("onGoLive"), a("confirm");
|
|
174
174
|
},
|
|
175
|
-
isPublishing: C ||
|
|
175
|
+
isPublishing: C || D
|
|
176
176
|
}
|
|
177
177
|
)
|
|
178
178
|
] }) })
|
|
179
179
|
] }),
|
|
180
180
|
/* @__PURE__ */ o(
|
|
181
|
-
|
|
181
|
+
ve,
|
|
182
182
|
{
|
|
183
|
-
mode:
|
|
184
|
-
onClose: () =>
|
|
183
|
+
mode: L,
|
|
184
|
+
onClose: () => {
|
|
185
|
+
const n = L === "success";
|
|
186
|
+
a(null), n && I();
|
|
187
|
+
},
|
|
185
188
|
onConfirm: ae,
|
|
186
189
|
onSaveDraft: () => {
|
|
187
|
-
a(null),
|
|
190
|
+
a(null), Z();
|
|
188
191
|
},
|
|
189
|
-
onGoToDashboard:
|
|
190
|
-
isPublishing: C ||
|
|
192
|
+
onGoToDashboard: m ? I : void 0,
|
|
193
|
+
isPublishing: C || D
|
|
191
194
|
}
|
|
192
195
|
),
|
|
193
196
|
/* @__PURE__ */ o(
|
|
194
|
-
|
|
197
|
+
he,
|
|
195
198
|
{
|
|
196
|
-
open:
|
|
197
|
-
onClose: () =>
|
|
198
|
-
onDiscard:
|
|
199
|
-
onSaveDraft:
|
|
200
|
-
|
|
199
|
+
open: V,
|
|
200
|
+
onClose: () => l(!1),
|
|
201
|
+
onDiscard: ne,
|
|
202
|
+
onSaveDraft: G,
|
|
203
|
+
disableSaveDraft: !s.name.trim(),
|
|
204
|
+
isSaving: b || y
|
|
201
205
|
}
|
|
202
206
|
),
|
|
203
207
|
/* @__PURE__ */ o(Se, {})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentBuilder.js","sources":["../../../../src/components/agent-builder/AgentBuilder.tsx"],"sourcesContent":["import React, { useCallback, useState } from 'react';\nimport { Spinner } from '@src/components/spinner';\nimport { COLORS } from '@src/constants/Theme';\nimport {\n\tAgentBuilderProps,\n\tAgentValue,\n\tSubAgentDraft,\n} from './AgentBuilder.model';\nimport {\n\tBuilderRoot,\n\tContent,\n\tContentCard,\n\tMain,\n\tRail,\n\tStepScroll,\n} from './AgentBuilder.styled';\nimport { AgentBuilderFooter } from './components/AgentBuilderFooter';\nimport { AgentBuilderTopBar } from './components/AgentBuilderTopBar';\nimport { DiscardModal } from './components/DiscardModal';\nimport { GoLiveModal, GoLiveModalMode } from './components/GoLiveModal';\nimport { StepRail } from './components/StepRail';\nimport { UndoToast } from './components/UndoToast';\nimport {\n\tAgentBuilderProvider,\n\tuseAgentBuilderContext,\n} from './context/AgentBuilderContext';\nimport { Step1About } from './steps/Step1About';\nimport { Step2WhenItStepsIn } from './steps/Step2WhenItStepsIn';\nimport { Step3HowItResponds } from './steps/Step3HowItResponds';\nimport { Step4HandoverRules } from './steps/Step4HandoverRules';\n\nconst StepContent: React.FC = () => {\n\tconst { activeStep } = useAgentBuilderContext();\n\tswitch (activeStep) {\n\t\tcase 'about':\n\t\t\treturn <Step1About />;\n\t\tcase 'trigger':\n\t\t\treturn <Step2WhenItStepsIn />;\n\t\tcase 'response':\n\t\t\treturn <Step3HowItResponds />;\n\t\tcase 'handover':\n\t\t\treturn <Step4HandoverRules />;\n\t\tdefault:\n\t\t\treturn null;\n\t}\n};\n\n/**\n * 4-step creation/edit wizard body for an AI agent. Presentational and\n * controlled — the consumer owns the `value`, persistence and routing.\n *\n * @example\n * <AgentBuilder\n * value={agent}\n * onChange={(patch) => setAgent({ ...agent, ...patch })}\n * availableTools={tools}\n * availableSubAgents={subAgents}\n * onDiscard={() => router.back()}\n * onSaveDraft={saveDraft}\n * onPublish={publish}\n * />\n */\nexport const AgentBuilder: React.FC<AgentBuilderProps> = (props) => {\n\tconst {\n\t\tconfig,\n\t\tonChange,\n\t\tonStepChange,\n\t\tonDiscard,\n\t\tonSaveDraft,\n\t\tonPublish,\n\t\tonBack,\n\t\tonTestAgent,\n\t\tonGoToDashboard,\n\t\tonCreateSubAgent,\n\t\tonFetchSubAgent,\n\t\tonUpdateSubAgent,\n\t\tonImproveSubAgent,\n\t\tonImproveToolInstructions,\n\t\tonConnectIntegration,\n\t\t...rest\n\t} = props;\n\tconst {\n\t\tvalue,\n\t\tactiveStep,\n\t\tavailableTools,\n\t\tavailableSubAgents,\n\t\tavailableIntents = [],\n\t\tavailableModels = [],\n\t\tconfigToolTemplates,\n\t\tintegrationStatus,\n\t\tvalidation,\n\t\tapplicationType,\n\t\tcharLimits,\n\t\tisSaving,\n\t\tisPublishing,\n\t\tisLoading,\n\t\tfooterHint = 'Changes don’t affect customers until you go live',\n\t\tdisableStepNavigation,\n\t\tdebugLog,\n\t} = config;\n\n\tconst [modalMode, setModalMode] = useState<GoLiveModalMode>(null);\n\tconst [publishingLocal, setPublishingLocal] = useState(false);\n\t// Back was pressed → confirm leaving (save draft / discard) before navigating.\n\tconst [showLeaveConfirm, setShowLeaveConfirm] = useState(false);\n\tconst [savingAndLeaving, setSavingAndLeaving] = useState(false);\n\n\t// Gated debug logging: each handler logs at its start only when `debugLog`.\n\tconst logAction = useCallback(\n\t\t(action: string, ...args: unknown[]) => {\n\t\t\tif (debugLog) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.log(`[AgentBuilder] ${action}`, ...args);\n\t\t\t}\n\t\t},\n\t\t[debugLog],\n\t);\n\n\tconst handleChange = useCallback(\n\t\t(patch: Partial<AgentValue>) => {\n\t\t\tlogAction('onChange', patch);\n\t\t\tonChange(patch);\n\t\t},\n\t\t[logAction, onChange],\n\t);\n\tconst handleStepChange = useCallback(\n\t\t(step: Parameters<NonNullable<typeof onStepChange>>[0]) => {\n\t\t\tlogAction('onStepChange', step);\n\t\t\tonStepChange?.(step);\n\t\t},\n\t\t[logAction, onStepChange],\n\t);\n\tconst handleSaveDraft = useCallback(() => {\n\t\tlogAction('onSaveDraft');\n\t\treturn onSaveDraft();\n\t}, [logAction, onSaveDraft]);\n\tconst handlePublish = useCallback(() => {\n\t\tlogAction('onPublish');\n\t\treturn onPublish();\n\t}, [logAction, onPublish]);\n\t// Back opens the \"Save as draft?\" confirmation rather than leaving directly.\n\tconst handleBack = useCallback(() => {\n\t\tlogAction('onBack');\n\t\tsetShowLeaveConfirm(true);\n\t}, [logAction]);\n\n\t// Modal \"Discard\" defers to the parent's discard handler (same as the top bar).\n\tconst handleDiscardAndLeave = useCallback(() => {\n\t\tlogAction('onDiscardAndLeave');\n\t\tsetShowLeaveConfirm(false);\n\t\tonDiscard();\n\t}, [logAction, onDiscard]);\n\n\tconst handleSaveDraftAndLeave = useCallback(async () => {\n\t\tlogAction('onSaveDraftAndLeave');\n\t\tconst result = onSaveDraft();\n\t\tif (result && typeof (result as Promise<void>).then === 'function') {\n\t\t\tsetSavingAndLeaving(true);\n\t\t\ttry {\n\t\t\t\tawait result;\n\t\t\t} finally {\n\t\t\t\tsetSavingAndLeaving(false);\n\t\t\t}\n\t\t}\n\t\tsetShowLeaveConfirm(false);\n\t\tonBack?.();\n\t}, [logAction, onSaveDraft, onBack]);\n\tconst handleTestAgent = useCallback(() => {\n\t\tlogAction('onTestAgent');\n\t\tonTestAgent?.();\n\t}, [logAction, onTestAgent]);\n\tconst handleGoToDashboard = useCallback(() => {\n\t\tlogAction('onGoToDashboard');\n\t\tonGoToDashboard?.();\n\t}, [logAction, onGoToDashboard]);\n\tconst handleCreateSubAgent = useCallback(\n\t\t(draft: SubAgentDraft) => {\n\t\t\tlogAction('onCreateSubAgent', draft);\n\t\t\treturn onCreateSubAgent\n\t\t\t\t? onCreateSubAgent(draft)\n\t\t\t\t: Promise.reject(new Error('onCreateSubAgent not provided'));\n\t\t},\n\t\t[logAction, onCreateSubAgent],\n\t);\n\n\tconst handleConfirmGoLive = async () => {\n\t\tlogAction('onGoLiveConfirm');\n\t\tconst result = handlePublish();\n\t\tif (result && typeof (result as Promise<void>).then === 'function') {\n\t\t\tsetPublishingLocal(true);\n\t\t\ttry {\n\t\t\t\tawait result;\n\t\t\t\tsetModalMode('success');\n\t\t\t} finally {\n\t\t\t\tsetPublishingLocal(false);\n\t\t\t}\n\t\t} else {\n\t\t\tsetModalMode('success');\n\t\t}\n\t};\n\n\treturn (\n\t\t<AgentBuilderProvider\n\t\t\tvalue={value}\n\t\t\tonChange={handleChange}\n\t\t\tactiveStep={activeStep}\n\t\t\tonStepChange={onStepChange ? handleStepChange : undefined}\n\t\t\tavailableTools={availableTools}\n\t\t\tavailableSubAgents={availableSubAgents}\n\t\t\tavailableIntents={availableIntents}\n\t\t\tavailableModels={availableModels}\n\t\t\tconfigToolTemplates={configToolTemplates}\n\t\t\tintegrationStatus={integrationStatus}\n\t\t\tonConnectIntegration={onConnectIntegration}\n\t\t\tvalidation={validation}\n\t\t\tapplicationType={applicationType}\n\t\t\tcharLimits={charLimits}\n\t\t\tdisableStepNavigation={disableStepNavigation}\n\t\t\tonCreateSubAgent={onCreateSubAgent ? handleCreateSubAgent : undefined}\n\t\t\tonFetchSubAgent={onFetchSubAgent}\n\t\t\tonUpdateSubAgent={onUpdateSubAgent}\n\t\t\tonImproveSubAgent={onImproveSubAgent}\n\t\t\tonImproveToolInstructions={onImproveToolInstructions}\n\t\t>\n\t\t\t<BuilderRoot data-test={rest['data-test'] ?? 'agent-builder'}>\n\t\t\t\t<AgentBuilderTopBar\n\t\t\t\t\tname={value.name}\n\t\t\t\t\tstatus={value.status}\n\t\t\t\t\tonBack={onBack ? handleBack : undefined}\n\t\t\t\t\tonSaveDraft={handleSaveDraftAndLeave}\n\t\t\t\t\tisSaving={isSaving || savingAndLeaving}\n\t\t\t\t/>\n\n\t\t\t\t<Main>\n\t\t\t\t\t<Rail>\n\t\t\t\t\t\t<StepRail />\n\t\t\t\t\t</Rail>\n\t\t\t\t\t<Content>\n\t\t\t\t\t\t{isLoading ? (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t\t\t\theight: '100%',\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Spinner size=\"large\" color={COLORS.stroke.brand} />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<ContentCard>\n\t\t\t\t\t\t\t\t<StepScroll>\n\t\t\t\t\t\t\t\t\t<StepContent />\n\t\t\t\t\t\t\t\t</StepScroll>\n\t\t\t\t\t\t\t\t<AgentBuilderFooter\n\t\t\t\t\t\t\t\t\tfooterHint={footerHint}\n\t\t\t\t\t\t\t\t\tonTestAgent={onTestAgent ? handleTestAgent : undefined}\n\t\t\t\t\t\t\t\t\tonGoLive={() => {\n\t\t\t\t\t\t\t\t\t\tlogAction('onGoLive');\n\t\t\t\t\t\t\t\t\t\tsetModalMode('confirm');\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tisPublishing={isPublishing || publishingLocal}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</ContentCard>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Content>\n\t\t\t\t</Main>\n\n\t\t\t\t<GoLiveModal\n\t\t\t\t\tmode={modalMode}\n\t\t\t\t\tonClose={() => setModalMode(null)}\n\t\t\t\t\tonConfirm={handleConfirmGoLive}\n\t\t\t\t\tonSaveDraft={() => {\n\t\t\t\t\t\tsetModalMode(null);\n\t\t\t\t\t\thandleSaveDraft();\n\t\t\t\t\t}}\n\t\t\t\t\tonGoToDashboard={onGoToDashboard ? handleGoToDashboard : undefined}\n\t\t\t\t\tisPublishing={isPublishing || publishingLocal}\n\t\t\t\t/>\n\n\t\t\t\t<DiscardModal\n\t\t\t\t\topen={showLeaveConfirm}\n\t\t\t\t\tonClose={() => setShowLeaveConfirm(false)}\n\t\t\t\t\tonDiscard={handleDiscardAndLeave}\n\t\t\t\t\tonSaveDraft={handleSaveDraftAndLeave}\n\t\t\t\t\tisSaving={isSaving || savingAndLeaving}\n\t\t\t\t/>\n\n\t\t\t\t<UndoToast />\n\t\t\t</BuilderRoot>\n\t\t</AgentBuilderProvider>\n\t);\n};\n\nAgentBuilder.displayName = 'AgentBuilder';\n"],"names":["StepContent","activeStep","useAgentBuilderContext","Step1About","Step2WhenItStepsIn","Step3HowItResponds","Step4HandoverRules","AgentBuilder","props","config","onChange","onStepChange","onDiscard","onSaveDraft","onPublish","onBack","onTestAgent","onGoToDashboard","onCreateSubAgent","onFetchSubAgent","onUpdateSubAgent","onImproveSubAgent","onImproveToolInstructions","onConnectIntegration","rest","value","availableTools","availableSubAgents","availableIntents","availableModels","configToolTemplates","integrationStatus","validation","applicationType","charLimits","isSaving","isPublishing","isLoading","footerHint","disableStepNavigation","debugLog","modalMode","setModalMode","useState","publishingLocal","setPublishingLocal","showLeaveConfirm","setShowLeaveConfirm","savingAndLeaving","setSavingAndLeaving","logAction","useCallback","action","args","handleChange","patch","handleStepChange","step","handleSaveDraft","handlePublish","handleBack","handleDiscardAndLeave","handleSaveDraftAndLeave","result","handleTestAgent","handleGoToDashboard","handleCreateSubAgent","draft","handleConfirmGoLive","jsx","AgentBuilderProvider","BuilderRoot","AgentBuilderTopBar","Main","Rail","StepRail","Content","Spinner","COLORS","ContentCard","StepScroll","AgentBuilderFooter","GoLiveModal","DiscardModal","UndoToast"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AgentBuilder.js","sources":["../../../../src/components/agent-builder/AgentBuilder.tsx"],"sourcesContent":["import React, { useCallback, useState } from 'react';\nimport { Spinner } from '@src/components/spinner';\nimport { COLORS } from '@src/constants/Theme';\nimport {\n\tAgentBuilderProps,\n\tAgentValue,\n\tSubAgentDraft,\n} from './AgentBuilder.model';\nimport {\n\tBuilderRoot,\n\tContent,\n\tContentCard,\n\tMain,\n\tRail,\n\tStepScroll,\n} from './AgentBuilder.styled';\nimport { AgentBuilderFooter } from './components/AgentBuilderFooter';\nimport { AgentBuilderTopBar } from './components/AgentBuilderTopBar';\nimport { DiscardModal } from './components/DiscardModal';\nimport { GoLiveModal, GoLiveModalMode } from './components/GoLiveModal';\nimport { StepRail } from './components/StepRail';\nimport { UndoToast } from './components/UndoToast';\nimport {\n\tAgentBuilderProvider,\n\tuseAgentBuilderContext,\n} from './context/AgentBuilderContext';\nimport { Step1About } from './steps/Step1About';\nimport { Step2WhenItStepsIn } from './steps/Step2WhenItStepsIn';\nimport { Step3HowItResponds } from './steps/Step3HowItResponds';\nimport { Step4HandoverRules } from './steps/Step4HandoverRules';\n\nconst StepContent: React.FC = () => {\n\tconst { activeStep } = useAgentBuilderContext();\n\tswitch (activeStep) {\n\t\tcase 'about':\n\t\t\treturn <Step1About />;\n\t\tcase 'trigger':\n\t\t\treturn <Step2WhenItStepsIn />;\n\t\tcase 'response':\n\t\t\treturn <Step3HowItResponds />;\n\t\tcase 'handover':\n\t\t\treturn <Step4HandoverRules />;\n\t\tdefault:\n\t\t\treturn null;\n\t}\n};\n\n/**\n * 4-step creation/edit wizard body for an AI agent. Presentational and\n * controlled — the consumer owns the `value`, persistence and routing.\n *\n * @example\n * <AgentBuilder\n * value={agent}\n * onChange={(patch) => setAgent({ ...agent, ...patch })}\n * availableTools={tools}\n * availableSubAgents={subAgents}\n * onDiscard={() => router.back()}\n * onSaveDraft={saveDraft}\n * onPublish={publish}\n * />\n */\nexport const AgentBuilder: React.FC<AgentBuilderProps> = (props) => {\n\tconst {\n\t\tconfig,\n\t\tonChange,\n\t\tonStepChange,\n\t\tonDiscard,\n\t\tonSaveDraft,\n\t\tonPublish,\n\t\tonBack,\n\t\tonTestAgent,\n\t\tonGoToDashboard,\n\t\tonCreateSubAgent,\n\t\tonFetchSubAgent,\n\t\tonUpdateSubAgent,\n\t\tonImproveSubAgent,\n\t\tonImproveToolInstructions,\n\t\tonConnectIntegration,\n\t\t...rest\n\t} = props;\n\tconst {\n\t\tvalue,\n\t\tactiveStep,\n\t\tavailableTools,\n\t\tavailableSubAgents,\n\t\tavailableIntents = [],\n\t\tavailableModels = [],\n\t\tconfigToolTemplates,\n\t\tintegrationStatus,\n\t\tvalidation,\n\t\tapplicationType,\n\t\tcharLimits,\n\t\tisSaving,\n\t\tisPublishing,\n\t\tisLoading,\n\t\tfooterHint = 'Changes don’t affect customers until you go live',\n\t\tdisableStepNavigation,\n\t\tdebugLog,\n\t} = config;\n\n\tconst [modalMode, setModalMode] = useState<GoLiveModalMode>(null);\n\tconst [publishingLocal, setPublishingLocal] = useState(false);\n\t// Back was pressed → confirm leaving (save draft / discard) before navigating.\n\tconst [showLeaveConfirm, setShowLeaveConfirm] = useState(false);\n\tconst [savingAndLeaving, setSavingAndLeaving] = useState(false);\n\n\t// Gated debug logging: each handler logs at its start only when `debugLog`.\n\tconst logAction = useCallback(\n\t\t(action: string, ...args: unknown[]) => {\n\t\t\tif (debugLog) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.log(`[AgentBuilder] ${action}`, ...args);\n\t\t\t}\n\t\t},\n\t\t[debugLog],\n\t);\n\n\tconst handleChange = useCallback(\n\t\t(patch: Partial<AgentValue>) => {\n\t\t\tlogAction('onChange', patch);\n\t\t\tonChange(patch);\n\t\t},\n\t\t[logAction, onChange],\n\t);\n\tconst handleStepChange = useCallback(\n\t\t(step: Parameters<NonNullable<typeof onStepChange>>[0]) => {\n\t\t\tlogAction('onStepChange', step);\n\t\t\tonStepChange?.(step);\n\t\t},\n\t\t[logAction, onStepChange],\n\t);\n\tconst handleSaveDraft = useCallback(() => {\n\t\tlogAction('onSaveDraft');\n\t\treturn onSaveDraft();\n\t}, [logAction, onSaveDraft]);\n\tconst handlePublish = useCallback(() => {\n\t\tlogAction('onPublish');\n\t\treturn onPublish();\n\t}, [logAction, onPublish]);\n\t// Back opens the \"Save as draft?\" confirmation rather than leaving directly.\n\tconst handleBack = useCallback(() => {\n\t\tlogAction('onBack');\n\t\tsetShowLeaveConfirm(true);\n\t}, [logAction]);\n\n\t// Modal \"Discard\" defers to the parent's discard handler (same as the top bar).\n\tconst handleDiscardAndLeave = useCallback(() => {\n\t\tlogAction('onDiscardAndLeave');\n\t\tsetShowLeaveConfirm(false);\n\t\tonDiscard();\n\t}, [logAction, onDiscard]);\n\n\tconst handleSaveDraftAndLeave = useCallback(async () => {\n\t\tlogAction('onSaveDraftAndLeave');\n\t\tconst result = onSaveDraft();\n\t\tif (result && typeof (result as Promise<void>).then === 'function') {\n\t\t\tsetSavingAndLeaving(true);\n\t\t\ttry {\n\t\t\t\tawait result;\n\t\t\t} finally {\n\t\t\t\tsetSavingAndLeaving(false);\n\t\t\t}\n\t\t}\n\t\tsetShowLeaveConfirm(false);\n\t\tonBack?.();\n\t}, [logAction, onSaveDraft, onBack]);\n\tconst handleTestAgent = useCallback(() => {\n\t\tlogAction('onTestAgent');\n\t\tonTestAgent?.();\n\t}, [logAction, onTestAgent]);\n\tconst handleGoToDashboard = useCallback(() => {\n\t\tlogAction('onGoToDashboard');\n\t\tonGoToDashboard?.();\n\t}, [logAction, onGoToDashboard]);\n\tconst handleCreateSubAgent = useCallback(\n\t\t(draft: SubAgentDraft) => {\n\t\t\tlogAction('onCreateSubAgent', draft);\n\t\t\treturn onCreateSubAgent\n\t\t\t\t? onCreateSubAgent(draft)\n\t\t\t\t: Promise.reject(new Error('onCreateSubAgent not provided'));\n\t\t},\n\t\t[logAction, onCreateSubAgent],\n\t);\n\n\tconst handleConfirmGoLive = async () => {\n\t\tlogAction('onGoLiveConfirm');\n\t\tconst result = handlePublish();\n\t\tif (result && typeof (result as Promise<void>).then === 'function') {\n\t\t\tsetPublishingLocal(true);\n\t\t\ttry {\n\t\t\t\tawait result;\n\t\t\t\tsetModalMode('success');\n\t\t\t} finally {\n\t\t\t\tsetPublishingLocal(false);\n\t\t\t}\n\t\t} else {\n\t\t\tsetModalMode('success');\n\t\t}\n\t};\n\n\treturn (\n\t\t<AgentBuilderProvider\n\t\t\tvalue={value}\n\t\t\tonChange={handleChange}\n\t\t\tactiveStep={activeStep}\n\t\t\tonStepChange={onStepChange ? handleStepChange : undefined}\n\t\t\tavailableTools={availableTools}\n\t\t\tavailableSubAgents={availableSubAgents}\n\t\t\tavailableIntents={availableIntents}\n\t\t\tavailableModels={availableModels}\n\t\t\tconfigToolTemplates={configToolTemplates}\n\t\t\tintegrationStatus={integrationStatus}\n\t\t\tonConnectIntegration={onConnectIntegration}\n\t\t\tvalidation={validation}\n\t\t\tapplicationType={applicationType}\n\t\t\tcharLimits={charLimits}\n\t\t\tdisableStepNavigation={disableStepNavigation}\n\t\t\tonCreateSubAgent={onCreateSubAgent ? handleCreateSubAgent : undefined}\n\t\t\tonFetchSubAgent={onFetchSubAgent}\n\t\t\tonUpdateSubAgent={onUpdateSubAgent}\n\t\t\tonImproveSubAgent={onImproveSubAgent}\n\t\t\tonImproveToolInstructions={onImproveToolInstructions}\n\t\t>\n\t\t\t<BuilderRoot data-test={rest['data-test'] ?? 'agent-builder'}>\n\t\t\t\t<AgentBuilderTopBar\n\t\t\t\t\tname={value.name}\n\t\t\t\t\tstatus={value.status}\n\t\t\t\t\tonBack={onBack ? handleBack : undefined}\n\t\t\t\t\tonSaveDraft={handleSaveDraftAndLeave}\n\t\t\t\t\tisSaving={isSaving || savingAndLeaving}\n\t\t\t\t/>\n\n\t\t\t\t<Main>\n\t\t\t\t\t<Rail>\n\t\t\t\t\t\t<StepRail />\n\t\t\t\t\t</Rail>\n\t\t\t\t\t<Content>\n\t\t\t\t\t\t{isLoading ? (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t\t\t\theight: '100%',\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Spinner size=\"large\" color={COLORS.stroke.brand} />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<ContentCard>\n\t\t\t\t\t\t\t\t<StepScroll>\n\t\t\t\t\t\t\t\t\t<StepContent />\n\t\t\t\t\t\t\t\t</StepScroll>\n\t\t\t\t\t\t\t\t<AgentBuilderFooter\n\t\t\t\t\t\t\t\t\tfooterHint={footerHint}\n\t\t\t\t\t\t\t\t\tonTestAgent={onTestAgent ? handleTestAgent : undefined}\n\t\t\t\t\t\t\t\t\tonGoLive={() => {\n\t\t\t\t\t\t\t\t\t\tlogAction('onGoLive');\n\t\t\t\t\t\t\t\t\t\tsetModalMode('confirm');\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tisPublishing={isPublishing || publishingLocal}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</ContentCard>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Content>\n\t\t\t\t</Main>\n\n\t\t\t\t<GoLiveModal\n\t\t\t\t\tmode={modalMode}\n\t\t\t\t\tonClose={() => {\n\t\t\t\t\t\tconst wasSuccess = modalMode === 'success';\n\t\t\t\t\t\tsetModalMode(null);\n\t\t\t\t\t\tif (wasSuccess) {\n\t\t\t\t\t\t\thandleGoToDashboard();\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t\tonConfirm={handleConfirmGoLive}\n\t\t\t\t\tonSaveDraft={() => {\n\t\t\t\t\t\tsetModalMode(null);\n\t\t\t\t\t\thandleSaveDraft();\n\t\t\t\t\t}}\n\t\t\t\t\tonGoToDashboard={onGoToDashboard ? handleGoToDashboard : undefined}\n\t\t\t\t\tisPublishing={isPublishing || publishingLocal}\n\t\t\t\t/>\n\n\t\t\t\t<DiscardModal\n\t\t\t\t\topen={showLeaveConfirm}\n\t\t\t\t\tonClose={() => setShowLeaveConfirm(false)}\n\t\t\t\t\tonDiscard={handleDiscardAndLeave}\n\t\t\t\t\tonSaveDraft={handleSaveDraftAndLeave}\n\t\t\t\t\tdisableSaveDraft={!value.name.trim()}\n\t\t\t\t\tisSaving={isSaving || savingAndLeaving}\n\t\t\t\t/>\n\n\t\t\t\t<UndoToast />\n\t\t\t</BuilderRoot>\n\t\t</AgentBuilderProvider>\n\t);\n};\n\nAgentBuilder.displayName = 'AgentBuilder';\n"],"names":["StepContent","activeStep","useAgentBuilderContext","Step1About","Step2WhenItStepsIn","Step3HowItResponds","Step4HandoverRules","AgentBuilder","props","config","onChange","onStepChange","onDiscard","onSaveDraft","onPublish","onBack","onTestAgent","onGoToDashboard","onCreateSubAgent","onFetchSubAgent","onUpdateSubAgent","onImproveSubAgent","onImproveToolInstructions","onConnectIntegration","rest","value","availableTools","availableSubAgents","availableIntents","availableModels","configToolTemplates","integrationStatus","validation","applicationType","charLimits","isSaving","isPublishing","isLoading","footerHint","disableStepNavigation","debugLog","modalMode","setModalMode","useState","publishingLocal","setPublishingLocal","showLeaveConfirm","setShowLeaveConfirm","savingAndLeaving","setSavingAndLeaving","logAction","useCallback","action","args","handleChange","patch","handleStepChange","step","handleSaveDraft","handlePublish","handleBack","handleDiscardAndLeave","handleSaveDraftAndLeave","result","handleTestAgent","handleGoToDashboard","handleCreateSubAgent","draft","handleConfirmGoLive","jsx","AgentBuilderProvider","BuilderRoot","AgentBuilderTopBar","Main","Rail","StepRail","Content","Spinner","COLORS","ContentCard","StepScroll","AgentBuilderFooter","GoLiveModal","wasSuccess","DiscardModal","UndoToast"],"mappings":"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"}
|
|
@@ -80,12 +80,6 @@ export declare const RadioCardText: import('styled-components').StyledComponent<
|
|
|
80
80
|
export declare const ChipWrap: import('styled-components').StyledComponent<"div", any, {
|
|
81
81
|
className: "bik-chip-wrap";
|
|
82
82
|
}, "className">;
|
|
83
|
-
export declare const IntentChip: import('styled-components').StyledComponent<"div", any, {
|
|
84
|
-
className: "bik-intent-chip";
|
|
85
|
-
}, "className">;
|
|
86
|
-
export declare const ChipCloseButton: import('styled-components').StyledComponent<"button", any, {
|
|
87
|
-
className: "bik-chip-close-button";
|
|
88
|
-
}, "className">;
|
|
89
83
|
export declare const AddChipButton: import('styled-components').StyledComponent<"button", any, {
|
|
90
84
|
className: "bik-add-chip-button";
|
|
91
85
|
}, "className">;
|
|
@@ -133,6 +127,9 @@ export declare const RowActionDivider: import('styled-components').StyledCompone
|
|
|
133
127
|
export declare const RowMenuButton: import('styled-components').StyledComponent<"button", any, {
|
|
134
128
|
className: "bik-row-menu-button";
|
|
135
129
|
}, "className">;
|
|
130
|
+
export declare const DraftButtonScope: import('styled-components').StyledComponent<"div", any, {
|
|
131
|
+
className: "bik-draft-button-scope";
|
|
132
|
+
}, "className">;
|
|
136
133
|
export declare const ModalBody: import('styled-components').StyledComponent<"div", any, {
|
|
137
134
|
className: "bik-modal-body";
|
|
138
135
|
}, "className">;
|