@genexus/genexus-ide-ui 1.0.57 → 1.0.59
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/{code-render-d66a13e2.js → code-render-2fb179d6.js} +4 -2
- package/dist/cjs/code-render-2fb179d6.js.map +1 -0
- package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
- package/dist/cjs/gx-ide-chat-container.cjs.entry.js +1 -1
- package/dist/cjs/gx-ide-chat-container.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-create-kb-from-server.cjs.entry.js +4 -0
- package/dist/cjs/gx-ide-create-kb-from-server.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-sc-chat-container.cjs.entry.js +2 -2
- package/dist/cjs/gx-ide-sc-chat-container.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-select-kb-items.cjs.entry.js +12 -5
- package/dist/cjs/gx-ide-select-kb-items.cjs.entry.js.map +1 -1
- package/dist/cjs/index.cjs.js +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/collection/components/_helpers/chat-container/chat-container.css +3 -8
- package/dist/collection/components/_helpers/chat-container/code-render.js +4 -1
- package/dist/collection/components/_helpers/chat-container/code-render.js.map +1 -1
- package/dist/collection/components/select-kb-items/select-kb-items.css +8 -0
- package/dist/collection/components/select-kb-items/select-kb-items.js +12 -4
- package/dist/collection/components/select-kb-items/select-kb-items.js.map +1 -1
- package/dist/collection/components/team-dev/create-kb-from-server/create-kb-from-server.js +4 -0
- package/dist/collection/components/team-dev/create-kb-from-server/create-kb-from-server.js.map +1 -1
- package/dist/collection/showcase/chat-container/chat.showcase.js +1 -1
- package/dist/collection/showcase/chat-container/chat.showcase.js.map +1 -1
- package/dist/components/chat-container.js +1 -1
- package/dist/components/chat-container.js.map +1 -1
- package/dist/components/code-render.js +3 -1
- package/dist/components/code-render.js.map +1 -1
- package/dist/components/gx-ide-create-kb-from-server.js +4 -0
- package/dist/components/gx-ide-create-kb-from-server.js.map +1 -1
- package/dist/components/gx-ide-sc-chat-container.js +1 -1
- package/dist/components/gx-ide-sc-chat-container.js.map +1 -1
- package/dist/components/gx-ide-select-kb-items.js +20 -6
- package/dist/components/gx-ide-select-kb-items.js.map +1 -1
- package/dist/esm/{code-render-67c13139.js → code-render-36275eb4.js} +4 -2
- package/dist/esm/code-render-36275eb4.js.map +1 -0
- package/dist/esm/genexus-ide-ui.js +1 -1
- package/dist/esm/gx-ide-chat-container.entry.js +1 -1
- package/dist/esm/gx-ide-chat-container.entry.js.map +1 -1
- package/dist/esm/gx-ide-create-kb-from-server.entry.js +4 -0
- package/dist/esm/gx-ide-create-kb-from-server.entry.js.map +1 -1
- package/dist/esm/gx-ide-sc-chat-container.entry.js +2 -2
- package/dist/esm/gx-ide-sc-chat-container.entry.js.map +1 -1
- package/dist/esm/gx-ide-select-kb-items.entry.js +12 -5
- package/dist/esm/gx-ide-select-kb-items.entry.js.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
- package/dist/genexus-ide-ui/genexus-ide-ui.esm.js.map +1 -1
- package/dist/genexus-ide-ui/index.esm.js +1 -1
- package/dist/genexus-ide-ui/{p-2d7323a8.entry.js → p-395e9c81.entry.js} +50 -40
- package/dist/genexus-ide-ui/p-395e9c81.entry.js.map +1 -0
- package/dist/genexus-ide-ui/p-85eb72eb.entry.js +85 -0
- package/dist/genexus-ide-ui/p-85eb72eb.entry.js.map +1 -0
- package/dist/genexus-ide-ui/{p-c9fd4853.entry.js → p-8ff555f4.entry.js} +11 -7
- package/dist/genexus-ide-ui/{p-c9fd4853.entry.js.map → p-8ff555f4.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-fc7b3ace.js → p-d6c2e256.js} +2 -1
- package/dist/genexus-ide-ui/{p-fc7b3ace.js.map → p-d6c2e256.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-9e27c0cc.entry.js → p-de589873.entry.js} +4 -3
- package/dist/genexus-ide-ui/{p-9e27c0cc.entry.js.map → p-de589873.entry.js.map} +1 -1
- package/dist/types/components/select-kb-items/select-kb-items.d.ts +4 -0
- package/package.json +1 -1
- package/dist/cjs/code-render-d66a13e2.js.map +0 -1
- package/dist/esm/code-render-67c13139.js.map +0 -1
- package/dist/genexus-ide-ui/p-2d7323a8.entry.js.map +0 -1
- package/dist/genexus-ide-ui/p-bb0eb196.entry.js +0 -85
- package/dist/genexus-ide-ui/p-bb0eb196.entry.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["convertItemsNodeListToFlattenedTreeViewModel","itemsList","checkboxType","itemsListFlattenedTreeViewModel","processNode","item","leaf","_a","nodes","length","checkbox","metaData","JSON","stringify","versionType","type","push","id","toString","metadata","caption","name","checked","expanded","startImgSrc","icon","items","selected","forEach","childNode","convertItemsListToTreeViewModel","itemsListTreeViewModel","order","parseInt","findItemNode","itemNode","result","findItemInArray","itemsNodes","setAllLeafsCheckedFalse","uncheck","unselectAllNodes","unselect","checkItems","idsChecked","itemFind","expandItems","selectItems","idsSelected","searchInNode","node","parents","searchParentsItems","ids","rootItem","results","selectKbItemsCss","CSS_BUNDLES","SYSTEM_SEARCH_ICON","getIconPath","category","colorType","VIEW_AS_TREE_ID","VIEW_AS_LIST_ID","TOGGLE_CHECKBOXES_CHECKED_VALUE","GxIdeSelectKbItems","_GxIdeSelectKbItems__componentLocale","set","this","_GxIdeSelectKbItems_checkedNodesIds","_GxIdeSelectKbItems_chShortcutsEl","_GxIdeSelectKbItems_selectedNodesIds","_GxIdeSelectKbItems_shortcutsSrc","getAssetPath","_GxIdeSelectKbItems_updatedModelList","_GxIdeSelectKbItems_viewItemsAsModel","_GxIdeSelectKbItems_treeViewRenderEl","_GxIdeSelectKbItems_cancelHandler","cancelCallback","_GxIdeSelectKbItems_checkedItemsChangeHandler","async","e","checkedNodesIds","detail","__classPrivateFieldSet","__classPrivateFieldGet","checkedChanged","_GxIdeSelectKbItems_confirmHandler","confirmCallback","_GxIdeSelectKbItems_contextMenuHandler","itemContextMenuCallback","info","isSelected","find","updateItemsProperties","clientX","contextmenuEvent","clientY","selection","_GxIdeSelectKbItems_executeDialogAction","callback","_GxIdeSelectKbItems_patternSearchValueChangedHandler","event","searchPatternValue","_GxIdeSelectKbItems_renderActionButtons","h","dialogActions","map","action","class","part","onClick","call","disabled","loading","_GxIdeSelectKbItems_renderFooter","footer","cancel","select","_GxIdeSelectKbItems_selectedItemsChangeHandler","selectedNodesIds","selectionChanged","_GxIdeSelectKbItems_toggleAndSelectNodesInModelItems","selectedItemsIds","nodesToToggle","newItemsSelected","newItemsExpanded","_GxIdeSelectKbItems_updateViews","_GxIdeSelectKbItems_toggleCheckedNodesInModelItems","newItemsList","nodeVersionsListTreeModel","nodeListFlattenedTreeModel","_GxIdeSelectKbItems_viewItemsAsChangedHandler","selectedViewType","nodesVersionsViewType","_GxIdeSelectKbItems_toggleCheckboxesChangedHandler","toggleCheckboxes","watchNodeListHandler","componentWillLoad","Locale","getComponentStrings","el","value","main","tree","suspendShortcuts","suspend","updateSelection","render","Host","model","src","ref","htmlFor","onChange","checkedValue","onInput","placeholder","header","searchPatternPlaceholder","loaderTitle","loader","title","show","expandableButton","onItemContextmenu","onCheckedItemsChange","onSelectedItemsChange","multiSelection","filter","filterType"],"sources":["src/components/select-kb-items/helpers.tsx","src/components/select-kb-items/select-kb-items.scss?tag=gx-ide-select-kb-items&encapsulation=shadow","src/components/select-kb-items/select-kb-items.tsx"],"sourcesContent":["import { ItemNode, CheckboxType } from \"./select-kb-items\";\nimport { TreeViewItemModel } from \"@genexus/chameleon-controls-library\";\n\nexport const convertItemsNodeListToFlattenedTreeViewModel = (\n itemsList: ItemNode[],\n checkboxType: CheckboxType\n): TreeViewItemModel[] => {\n const itemsListFlattenedTreeViewModel: TreeViewItemModel[] = [];\n\n const processNode = (item: ItemNode) => {\n const leaf = !item.nodes?.length;\n const checkbox =\n checkboxType === \"all\" ||\n (checkboxType === \"custom\" && item.checkbox) ||\n (checkboxType === \"leaf\" && leaf);\n const metaData = JSON.stringify({\n versionType: item.type\n });\n itemsListFlattenedTreeViewModel.push({\n id: item.id.toString(),\n metadata: metaData,\n caption: item.name,\n checked: item.checked,\n checkbox: checkbox,\n expanded: item.expanded,\n startImgSrc: item.icon,\n items: null,\n leaf: leaf,\n selected: item.selected\n });\n\n if (item.nodes) {\n item.nodes.forEach(childNode => processNode(childNode));\n }\n };\n\n itemsList.forEach(item => processNode(item));\n return itemsListFlattenedTreeViewModel;\n};\n\nexport const convertItemsListToTreeViewModel = (\n itemsList: ItemNode[],\n checkboxType: CheckboxType\n): TreeViewItemModel[] => {\n const itemsListTreeViewModel: TreeViewItemModel[] = [];\n itemsList.forEach(item => {\n const leaf = !item.nodes?.length;\n const expanded = item.expanded;\n const icon = item.icon;\n const order = parseInt(item.id);\n const checkbox =\n checkboxType === \"all\" ||\n (checkboxType === \"custom\" && item.checkbox) ||\n (checkboxType === \"leaf\" && leaf);\n const metaData = JSON.stringify({\n versionType: item.type\n });\n itemsListTreeViewModel.push({\n id: item.id.toString(),\n metadata: metaData,\n caption: item.name,\n checkbox: checkbox,\n checked: item.checked,\n order: order,\n selected: item.selected,\n expanded: expanded,\n startImgSrc: icon,\n items: !leaf\n ? convertItemsListToTreeViewModel(item.nodes, checkboxType)\n : null,\n leaf: leaf\n });\n });\n\n return itemsListTreeViewModel;\n};\n\nconst findItemNode = (id: string, item: ItemNode): ItemNode | null => {\n if (item.id === id) {\n return item;\n }\n\n if (item.nodes) {\n for (const itemNode of item.nodes) {\n const result = findItemNode(id, itemNode);\n if (result) {\n return result;\n }\n }\n }\n return null;\n};\n\nfunction findItemInArray(itemsNodes: ItemNode[], id: string): ItemNode | null {\n for (const item of itemsNodes) {\n const result = findItemNode(id, item);\n if (result) {\n return result;\n }\n }\n return null;\n}\nconst setAllLeafsCheckedFalse = (itemsList: ItemNode[]): ItemNode[] => {\n const uncheck = (itemNode: ItemNode) => {\n itemNode.checked = false;\n if (itemNode.nodes?.length) {\n itemNode.nodes.forEach(childNode => uncheck(childNode));\n }\n };\n\n itemsList.forEach(item => uncheck(item));\n return itemsList;\n};\n\nexport const unselectAllNodes = (itemsList: ItemNode[]) => {\n const unselect = (itemNode: ItemNode) => {\n itemNode.selected = false;\n if (itemNode.nodes?.length) {\n itemNode.nodes.forEach(childNode => unselect(childNode));\n }\n };\n\n itemsList.forEach(item => unselect(item));\n};\n\nexport const checkItems = (\n itemsList: ItemNode[],\n idsChecked: string[]\n): ItemNode[] => {\n setAllLeafsCheckedFalse(itemsList);\n idsChecked.forEach(id => {\n const itemFind = findItemInArray(itemsList, id);\n if (itemFind) {\n itemFind.checked = true;\n }\n });\n\n return itemsList;\n};\n\nexport const expandItems = (\n itemsList: ItemNode[],\n idsChecked: string[]\n): ItemNode[] => {\n idsChecked.forEach(id => {\n const itemFind = findItemInArray(itemsList, id);\n if (itemFind) {\n itemFind.expanded = true;\n }\n });\n\n return itemsList;\n};\n\nexport const selectItems = (\n itemsList: ItemNode[],\n idsSelected: string[]\n): ItemNode[] => {\n idsSelected.forEach(id => {\n const itemFind = findItemInArray(itemsList, id);\n if (itemFind) {\n itemFind.selected = true;\n }\n });\n return itemsList;\n};\n\nfunction searchInNode(item: ItemNode, id: string): string[] | null {\n // If the current node is the searched node, we return an empty list (it has no parents in this branch)\n if (item.id === id) {\n return [];\n }\n\n // We traverse each child looking for the target node\n if (item.nodes?.length) {\n for (const node of item.nodes) {\n const parents = searchInNode(node, id);\n if (parents !== null) {\n // If we find it, we include the current node at the beginning of the path and return\n return [item.id, ...parents];\n }\n }\n }\n return null;\n}\n\nexport const searchParentsItems = (\n items: ItemNode[],\n ids: string[]\n): string[] | null => {\n const parents: string[] = [];\n for (const id of ids) {\n for (const rootItem of items) {\n const results = searchInNode(rootItem, id);\n if (results !== null) {\n results.forEach(result => {\n parents.push(result);\n });\n }\n }\n }\n return parents;\n};\n",":host {\n display: grid;\n block-size: 100%;\n grid-template-rows: max-content 1fr max-content;\n}\n\n.section {\n display: contents;\n}\n\n// header\n.view-mode__toggle-checkboxes {\n grid-template-columns: max-content max-content;\n}\n.field__items-view-type {\n align-items: center;\n .label {\n margin-block-start: 0 !important; // WA to center label with radio-group\n }\n}\n.field__toggle-checkboxes {\n .label {\n margin-block-start: 0 !important; // WA to center label with radio-group\n }\n}\n\n.trees {\n position: relative;\n}\n\ngx-ide-loader {\n --mer-surface__elevation--01: var(--mer-color__surface);\n}\n","import {\n Component,\n Element,\n getAssetPath,\n Host,\n h,\n Prop,\n State,\n Watch,\n Method\n} from \"@stencil/core\";\n\nimport {\n ChCheckboxCustomEvent,\n TreeViewItemModel,\n TreeViewItemModelExtended\n} from \"@genexus/chameleon-controls-library\";\n\nimport {\n checkItems,\n convertItemsListToTreeViewModel,\n convertItemsNodeListToFlattenedTreeViewModel,\n expandItems,\n searchParentsItems,\n selectItems,\n unselectAllNodes\n} from \"./helpers\";\nimport { getIconPath, MercuryBundles } from \"@genexus/mercury\";\nimport { Locale } from \"../../common/locale\";\nimport { ContextMenuInfo } from \"../../common/types\";\nimport { RadioGroupItemModel } from \"@genexus/chameleon-controls-library/dist/types/components/radio-group/types\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"chameleon/scrollbar\",\n \"components/tooltip\",\n \"components/tree-view\",\n \"utils/form--full\",\n \"utils/layout\",\n \"utils/spacing\",\n \"utils/typography\"\n];\n\nconst SYSTEM_SEARCH_ICON = getIconPath({\n category: \"system\",\n name: \"search\",\n colorType: \"on-surface\"\n});\n\nconst VIEW_AS_TREE_ID: NodesVersionsViewType = \"tree\";\nconst VIEW_AS_LIST_ID: NodesVersionsViewType = \"list\";\n\nconst TOGGLE_CHECKBOXES_CHECKED_VALUE = \"on\";\n\n@Component({\n tag: \"gx-ide-select-kb-items\",\n styleUrl: \"select-kb-items.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/select-kb-items\"]\n})\nexport class GxIdeSelectKbItems {\n #_componentLocale: any;\n #checkedNodesIds: string[] = [];\n #chShortcutsEl: HTMLChShortcutsElement;\n #selectedNodesIds: string[] = [];\n #shortcutsSrc = getAssetPath(\n `./gx-ide-assets/select-kb-items/shortcuts.json`\n );\n #updatedModelList: ItemNode[] = [];\n\n #viewItemsAsModel: RadioGroupItemModel[];\n\n @Element() el: HTMLGxIdeSelectKbItemsElement;\n #treeViewRenderEl: HTMLChTreeViewRenderElement;\n\n /**\n * Represents the nodes list model\n */\n @State() nodeListFlattenedTreeModel: TreeViewItemModel[] = [];\n\n /**\n * To show a loader when the component is loading\n */\n @State() loading: boolean = true;\n\n /**\n * View type for the nodes.\n */\n @State() nodesVersionsViewType: NodesVersionsViewType = \"tree\";\n\n /**\n * Represents the nodes tree model\n */\n @State() nodeVersionsListTreeModel: TreeViewItemModel[] = [];\n\n /**\n * \"Search Pattern\" input value, used to filter the nodes tree/list.\n */\n @State() searchPatternValue: string = null;\n\n /**\n * It maps to the ch-tree-view-render \"toggleCheckboxes\" property.\n */\n @State() toggleCheckboxes: boolean = true;\n\n /**\n * Callback emitted when the 'cancel' button is pressed\n */\n @Prop() readonly cancelCallback?: () => Promise<void>;\n /**\n * Defines which nodes of the component have checkboxes.\n */\n @Prop() readonly checkboxType: CheckboxType;\n\n /**\n * Callback emitted when the items checked items change\n */\n @Prop() readonly checkedChanged?: (checkedItems: string[]) => Promise<void>;\n\n /**\n * Callback emitted when the 'select' button is pressed\n */\n @Prop() readonly confirmCallback?: (checkedItems: string[]) => Promise<void>;\n\n /**\n * Set of additional actions (callbacks) to those already provided by default by the selector (cancelCallback and selectCallback)\n */\n @Prop() readonly dialogActions: DialogAction[] = [];\n\n /**\n * Callback emitted when the user right click on an item\n */\n @Prop() readonly itemContextMenuCallback: (\n info: ContextMenuInfo\n ) => Promise<void>;\n\n /**\n * Represents the itemLis list model\n */\n @Prop() readonly itemsList: ItemNode[] = [];\n\n @Watch(\"itemsList\")\n watchNodeListHandler(newItemsList: ItemNode[]) {\n if (newItemsList.length > 0) {\n this.loading = false;\n }\n this.#updateViews(newItemsList);\n }\n\n /**\n * This define if the selection is unique or not\n */\n @Prop() readonly multiSelection?: boolean = false;\n\n /**\n * Callback emitted when the items selection change\n */\n @Prop() readonly selectionChanged?: (selectedItem: string[]) => Promise<void>;\n\n async componentWillLoad() {\n this.#_componentLocale = await Locale.getComponentStrings(this.el);\n this.#viewItemsAsModel = [\n { value: VIEW_AS_TREE_ID, caption: this.#_componentLocale.main.tree },\n { value: VIEW_AS_LIST_ID, caption: \"List\" }\n ];\n this.watchNodeListHandler(this.itemsList);\n }\n\n /**\n * Suspends or reactivates the shortcuts\n */\n @Method()\n async suspendShortcuts(suspendShortcuts: boolean) {\n if (suspendShortcuts) {\n this.#chShortcutsEl.suspend = true;\n } else {\n this.#chShortcutsEl.suspend = false;\n }\n }\n\n /**\n * Allow to update the selected items\n */\n @Method()\n async updateSelection(selectedItemsIds: string[]) {\n // first clear selected\n this.#treeViewRenderEl.updateItemsProperties(this.#selectedNodesIds, {\n selected: false\n });\n // then select\n this.#treeViewRenderEl.updateItemsProperties(selectedItemsIds, {\n selected: true\n });\n }\n\n #cancelHandler = () => {\n if (this.cancelCallback) {\n this.cancelCallback();\n }\n };\n\n #checkedItemsChangeHandler = async (\n e: CustomEvent<Map<string, TreeViewItemModelExtended>>\n ) => {\n const checkedNodesIds: string[] = [];\n e.detail.forEach(node => {\n node.item.checked && checkedNodesIds.push(node.item.id);\n });\n this.#checkedNodesIds = checkedNodesIds;\n this.#updatedModelList = checkItems(this.itemsList, this.#checkedNodesIds);\n\n if (this.checkedChanged) {\n this.checkedChanged(this.#checkedNodesIds);\n }\n };\n\n #confirmHandler = () => {\n if (this.confirmCallback) {\n this.confirmCallback(this.#checkedNodesIds);\n }\n };\n\n #contextMenuHandler = async (\n e: CustomEvent<{\n id: string;\n itemRef: HTMLChTreeViewItemElement;\n metadata: string;\n contextmenuEvent: PointerEvent;\n }>\n ) => {\n if (this.itemContextMenuCallback) {\n let info: ContextMenuInfo;\n const isSelected = this.#selectedNodesIds.find(id => id === e.detail.id);\n if (!this.#selectedNodesIds.length || !isSelected) {\n await this.#treeViewRenderEl.updateItemsProperties(\n this.#selectedNodesIds,\n { selected: false }\n );\n await this.#treeViewRenderEl.updateItemsProperties([e.detail.id], {\n selected: true\n });\n info = {\n clientX: e.detail.contextmenuEvent.clientX,\n clientY: e.detail.contextmenuEvent.clientY,\n selection: [e.detail.id]\n };\n } else {\n info = {\n clientX: e.detail.contextmenuEvent.clientX,\n clientY: e.detail.contextmenuEvent.clientY,\n selection: this.#selectedNodesIds\n };\n }\n this.itemContextMenuCallback(info);\n }\n };\n\n #executeDialogAction = (\n callback: (checkedNodesIds: string[], selectedNodesIds: string[]) => void\n ) => {\n return () => {\n callback(this.#checkedNodesIds, this.#selectedNodesIds);\n };\n };\n\n #patternSearchValueChangedHandler = (\n event: CustomEvent<string> | InputEvent\n ) => {\n this.searchPatternValue = event.detail.toString();\n };\n\n #renderActionButtons = (): HTMLElement[] => {\n return (\n <div>\n {this.dialogActions.map(action => {\n return (\n <button\n class={\"button-tertiary\"}\n part={`button button-${action.name}`}\n onClick={this.#executeDialogAction(action.callback)}\n disabled={this.loading}\n >\n {action.name}\n </button>\n );\n })}\n </div>\n );\n };\n\n #renderFooter = (): HTMLElement => {\n return (\n <footer class=\"footer control-footer-with-border spacing-body-inline spacing-body-block-end control-footer-space-between\">\n {this.#renderActionButtons()}\n <div class=\"buttons-spacer \">\n {this.cancelCallback && (\n <button\n class={\"button-secondary\"}\n part={\"cancel-button\"}\n onClick={this.#cancelHandler}\n disabled={this.loading}\n >\n {this.#_componentLocale.footer.cancel}\n </button>\n )}\n {this.confirmCallback && (\n <button\n class={\"button-primary\"}\n part={\"confirm-button\"}\n onClick={this.#confirmHandler}\n disabled={this.loading}\n >\n {this.#_componentLocale.footer.select}\n </button>\n )}\n </div>\n </footer>\n );\n };\n\n #selectedItemsChangeHandler = (\n e: CustomEvent<TreeViewItemModelExtended[]>\n ) => {\n const selectedNodesIds: string[] = [];\n unselectAllNodes(this.itemsList);\n e.detail.forEach(node => {\n selectedNodesIds.push(node.item.id);\n });\n this.#selectedNodesIds = selectedNodesIds;\n if (this.selectionChanged) {\n this.selectionChanged(this.#selectedNodesIds);\n }\n\n this.#updatedModelList = selectItems(this.itemsList, selectedNodesIds);\n };\n\n #toggleAndSelectNodesInModelItems = async (selectedItemsIds: string[]) => {\n const nodesToToggle = searchParentsItems(this.itemsList, selectedItemsIds);\n const newItemsSelected = selectItems(this.itemsList, selectedItemsIds);\n const newItemsExpanded = expandItems(newItemsSelected, nodesToToggle);\n this.#updateViews(newItemsExpanded);\n };\n\n #toggleCheckedNodesInModelItems = async (selectedItemsIds: string[]) => {\n const nodesToToggle = searchParentsItems(this.itemsList, selectedItemsIds);\n const newItemsExpanded = expandItems(this.itemsList, nodesToToggle);\n this.#updateViews(newItemsExpanded);\n };\n\n #updateViews = (newItemsList: ItemNode[]) => {\n this.nodeVersionsListTreeModel = convertItemsListToTreeViewModel(\n newItemsList,\n this.checkboxType\n );\n\n this.nodeListFlattenedTreeModel =\n convertItemsNodeListToFlattenedTreeViewModel(\n newItemsList,\n this.checkboxType\n );\n };\n\n #viewItemsAsChangedHandler = async (event: CustomEvent<string>) => {\n const selectedViewType = event.detail as NodesVersionsViewType;\n this.nodesVersionsViewType = selectedViewType;\n if (this.nodesVersionsViewType === \"tree\") {\n await this.#toggleAndSelectNodesInModelItems(this.#selectedNodesIds);\n await this.#toggleCheckedNodesInModelItems(this.#checkedNodesIds);\n }\n this.#updateViews(this.#updatedModelList);\n };\n\n #toggleCheckboxesChangedHandler = (\n event: ChCheckboxCustomEvent<string> | InputEvent\n ) => {\n this.toggleCheckboxes = event.detail === TOGGLE_CHECKBOXES_CHECKED_VALUE;\n };\n\n render() {\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <ch-shortcuts\n src={this.#shortcutsSrc}\n ref={(el: HTMLChShortcutsElement) =>\n (this.#chShortcutsEl = el as HTMLChShortcutsElement)\n }\n ></ch-shortcuts>\n <section class=\"section\">\n <header class=\"control-header field-group spacing-body-block-start spacing-body-inline\">\n <div class=\"field-group view-mode__toggle-checkboxes\">\n <div class=\"field field-inline field__items-view-type\">\n <label class=\"label\" htmlFor=\"view-mode\">\n Select view mode:\n </label>\n <ch-radio-group-render\n class=\"radio-group\"\n id=\"view-mode\"\n model={this.#viewItemsAsModel}\n onChange={this.#viewItemsAsChangedHandler}\n value={this.#viewItemsAsModel[0].value}\n ></ch-radio-group-render>\n </div>\n\n {this.checkboxType !== \"none\" && (\n <div class=\"field field-inline field__toggle-checkboxes\">\n <label class=\"label\" htmlFor=\"toggle-checkboxes\">\n Toggle Checkboxes\n </label>\n <ch-checkbox\n class=\"checkbox\"\n id=\"toggle-checkboxes\"\n checkedValue={TOGGLE_CHECKBOXES_CHECKED_VALUE}\n value={TOGGLE_CHECKBOXES_CHECKED_VALUE}\n onInput={this.#toggleCheckboxesChangedHandler}\n ></ch-checkbox>\n </div>\n )}\n </div>\n\n <ch-edit\n class=\"input pattern-filter\"\n placeholder={\n this.#_componentLocale.header.searchPatternPlaceholder\n }\n startImgSrc={SYSTEM_SEARCH_ICON}\n onInput={this.#patternSearchValueChangedHandler}\n ></ch-edit>\n </header>\n\n <div class=\"spacing-body-inline-start trees\">\n {this.loading ? (\n <gx-ide-loader\n loaderTitle={this.#_componentLocale.loader.title}\n show\n class=\"loader\"\n ></gx-ide-loader>\n ) : (\n <ch-tree-view-render\n class=\"tree-view\"\n model={\n this.nodesVersionsViewType === \"tree\"\n ? this.nodeVersionsListTreeModel\n : this.nodeListFlattenedTreeModel\n }\n show-lines={\n this.nodesVersionsViewType === \"tree\" ? \"all\" : \"none\"\n }\n expandableButton={\n this.nodesVersionsViewType === \"tree\" ? \"decorative\" : \"no\"\n }\n onItemContextmenu={this.#contextMenuHandler}\n onCheckedItemsChange={this.#checkedItemsChangeHandler}\n onSelectedItemsChange={this.#selectedItemsChangeHandler}\n multiSelection={this.multiSelection}\n filter={this.searchPatternValue}\n filterType=\"caption\"\n toggleCheckboxes={this.toggleCheckboxes}\n ref={(el: HTMLChTreeViewRenderElement) => {\n this.#treeViewRenderEl = el as HTMLChTreeViewRenderElement;\n }}\n ></ch-tree-view-render>\n )}\n </div>\n {(this.dialogActions.length > 0 ||\n this.cancelCallback ||\n this.confirmCallback) &&\n this.#renderFooter()}\n </section>\n </Host>\n );\n }\n}\n\nexport type CheckboxType = \"none\" | \"all\" | \"leaf\" | \"custom\";\n\nexport type DialogAction = {\n name: string;\n callback: DialogActionCallback;\n};\n\nexport type DialogActionCallback = (...args: any[]) => void;\n\nexport type ItemCommon = {\n icon: string;\n expanded: boolean;\n};\n\nexport type ItemNode = {\n checkbox?: boolean;\n checked?: boolean;\n expanded?: boolean;\n icon?: string;\n id: string;\n name: string;\n nodes?: ItemNode[];\n selected?: boolean;\n type: ItemType;\n};\n\nexport type ItemType = {\n id: string;\n name: string;\n};\n\ntype NodesVersionsViewType = \"tree\" | \"list\";\n"],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { r as t, h as e, H as a } from "./p-2cf37639.js";
|
|
2
|
+
|
|
3
|
+
import { g as o } from "./p-6e4208d8.js";
|
|
4
|
+
|
|
5
|
+
import "./p-c9551186.js";
|
|
6
|
+
|
|
7
|
+
const r = '.chat-container{display:grid;block-size:100%;overflow:auto;grid-template-rows:max-content 1fr max-content;gap:6px;position:relative;--chat-common-border-radius:var(--mer-spacing--2xs);background-color:transparent !important}.section{display:contents}.chat-container__header{padding:var(--mer-spacing--2xs) var(--mer-spacing--2xs) var(--mer-spacing--2xs) var(--mer-spacing--sm);display:flex;align-items:center;gap:var(--mer-spacing--sm);justify-content:space-between}.chat-container__ch-chat{overflow:auto;position:relative;display:grid;padding:0 var(--mer-spacing--xs) var(--mer-spacing--xs) var(--mer-spacing--xs)}.chat-container__header,.chat-container__footer{padding:var(--mer-spacing--2xs) var(--mer-spacing--2xs) var(--mer-spacing--2xs) var(--mer-spacing--sm)}.chat-container__conversation-copied{position:absolute;z-index:1;inline-size:100%;block-size:100%;background:rgba(22, 22, 23, 0.75);backdrop-filter:saturate(180%) blur(20px);display:grid;align-items:center;justify-content:center;text-align:center;padding:32px;--mer-icon__box--md:18px;pointer-events:none;overflow:hidden;animation:fadeIn 100ms ease-in-out forwards;opacity:0}.chat-container__conversation-copied-wrapper{display:flex;align-items:center;gap:var(--mer-spacing--sm)}.chat-container__conversation-copied-wrapper{animation:liftUp var(--mer-timing--fast) ease-in-out forwards;inset-block-start:4px;opacity:0;animation-delay:var(--mer-timing--fast);position:relative}@keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes liftUp{from{opacity:0;inset-block-start:4px}to{opacity:1;inset-block-start:0}}.chat::part(message){position:relative;--copy-button-opacity:0;--copied-to-clipboard-opacity:0;--date-opacity:1}.chat::part(message__content){font-size:13px !important;line-height:1.3 !important}.chat::part(message__time),.chat::part(message__copy-button){transition:opacity var(--mer-timing--super-fast) ease-in-out}.chat::part(message__time){opacity:var(--date-opacity)}.chat::part(message):hover{position:relative;--copy-button-opacity:1;--date-opacity:0}.chat::part(message__copy-button){position:absolute;z-index:1;inset-inline-end:0;padding:var(--mer-spacing--sm);transition:opacity var(--mer-timing--fast) ease-in-out;opacity:var(--copy-button-opacity)}.chat::part(message__copy-button)::after{content:"";inline-size:var(--mer-icon__box--md);block-size:var(--mer-icon__box--md);background:no-repeat center/var(--mer-icon__size--md) var(--icon-path);--icon-path:var(--icon__system_copy_primary--enabled)}.chat::part(message__copy-button):hover::after{--icon-path:var(--icon__system_copy_primary--hover)}.chat::part(message__copy-button):active::after{--icon-path:var(--icon__system_copy_primary--active)}.chat::part(message__copied-feedback){transition:opacity 150ms ease-in-out;position:absolute;inline-size:100%;block-size:100%;display:flex;align-items:center;justify-content:center;z-index:2;background:rgba(22, 22, 23, 0.8);backdrop-filter:saturate(180%) blur(20px);opacity:var(--copied-to-clipboard-opacity);pointer-events:none}.chat::part(message__copied-feedback-visible){--copied-to-clipboard-opacity:1;pointer-events:visible}.chat::part(send-container){gap:var(--mer-spacing--xs)}.chat::part(send-input){--control__padding-block:7px !important}.chat::part(send-button){border-width:var(--control__border-width);border-style:var(--control__border-style);border-color:var(--control__border-color);border-radius:var(--control__border-radius);inline-size:32px;block-size:32px;background:no-repeat center/var(--mer-icon__box--md) var(--icon-path);--icon-path:var(--icon__system_send_primary--enabled)}.chat::part(send-button):hover{--icon-path:var(--icon__system_send_primary--hover);--control__border-color:var(--mer-text__primary--hover)}.chat::part(send-button):active{--icon-path:var(--icon__system_send_primary--active);--control__border-color:var(--mer-border-color__primary--active)}.chat::part(message assistant){background-color:var(--elevation-background-color, var(--mer-surface__elevation--01)) !important}.chat::part(message assistant waiting){align-items:center;gap:var(--mer-spacing--md) !important}.button-copy-chat,.button-delete-chat{--control__border-color:transparent !important}.button-delete-chat:hover{filter:brightness(1.3)}.button-delete-chat:active{filter:brightness(0.8)}';
|
|
8
|
+
|
|
9
|
+
const i = [ "resets/box-sizing", "utils/typography", "chameleon/scrollbar", "components/button", "components/icon", "utils/elevation" ];
|
|
10
|
+
|
|
11
|
+
const n = o({
|
|
12
|
+
category: "system",
|
|
13
|
+
name: "copy",
|
|
14
|
+
colorType: "neutral"
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
const c = o({
|
|
18
|
+
category: "system",
|
|
19
|
+
name: "delete-outlined",
|
|
20
|
+
colorType: "error"
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
const s = o({
|
|
24
|
+
category: "objects",
|
|
25
|
+
name: "conversational-flows"
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
const p = class {
|
|
29
|
+
constructor(e) {
|
|
30
|
+
t(this, e);
|
|
31
|
+
this.chatTitle = undefined;
|
|
32
|
+
this.copyConversationCallback = undefined;
|
|
33
|
+
this.deleteConversationCallback = undefined;
|
|
34
|
+
this.displayConversationCopiedMessage = false;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* It will display a feedback message that the conversation has been copied
|
|
38
|
+
*/ async showCopyConversationMessage() {
|
|
39
|
+
this.displayConversationCopiedMessage = true;
|
|
40
|
+
setTimeout((() => {
|
|
41
|
+
this.displayConversationCopiedMessage = false;
|
|
42
|
+
}), 2e3);
|
|
43
|
+
}
|
|
44
|
+
render() {
|
|
45
|
+
const t = this.chatTitle || this.copyConversationCallback || this.deleteConversationCallback;
|
|
46
|
+
const o = this.copyConversationCallback || this.deleteConversationCallback;
|
|
47
|
+
return e(a, {
|
|
48
|
+
class: "chat-container"
|
|
49
|
+
}, e("ch-theme", {
|
|
50
|
+
model: i
|
|
51
|
+
}), e("section", {
|
|
52
|
+
class: "section"
|
|
53
|
+
}, t && e("header", {
|
|
54
|
+
class: "chat-container__header elevation-1 body-italic-m"
|
|
55
|
+
}, this.chatTitle && this.chatTitle, o && e("div", null, this.deleteConversationCallback && e("button", {
|
|
56
|
+
class: "button-secondary button-icon-only button-delete-chat",
|
|
57
|
+
onClick: this.deleteConversationCallback
|
|
58
|
+
}, e("ch-image", {
|
|
59
|
+
class: "icon-md",
|
|
60
|
+
src: c
|
|
61
|
+
})), this.copyConversationCallback && e("button", {
|
|
62
|
+
class: "button-secondary button-icon-only button-copy-chat",
|
|
63
|
+
onClick: this.copyConversationCallback
|
|
64
|
+
}, e("ch-image", {
|
|
65
|
+
class: "icon-md",
|
|
66
|
+
src: n
|
|
67
|
+
})))), e("section", {
|
|
68
|
+
class: "chat-container__ch-chat"
|
|
69
|
+
}, e("slot", null), this.displayConversationCopiedMessage && e("div", {
|
|
70
|
+
class: "chat-container__conversation-copied"
|
|
71
|
+
}, e("div", {
|
|
72
|
+
class: "chat-container__conversation-copied-wrapper"
|
|
73
|
+
}, e("ch-image", {
|
|
74
|
+
class: "icon-md",
|
|
75
|
+
src: s
|
|
76
|
+
}), e("p", {
|
|
77
|
+
class: "body-regular-l"
|
|
78
|
+
}, "conversation copied"))))));
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
p.style = r;
|
|
83
|
+
|
|
84
|
+
export { p as gx_ide_chat_container };
|
|
85
|
+
//# sourceMappingURL=p-85eb72eb.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["chatContainerCss","CSS_BUNDLES","COPY_ICON","getIconPath","category","name","colorType","DELETE_ICON","CONVERSATION_ICON","GxIdeChatContainer","showCopyConversationMessage","this","displayConversationCopiedMessage","setTimeout","render","renderHeader","chatTitle","copyConversationCallback","deleteConversationCallback","renderButtonsGroup","h","Host","class","model","onClick","src"],"sources":["src/components/_helpers/chat-container/chat-container.scss?tag=gx-ide-chat-container","src/components/_helpers/chat-container/chat-container.tsx"],"sourcesContent":[".chat-container {\n display: grid;\n block-size: 100%;\n overflow: auto;\n grid-template-rows: max-content 1fr max-content;\n gap: 6px;\n position: relative;\n --chat-common-border-radius: var(--mer-spacing--2xs);\n\n // force elevation-* class not applying on the host\n background-color: transparent !important;\n}\n.section {\n display: contents;\n}\n\n// header\n.chat-container__header {\n padding: var(--mer-spacing--2xs) var(--mer-spacing--2xs)\n var(--mer-spacing--2xs) var(--mer-spacing--sm);\n display: flex;\n align-items: center;\n gap: var(--mer-spacing--sm);\n justify-content: space-between;\n}\n\n// ch-chat container\n.chat-container__ch-chat {\n overflow: auto;\n position: relative;\n display: grid;\n padding: 0 var(--mer-spacing--xs) var(--mer-spacing--xs)\n var(--mer-spacing--xs);\n}\n\n// footer\n\n// header & footer (common styles)\n.chat-container__header,\n.chat-container__footer {\n padding: var(--mer-spacing--2xs) var(--mer-spacing--2xs)\n var(--mer-spacing--2xs) var(--mer-spacing--sm);\n}\n\n.chat-container__conversation-copied {\n position: absolute;\n z-index: 1;\n inline-size: 100%;\n block-size: 100%;\n background: rgba(22, 22, 23, 0.75);\n backdrop-filter: saturate(180%) blur(20px);\n display: grid;\n align-items: center;\n justify-content: center;\n text-align: center;\n padding: 32px;\n --mer-icon__box--md: 18px;\n pointer-events: none;\n overflow: hidden;\n animation: fadeIn 100ms ease-in-out forwards;\n opacity: 0;\n}\n.chat-container__conversation-copied-wrapper {\n display: flex;\n align-items: center;\n gap: var(--mer-spacing--sm);\n}\n.chat-container__conversation-copied-wrapper {\n animation: liftUp var(--mer-timing--fast) ease-in-out forwards;\n inset-block-start: 4px;\n opacity: 0;\n animation-delay: var(--mer-timing--fast);\n position: relative;\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n@keyframes liftUp {\n from {\n opacity: 0;\n inset-block-start: 4px;\n }\n to {\n opacity: 1;\n inset-block-start: 0;\n }\n}\n\n// - - - - - - - - - - - - - - - - - - - - - - - - - -\n// ch-chat overrides TODO: move this styles to Mercury\n// - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n.chat::part(message) {\n position: relative;\n --copy-button-opacity: 0;\n --copied-to-clipboard-opacity: 0;\n --date-opacity: 1;\n}\n\n.chat::part(message__content) {\n font-size: 13px !important;\n line-height: 1.3 !important;\n}\n\n.chat::part(message__time),\n.chat::part(message__copy-button) {\n transition: opacity var(--mer-timing--super-fast) ease-in-out;\n}\n.chat::part(message__time) {\n opacity: var(--date-opacity);\n}\n.chat::part(message):hover {\n position: relative;\n --copy-button-opacity: 1;\n --date-opacity: 0;\n}\n.chat::part(message__copy-button) {\n position: absolute;\n z-index: 1;\n inset-inline-end: 0;\n padding: var(--mer-spacing--sm); // same as part::(message)\n transition: opacity var(--mer-timing--fast) ease-in-out;\n opacity: var(--copy-button-opacity);\n\n &::after {\n content: \"\";\n inline-size: var(--mer-icon__box--md);\n block-size: var(--mer-icon__box--md);\n background: no-repeat center / var(--mer-icon__size--md) var(--icon-path);\n --icon-path: var(--icon__system_copy_primary--enabled);\n }\n &:hover::after {\n --icon-path: var(--icon__system_copy_primary--hover);\n }\n &:active::after {\n --icon-path: var(--icon__system_copy_primary--active);\n }\n}\n\n// copy button effect\n.chat::part(message__copied-feedback) {\n transition: opacity 150ms ease-in-out;\n position: absolute;\n inline-size: 100%;\n block-size: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 2;\n background: rgba(22, 22, 23, 0.8);\n backdrop-filter: saturate(180%) blur(20px);\n opacity: var(--copied-to-clipboard-opacity);\n pointer-events: none;\n}\n\n.chat::part(message__copied-feedback-visible) {\n --copied-to-clipboard-opacity: 1;\n pointer-events: visible;\n}\n\n// send button\n.chat::part(send-container) {\n gap: var(--mer-spacing--xs);\n}\n.chat::part(send-input) {\n --control__padding-block: 7px !important;\n}\n\n.chat::part(send-button) {\n border-width: var(--control__border-width);\n border-style: var(--control__border-style);\n border-color: var(--control__border-color);\n border-radius: var(--control__border-radius);\n inline-size: 32px;\n block-size: 32px;\n background: no-repeat center / var(--mer-icon__box--md) var(--icon-path);\n --icon-path: var(--icon__system_send_primary--enabled);\n}\n.chat::part(send-button):hover {\n --icon-path: var(--icon__system_send_primary--hover);\n --control__border-color: var(--mer-text__primary--hover);\n}\n.chat::part(send-button):active {\n --icon-path: var(--icon__system_send_primary--active);\n --control__border-color: var(--mer-border-color__primary--active);\n}\n\n// assistant\n\n.chat::part(message assistant) {\n background-color: var(\n --elevation-background-color,\n var(--mer-surface__elevation--01)\n ) !important;\n}\n\n.chat::part(message assistant waiting) {\n align-items: center;\n gap: var(--mer-spacing--md) !important;\n}\n\n.button-copy-chat,\n.button-delete-chat {\n --control__border-color: transparent !important;\n}\n.button-delete-chat {\n &:hover {\n filter: brightness(1.3);\n }\n &:active {\n filter: brightness(0.8);\n }\n}\n","import { Component, Host, h, Prop, Method, State } from \"@stencil/core\";\nimport { MercuryBundles, getIconPath } from \"@genexus/mercury\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"utils/typography\",\n \"chameleon/scrollbar\",\n \"components/button\",\n \"components/icon\",\n \"utils/elevation\"\n];\n\nconst COPY_ICON = getIconPath({\n category: \"system\",\n name: \"copy\",\n colorType: \"neutral\"\n});\nconst DELETE_ICON = getIconPath({\n category: \"system\",\n name: \"delete-outlined\",\n colorType: \"error\"\n});\nconst CONVERSATION_ICON = getIconPath({\n category: \"objects\",\n name: \"conversational-flows\"\n});\n\n@Component({\n tag: \"gx-ide-chat-container\",\n styleUrl: \"chat-container.scss\",\n shadow: false\n})\nexport class GxIdeChatContainer {\n /**\n * The chat title\n */\n @Prop() readonly chatTitle?: string;\n\n /**\n * If true a button for copying the conversation will be render on the header\n */\n @Prop() readonly copyConversationCallback: () => void;\n\n /**\n * If true a button for deleting the conversation will be render on the header\n */\n @Prop() readonly deleteConversationCallback: () => void;\n\n /**\n * Coneration Copied\n */\n @State() displayConversationCopiedMessage: boolean = false;\n\n /**\n * It will display a feedback message that the conversation has been copied\n */\n @Method()\n async showCopyConversationMessage() {\n this.displayConversationCopiedMessage = true;\n setTimeout(() => {\n this.displayConversationCopiedMessage = false;\n }, 2000);\n }\n\n render() {\n const renderHeader =\n this.chatTitle ||\n this.copyConversationCallback ||\n this.deleteConversationCallback;\n\n const renderButtonsGroup =\n this.copyConversationCallback || this.deleteConversationCallback;\n return (\n <Host class=\"chat-container\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <section class=\"section\">\n {renderHeader && (\n <header class=\"chat-container__header elevation-1 body-italic-m\">\n {this.chatTitle && this.chatTitle}\n\n {renderButtonsGroup && (\n <div>\n {this.deleteConversationCallback && (\n <button\n class=\"button-secondary button-icon-only button-delete-chat\"\n onClick={this.deleteConversationCallback}\n >\n <ch-image class=\"icon-md\" src={DELETE_ICON}></ch-image>\n </button>\n )}\n\n {this.copyConversationCallback && (\n <button\n class=\"button-secondary button-icon-only button-copy-chat\"\n onClick={this.copyConversationCallback}\n >\n <ch-image class=\"icon-md\" src={COPY_ICON}></ch-image>\n </button>\n )}\n </div>\n )}\n </header>\n )}\n <section class=\"chat-container__ch-chat\">\n <slot></slot>\n {this.displayConversationCopiedMessage && (\n <div class=\"chat-container__conversation-copied\">\n <div class=\"chat-container__conversation-copied-wrapper\">\n <ch-image class=\"icon-md\" src={CONVERSATION_ICON}></ch-image>\n <p class=\"body-regular-l\">conversation copied</p>\n </div>\n </div>\n )}\n </section>\n {/* <footer class=\"chat-container__footer elevation-1\">footer</footer> */}\n </section>\n </Host>\n );\n }\n}\n"],"mappings":";;;;;;AAAA,MAAMA,IAAmB;;ACGzB,MAAMC,IAA8B,EAClC,qBACA,oBACA,uBACA,qBACA,mBACA;;AAGF,MAAMC,IAAYC,EAAY;EAC5BC,UAAU;EACVC,MAAM;EACNC,WAAW;;;AAEb,MAAMC,IAAcJ,EAAY;EAC9BC,UAAU;EACVC,MAAM;EACNC,WAAW;;;AAEb,MAAME,IAAoBL,EAAY;EACpCC,UAAU;EACVC,MAAM;;;MAQKI,IAAkB;;;;;;4CAmBwB;;;;SAMrD,iCAAMC;IACJC,KAAKC,mCAAmC;IACxCC,YAAW;MACTF,KAAKC,mCAAmC;AAAK,QAC5C;;EAGL,MAAAE;IACE,MAAMC,IACJJ,KAAKK,aACLL,KAAKM,4BACLN,KAAKO;IAEP,MAAMC,IACJR,KAAKM,4BAA4BN,KAAKO;IACxC,OACEE,EAACC,GAAI;MAACC,OAAM;OACVF,EAAA;MAAUG,OAAOtB;QACjBmB,EAAA;MAASE,OAAM;OACZP,KACCK,EAAA;MAAQE,OAAM;OACXX,KAAKK,aAAaL,KAAKK,WAEvBG,KACCC,EAAA,aACGT,KAAKO,8BACJE,EAAA;MACEE,OAAM;MACNE,SAASb,KAAKO;OAEdE,EAAA;MAAUE,OAAM;MAAUG,KAAKlB;SAIlCI,KAAKM,4BACJG,EAAA;MACEE,OAAM;MACNE,SAASb,KAAKM;OAEdG,EAAA;MAAUE,OAAM;MAAUG,KAAKvB;WAO3CkB,EAAA;MAASE,OAAM;OACbF,EAAA,eACCT,KAAKC,oCACJQ,EAAA;MAAKE,OAAM;OACTF,EAAA;MAAKE,OAAM;OACTF,EAAA;MAAUE,OAAM;MAAUG,KAAKjB;QAC/BY,EAAA;MAAGE,OAAM;OAAgB"}
|
|
@@ -37,7 +37,7 @@ var d = undefined && undefined.__classPrivateFieldGet || function(t, e, s, i) {
|
|
|
37
37
|
return s === "m" ? i : s === "a" ? i.call(t) : i ? i.value : e.get(t);
|
|
38
38
|
};
|
|
39
39
|
|
|
40
|
-
var f, p, u, m, b, v, w, g, k, y, M, W, _, x, T, j, C,
|
|
40
|
+
var f, p, u, m, b, v, w, g, k, y, M, W, _, x, T, j, C, S, E, $, P, z, A, I;
|
|
41
41
|
|
|
42
42
|
const L = [ "resets/box-sizing", "utils/form--full", "utils/layout", "utils/typography", "utils/spacing", "components/list-box", "components/tooltip", "chameleon/scrollbar" ];
|
|
43
43
|
|
|
@@ -113,7 +113,7 @@ const N = class {
|
|
|
113
113
|
this.filterValue = t.detail.toLowerCase();
|
|
114
114
|
this.kbsFilteredActionListModel = d(this, b, "f").filter((t => t.caption.toLowerCase().includes(this.filterValue)));
|
|
115
115
|
}));
|
|
116
|
-
|
|
116
|
+
S.set(this, (async () => {
|
|
117
117
|
await this.getGXserverKBsCallback({
|
|
118
118
|
authenticationType: this.connectionData.authenticationType,
|
|
119
119
|
serverUrl: this.connectionData.serverUrl,
|
|
@@ -125,7 +125,7 @@ const N = class {
|
|
|
125
125
|
this.filterValue = "";
|
|
126
126
|
}));
|
|
127
127
|
}));
|
|
128
|
-
|
|
128
|
+
E.set(this, (() => {
|
|
129
129
|
// populate validatableControls with the controls that could have errors.
|
|
130
130
|
const t = [ d(this, W, "f") ];
|
|
131
131
|
t.forEach((t => {
|
|
@@ -178,6 +178,10 @@ const N = class {
|
|
|
178
178
|
return;
|
|
179
179
|
}
|
|
180
180
|
this.localKbNameInputValue = s.caption;
|
|
181
|
+
if (this.versionSelectedType === "Select") {
|
|
182
|
+
this.versionsValueInput = "";
|
|
183
|
+
c(this, v, [], "f");
|
|
184
|
+
}
|
|
181
185
|
}));
|
|
182
186
|
A.set(this, (t => {
|
|
183
187
|
this.versionSelectedType = t.detail;
|
|
@@ -215,11 +219,11 @@ const N = class {
|
|
|
215
219
|
componentDidLoad() {
|
|
216
220
|
d(this, y, "f").focus();
|
|
217
221
|
this.versionSelectedType = d(this, M, "f").value;
|
|
218
|
-
d(this,
|
|
222
|
+
d(this, E, "f").call(this);
|
|
219
223
|
}
|
|
220
224
|
async componentWillLoad() {
|
|
221
225
|
c(this, m, await h.getComponentStrings(this.el), "f");
|
|
222
|
-
await d(this,
|
|
226
|
+
await d(this, S, "f").call(this);
|
|
223
227
|
}
|
|
224
228
|
render() {
|
|
225
229
|
return s(i, {
|
|
@@ -313,10 +317,10 @@ const N = class {
|
|
|
313
317
|
f = new WeakMap, p = new WeakMap, u = new WeakMap, m = new WeakMap, b = new WeakMap,
|
|
314
318
|
v = new WeakMap, w = new WeakMap, g = new WeakMap, k = new WeakMap, y = new WeakMap,
|
|
315
319
|
M = new WeakMap, W = new WeakMap, _ = new WeakMap, x = new WeakMap, T = new WeakMap,
|
|
316
|
-
j = new WeakMap, C = new WeakMap,
|
|
320
|
+
j = new WeakMap, C = new WeakMap, S = new WeakMap, E = new WeakMap, $ = new WeakMap,
|
|
317
321
|
P = new WeakMap, z = new WeakMap, A = new WeakMap, I = new WeakMap;
|
|
318
322
|
|
|
319
323
|
N.style = l;
|
|
320
324
|
|
|
321
325
|
export { N as gx_ide_create_kb_from_server };
|
|
322
|
-
//# sourceMappingURL=p-
|
|
326
|
+
//# sourceMappingURL=p-8ff555f4.entry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["mapKbsModelToActionListModel","kbsData","listBoxItems","forEach","kb","push","id","type","caption","name","createKbFromServerCss","CSS_BUNDLES","GxIdeCreateKbFromServer","_GxIdeCreateKbFromServer_chSearchIcon","set","this","getIconPath","category","colorType","_GxIdeCreateKbFromServer_showMoreIcon","_GxIdeCreateKbFromServer_versionsSelect","value","_GxIdeCreateKbFromServer__componentLocale","_GxIdeCreateKbFromServer_kbsActionListModel","_GxIdeCreateKbFromServer_kbVersions","_GxIdeCreateKbFromServer_shortcutsSrc","getAssetPath","_GxIdeCreateKbFromServer_selectedKbId","_GxIdeCreateKbFromServer_kbNameAlreadyEditedByUser","_GxIdeCreateKbFromServer_searchKbsEl","_GxIdeCreateKbFromServer_versionSelectedTypeEl","_GxIdeCreateKbFromServer_localKBNameEl","_GxIdeCreateKbFromServer_cancelHandler","cancelCallback","_GxIdeCreateKbFromServer_changeConnectionHandler","async","changeConnectionCallback","authenticationType","connectionData","serverUrl","userName","userPassword","_GxIdeCreateKbFromServer_createHandler","versionSelectedType","__classPrivateFieldSet","createKBCallback","selectedKB","__classPrivateFieldGet","versionSelected","localKBName","localKbNameInputValue","versionList","then","formSubmitResult","validatableControls","validateControls","_GxIdeCreateKbFromServer_evaluateTooltipRender","controlReference","_b","_a","get","hasError","_c","message","h","class","actionElement","blockAlign","config","tooltipSettings","inlineAlign","delay","_GxIdeCreateKbFromServer_filterValueChangedHandler","event","filterValue","detail","toLowerCase","kbsFilteredActionListModel","filter","item","includes","_GxIdeCreateKbFromServer_init","getGXserverKBsCallback","result","_GxIdeCreateKbFromServer_initializeValidatableControls","validatableControl","reference","undefined","_GxIdeCreateKbFromServer_inputLocalKbNameHandler","_GxIdeCreateKbFromServer_selectedVersionHandler","selectKBVersionsCallback","length","map","kbVersion","versionsValueInput","versionsPlaceholder","toString","versionSelectedFieldValue","oneVersionSelectedFieldValue","_GxIdeCreateKbFromServer_selectKbChangeHandler","enableSelectVersionsButton","_GxIdeCreateKbFromServer_versionsChangedHandler","_GxIdeCreateKbFromServer_renderFooter","onClick","part","footer","cancel","disabled","createKb","Map","componentDidLoad","focus","call","componentWillLoad","Locale","getComponentStrings","el","render","Host","model","src","ref","chShortcutsEl","header","user","change","startImgSrc","onInput","placeholder","searchKbsPlaceholder","selection","onSelectedItemsChange","onChange","htmlFor","versionsLabel","readonly","versionsPlaceholderDisabled","localKbNameLabel","localKbNamePlaceholder"],"sources":["src/components/team-dev/create-kb-from-server/helpers.ts","src/components/team-dev/create-kb-from-server/create-kb-from-server.scss?tag=gx-ide-create-kb-from-server&encapsulation=shadow","src/components/team-dev/create-kb-from-server/create-kb-from-server.tsx"],"sourcesContent":["import { ActionListItemModel } from \"@genexus/chameleon-controls-library\";\nimport { KBData } from \"./create-kb-from-server\";\n\nexport const mapKbsModelToActionListModel = (\n kbsData: KBData[]\n): ActionListItemModel[] => {\n const listBoxItems: ActionListItemModel[] = [];\n kbsData.forEach(kb => {\n listBoxItems.push({\n id: kb.id,\n type: \"actionable\",\n caption: kb.name\n });\n });\n return listBoxItems;\n};\n",":host {\n display: grid;\n block-size: 100%;\n grid-template-rows: max-content 1fr max-content;\n}\n\n.section {\n display: contents;\n}\n\n// - - - - - - - - - - -\n// Header\n// - - - - - - - - - - -\n\nheader {\n display: grid;\n grid-template-rows: max-content;\n grid-template-columns: 1fr 1fr max-content;\n}\n\n.button-change {\n align-self: center;\n justify-self: end;\n}\n\n// - - - - - - - - - - -\n// Main\n// - - - - - - - - - - -\n\n.main {\n display: grid;\n grid-template-columns: 1fr;\n grid-template-rows: max-content 1fr max-content max-content;\n}\n\n.search-kbs {\n inline-size: 50%;\n}\n\n.versions-container {\n grid-auto-rows: max-content;\n\n &__input {\n display: grid;\n grid-template-columns: 1fr max-content;\n gap: var(--mer-spacing--xs);\n }\n\n .button-icon-only {\n border-color: var(--mer-color__neutral-gray--500);\n border-width: var(--mer-border__width--sm);\n border-radius: var(--mer-border__radius--sm);\n }\n\n .button-icon-only:hover {\n border-color: var(--mer-color__neutral-gray--100);\n }\n}\n","// Stencil\nimport {\n Component,\n Host,\n h,\n Prop,\n Element,\n State,\n getAssetPath\n} from \"@stencil/core\";\n\n// Other Libraries\nimport { getIconPath, MercuryBundles } from \"@genexus/mercury\";\n\n// Custom Imports\nimport { config } from \"../../../common/config\";\nimport { GXServerConnectionData } from \"../connect-gx-server/connect-gx-server\";\nimport { FormSubmitResult } from \"../../../common/types\";\nimport {\n ControlValidation,\n validateControls\n} from \"../../../common/form-validation\";\nimport { Locale } from \"../../../common/locale\";\nimport { mapKbsModelToActionListModel } from \"./helpers\";\nimport {\n ActionListItemActionable,\n ActionListItemModel,\n ActionListItemModelExtended,\n ChActionListRenderCustomEvent,\n ChEditCustomEvent\n} from \"@genexus/chameleon-controls-library\";\nimport { RadioGroupItemModel } from \"@genexus/chameleon-controls-library/dist/types/components/radio-group/types\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"utils/form--full\",\n \"utils/layout\",\n \"utils/typography\",\n \"utils/spacing\",\n \"components/list-box\",\n \"components/tooltip\",\n \"chameleon/scrollbar\"\n];\n\n@Component({\n tag: \"gx-ide-create-kb-from-server\",\n styleUrl: \"create-kb-from-server.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/create-kb-from-server\"]\n})\nexport class GxIdeCreateKbFromServer {\n #chSearchIcon = getIconPath({\n category: \"system\",\n name: \"search\",\n colorType: \"on-surface\"\n });\n\n #showMoreIcon = getIconPath({\n category: \"gemini-tools\",\n name: \"show-more-horizontal\",\n colorType: \"on-elevation\"\n });\n\n #versionsSelect: RadioGroupItemModel[] = [\n { value: \"Trunk\", caption: \"Trunk Version\" },\n { value: \"All\", caption: \"All Versions\" },\n { value: \"Select\", caption: \"Select Version\" }\n ];\n\n [key: string]: any;\n\n #_componentLocale: any;\n #kbsActionListModel: ActionListItemModel[] = [];\n #kbVersions: KBVersion[] = [];\n #shortcutsSrc = getAssetPath(\n `./gx-ide-assets/create-kb-from-server/shortcuts.json`\n );\n #selectedKbId: string;\n #kbNameAlreadyEditedByUser: boolean = false;\n\n #searchKbsEl!: HTMLChEditElement;\n #versionSelectedTypeEl: HTMLChRadioGroupRenderElement;\n\n @Element() el: HTMLGxIdeCreateKbFromServerElement;\n\n #localKBNameEl!: HTMLChEditElement;\n\n /**\n * State to enable/disable the select versions button\n */\n @State() enableSelectVersionsButton: boolean = false;\n\n /**\n * The current kbn name value.\n */\n @State() localKbNameInputValue: string = \"\";\n\n /**\n * State to store the filter input value to filter the list-box\n */\n @State() filterValue: string = \"\";\n\n /**\n * KBs filtered\n */\n @State() kbsFilteredActionListModel: ActionListItemModel[] = [];\n\n @State() validatableControls = new Map<string, ControlValidation>();\n\n /**\n * The version selected type\n */\n @State() versionSelectedType: VersionOption;\n\n /**\n * String value to show the number of versions selected (\"N versions selected\")\n */\n @State() versionsValueInput: string = \"\";\n\n /**\n * Set of data required when executing any of the callbacks that require a connection to the server.\n */\n @Prop() readonly connectionData: GXServerConnectionData;\n\n /**\n * Callback that is invoked when the dialog is closed\n */\n @Prop() readonly cancelCallback!: () => Promise<void>;\n\n /**\n * The host reopens the gx-ide-connect-server login modal with the previous data, and closes the current modal\n */\n @Prop() readonly changeConnectionCallback: (\n data: GXServerConnectionData\n ) => Promise<void>;\n\n /**\n * Callback that must be invoked when the 'Create KB' button is pressed. Receives the user's parameter selection to create the remote KB locally and ends the dialog.\n */\n @Prop() readonly createKBCallback!: (\n kbInfo: KnowledgeBaseInfo\n ) => Promise<FormSubmitResult>;\n\n /**\n * Callback that must be invoked when invoking the dialog\n */\n @Prop() readonly getGXserverKBsCallback!: (\n data: GXServerConnectionData\n ) => Promise<KBData[]>;\n\n /**\n * Callback invoked by pressing the ellipsis in the version selector. Receives the KB selected by the user, and displays the version selector dialog. Returns a list of versions chosen by the user.\n */\n @Prop() readonly selectKBVersionsCallback: (\n selectedKB: string\n ) => Promise<KBVersion[]>;\n\n componentDidLoad() {\n (this.#searchKbsEl as HTMLElement).focus();\n\n this.versionSelectedType = this.#versionSelectedTypeEl\n .value as VersionOption;\n\n this.#initializeValidatableControls();\n }\n\n async componentWillLoad() {\n this.#_componentLocale = await Locale.getComponentStrings(this.el);\n await this.#init();\n }\n\n #cancelHandler = (): void => {\n this.cancelCallback();\n };\n\n #changeConnectionHandler = async (): Promise<void> => {\n this.changeConnectionCallback({\n authenticationType: this.connectionData.authenticationType,\n serverUrl: this.connectionData.serverUrl,\n userName: this.connectionData.userName,\n userPassword: this.connectionData.userPassword\n });\n };\n\n #createHandler = async (): Promise<void> => {\n if (this.versionSelectedType !== \"Select\") {\n this.#kbVersions = [];\n }\n this.createKBCallback({\n selectedKB: this.#selectedKbId,\n versionSelected: this.versionSelectedType,\n localKBName: this.localKbNameInputValue,\n versionList: this.#kbVersions\n }).then((formSubmitResult: FormSubmitResult) => {\n this.validatableControls = validateControls(\n formSubmitResult,\n this.validatableControls\n );\n });\n };\n\n // TODO: evaluate if this should be a global helper function.\n // It is used on other dialogs as well.\n #evaluateTooltipRender = (\n controlReference: HTMLElement\n ): HTMLChTooltipElement =>\n this.validatableControls?.get(controlReference?.id)?.hasError &&\n this.validatableControls.get(controlReference.id)?.message && (\n <ch-tooltip\n class=\"tooltip\"\n actionElement={controlReference as unknown as HTMLButtonElement}\n blockAlign={config.tooltipSettings.blockAlign}\n inlineAlign={config.tooltipSettings.inlineAlign}\n delay={config.tooltipSettings.delay}\n >\n {this.validatableControls.get(controlReference.id).message}\n </ch-tooltip>\n );\n\n #filterValueChangedHandler = (\n event: ChEditCustomEvent<string> | InputEvent\n ) => {\n this.filterValue = (event.detail as string).toLowerCase();\n this.kbsFilteredActionListModel = this.#kbsActionListModel.filter(\n (item: ActionListItemActionable) =>\n item.caption.toLowerCase().includes(this.filterValue)\n );\n };\n\n #init = async () => {\n await this.getGXserverKBsCallback({\n authenticationType: this.connectionData.authenticationType,\n serverUrl: this.connectionData.serverUrl,\n userName: this.connectionData.userName,\n userPassword: this.connectionData.userPassword\n }).then(result => {\n this.#kbsActionListModel = mapKbsModelToActionListModel(result);\n this.kbsFilteredActionListModel = this.#kbsActionListModel;\n this.filterValue = \"\";\n });\n };\n\n #initializeValidatableControls = () => {\n // populate validatableControls with the controls that could have errors.\n const validatableControls: HTMLElement[] = [this.#localKBNameEl];\n validatableControls.forEach(validatableControl => {\n if (validatableControl.id) {\n this.validatableControls.set(validatableControl.id, {\n reference: validatableControl,\n hasError: false,\n message: undefined\n });\n }\n });\n };\n\n #inputLocalKbNameHandler = (\n event: ChEditCustomEvent<string> | InputEvent\n ) => {\n this.localKbNameInputValue = event.detail as string;\n this.#kbNameAlreadyEditedByUser = true;\n };\n\n #selectedVersionHandler = async () => {\n if (this.selectKBVersionsCallback) {\n await this.selectKBVersionsCallback(this.#selectedKbId).then(result => {\n if (result?.length) {\n this.#kbVersions = result.map(kbVersion => ({\n id: kbVersion.id,\n name: kbVersion.name\n }));\n\n if (result.length === 1 && this.#kbVersions[0].id === 0) {\n this.localKbNameInputValue = this.#selectedKbId;\n this.versionsValueInput =\n this.#_componentLocale.kb.versionsPlaceholder;\n } else if (result.length > 1) {\n this.localKbNameInputValue = this.#selectedKbId;\n this.versionsValueInput = `${result.length.toString()} ${\n this.#_componentLocale.kb.versionSelectedFieldValue\n }`;\n } else {\n this.localKbNameInputValue = `${this.#selectedKbId}_${\n this.#kbVersions[0].name\n }`;\n this.versionsValueInput = `${result[0].name} ${\n this.#_componentLocale.kb.oneVersionSelectedFieldValue\n }`;\n }\n }\n });\n }\n };\n\n #selectKbChangeHandler = (\n event: ChActionListRenderCustomEvent<ActionListItemModelExtended[]>\n ): void => {\n const item = event.detail[0]?.item as ActionListItemActionable;\n if (item === undefined) {\n this.enableSelectVersionsButton = false;\n this.#selectedKbId = undefined;\n return;\n }\n this.enableSelectVersionsButton = true;\n this.#selectedKbId = item.id;\n if (this.#kbNameAlreadyEditedByUser) {\n return;\n }\n this.localKbNameInputValue = item.caption;\n };\n\n #versionsChangedHandler = (event: CustomEvent<string>) => {\n this.versionSelectedType = event.detail as VersionOption;\n };\n\n #renderFooter = () => {\n return (\n <footer class=\"footer control-footer-with-border spacing-body-inline spacing-body-block-end\">\n <div class=\"buttons-spacer\">\n <button\n // cancel button\n class=\"button-secondary\"\n onClick={this.#cancelHandler}\n part=\"button button-cancel\"\n >\n {this.#_componentLocale.footer.cancel}\n </button>\n\n <button\n // create kb button\n class=\"button-primary\"\n onClick={this.enableSelectVersionsButton && this.#createHandler}\n disabled={!this.enableSelectVersionsButton}\n part=\"button button-create-kb\"\n >\n {this.#_componentLocale.footer.createKb}\n </button>\n </div>\n </footer>\n );\n };\n\n render(): void {\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <ch-shortcuts\n src={this.#shortcutsSrc}\n ref={(el: HTMLChShortcutsElement) =>\n (this.chShortcutsEl = el as HTMLChShortcutsElement)\n }\n ></ch-shortcuts>\n\n <section class=\"section\">\n <header class=\"header control-header-with-border space-body spacing-body-inline spacing-body-block-start\">\n <div class=\"field field-block\">\n <label class=\"label\">\n {this.#_componentLocale.header.serverUrl}\n </label>\n <p>{this.connectionData.serverUrl}</p>\n </div>\n\n <div class=\"field field-block\">\n <label class=\"label\">{this.#_componentLocale.header.user}</label>\n <p>{this.connectionData.userName}</p>\n </div>\n\n <button\n class=\"button-tertiary button-change\"\n onClick={this.#changeConnectionHandler}\n >\n {this.#_componentLocale.header.change}\n </button>\n </header>\n\n <section class=\"main field-group spacing-body\">\n <ch-edit\n class=\"input search-kbs\"\n id=\"local-kb-name\"\n startImgSrc={this.#chSearchIcon}\n onInput={this.#filterValueChangedHandler}\n placeholder={this.#_componentLocale.kb.searchKbsPlaceholder}\n ref={el => (this.#searchKbsEl = el as HTMLChEditElement)}\n ></ch-edit>\n\n <ch-action-list-render\n selection=\"single\"\n class=\"list-box\"\n onSelectedItemsChange={this.#selectKbChangeHandler}\n model={this.kbsFilteredActionListModel}\n ></ch-action-list-render>\n\n <div class=\"versions-container field-group\">\n <ch-radio-group-render\n class=\"radio-group\"\n model={this.#versionsSelect}\n onChange={this.#versionsChangedHandler}\n value={this.#versionsSelect[0].value}\n ref={el =>\n (this.#versionSelectedTypeEl =\n el as HTMLChRadioGroupRenderElement)\n }\n ></ch-radio-group-render>\n\n {this.versionSelectedType === \"Select\" && (\n <div class=\"versions-container__item field-group\">\n <div class=\"field field-block\">\n <label class=\"label\" htmlFor=\"control-id-1\">\n {this.#_componentLocale.kb.versionsLabel}\n </label>\n <div class=\"versions-container__input\">\n <ch-edit\n class=\"input\"\n readonly\n placeholder={\n this.enableSelectVersionsButton\n ? this.#_componentLocale.kb.versionsPlaceholder\n : this.#_componentLocale.kb\n .versionsPlaceholderDisabled\n }\n value={this.versionsValueInput}\n ></ch-edit>\n <button\n class=\"button-tertiary button-icon-only\"\n onClick={this.#selectedVersionHandler}\n disabled={!this.enableSelectVersionsButton}\n >\n <ch-image\n src={this.#showMoreIcon}\n class=\"icon-sm\"\n ></ch-image>\n </button>\n </div>\n </div>\n </div>\n )}\n </div>\n\n <div class=\"field field-block\">\n <label class=\"label\" htmlFor=\"localKbName\">\n {this.#_componentLocale.kb.localKbNameLabel}\n </label>\n <ch-edit\n // local kb name\n class=\"input\"\n id=\"local-kb-name\"\n value={this.localKbNameInputValue}\n onInput={this.#inputLocalKbNameHandler}\n placeholder={this.#_componentLocale.kb.localKbNamePlaceholder}\n ref={(el: HTMLChEditElement) =>\n (this.#localKBNameEl = el as HTMLChEditElement)\n }\n ></ch-edit>\n {this.#evaluateTooltipRender(this.#localKBNameEl)}\n </div>\n </section>\n\n {this.#renderFooter()}\n </section>\n </Host>\n );\n }\n}\n\nexport type KBData = {\n id: string;\n name: string;\n};\n\nexport type KBVersion = {\n id: number;\n name: string;\n type?: VersionType;\n};\n\nexport type ConnectionResultData = {\n formResult: FormSubmitResult;\n kbs: KBData[];\n};\n\nexport type KnowledgeBaseInfo = {\n selectedKB: string;\n versionSelected: VersionOption;\n localKBName: string;\n versionList: KBVersion[];\n};\n\nexport type VersionOption = \"Trunk\" | \"All\" | \"Select\";\n\nexport type VersionType = \"Branch\" | \"Frozen\";\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["mapKbsModelToActionListModel","kbsData","listBoxItems","forEach","kb","push","id","type","caption","name","createKbFromServerCss","CSS_BUNDLES","GxIdeCreateKbFromServer","_GxIdeCreateKbFromServer_chSearchIcon","set","this","getIconPath","category","colorType","_GxIdeCreateKbFromServer_showMoreIcon","_GxIdeCreateKbFromServer_versionsSelect","value","_GxIdeCreateKbFromServer__componentLocale","_GxIdeCreateKbFromServer_kbsActionListModel","_GxIdeCreateKbFromServer_kbVersions","_GxIdeCreateKbFromServer_shortcutsSrc","getAssetPath","_GxIdeCreateKbFromServer_selectedKbId","_GxIdeCreateKbFromServer_kbNameAlreadyEditedByUser","_GxIdeCreateKbFromServer_searchKbsEl","_GxIdeCreateKbFromServer_versionSelectedTypeEl","_GxIdeCreateKbFromServer_localKBNameEl","_GxIdeCreateKbFromServer_cancelHandler","cancelCallback","_GxIdeCreateKbFromServer_changeConnectionHandler","async","changeConnectionCallback","authenticationType","connectionData","serverUrl","userName","userPassword","_GxIdeCreateKbFromServer_createHandler","versionSelectedType","__classPrivateFieldSet","createKBCallback","selectedKB","__classPrivateFieldGet","versionSelected","localKBName","localKbNameInputValue","versionList","then","formSubmitResult","validatableControls","validateControls","_GxIdeCreateKbFromServer_evaluateTooltipRender","controlReference","_b","_a","get","hasError","_c","message","h","class","actionElement","blockAlign","config","tooltipSettings","inlineAlign","delay","_GxIdeCreateKbFromServer_filterValueChangedHandler","event","filterValue","detail","toLowerCase","kbsFilteredActionListModel","filter","item","includes","_GxIdeCreateKbFromServer_init","getGXserverKBsCallback","result","_GxIdeCreateKbFromServer_initializeValidatableControls","validatableControl","reference","undefined","_GxIdeCreateKbFromServer_inputLocalKbNameHandler","_GxIdeCreateKbFromServer_selectedVersionHandler","selectKBVersionsCallback","length","map","kbVersion","versionsValueInput","versionsPlaceholder","toString","versionSelectedFieldValue","oneVersionSelectedFieldValue","_GxIdeCreateKbFromServer_selectKbChangeHandler","enableSelectVersionsButton","_GxIdeCreateKbFromServer_versionsChangedHandler","_GxIdeCreateKbFromServer_renderFooter","onClick","part","footer","cancel","disabled","createKb","Map","componentDidLoad","focus","call","componentWillLoad","Locale","getComponentStrings","el","render","Host","model","src","ref","chShortcutsEl","header","user","change","startImgSrc","onInput","placeholder","searchKbsPlaceholder","selection","onSelectedItemsChange","onChange","htmlFor","versionsLabel","readonly","versionsPlaceholderDisabled","localKbNameLabel","localKbNamePlaceholder"],"sources":["src/components/team-dev/create-kb-from-server/helpers.ts","src/components/team-dev/create-kb-from-server/create-kb-from-server.scss?tag=gx-ide-create-kb-from-server&encapsulation=shadow","src/components/team-dev/create-kb-from-server/create-kb-from-server.tsx"],"sourcesContent":["import { ActionListItemModel } from \"@genexus/chameleon-controls-library\";\nimport { KBData } from \"./create-kb-from-server\";\n\nexport const mapKbsModelToActionListModel = (\n kbsData: KBData[]\n): ActionListItemModel[] => {\n const listBoxItems: ActionListItemModel[] = [];\n kbsData.forEach(kb => {\n listBoxItems.push({\n id: kb.id,\n type: \"actionable\",\n caption: kb.name\n });\n });\n return listBoxItems;\n};\n",":host {\n display: grid;\n block-size: 100%;\n grid-template-rows: max-content 1fr max-content;\n}\n\n.section {\n display: contents;\n}\n\n// - - - - - - - - - - -\n// Header\n// - - - - - - - - - - -\n\nheader {\n display: grid;\n grid-template-rows: max-content;\n grid-template-columns: 1fr 1fr max-content;\n}\n\n.button-change {\n align-self: center;\n justify-self: end;\n}\n\n// - - - - - - - - - - -\n// Main\n// - - - - - - - - - - -\n\n.main {\n display: grid;\n grid-template-columns: 1fr;\n grid-template-rows: max-content 1fr max-content max-content;\n}\n\n.search-kbs {\n inline-size: 50%;\n}\n\n.versions-container {\n grid-auto-rows: max-content;\n\n &__input {\n display: grid;\n grid-template-columns: 1fr max-content;\n gap: var(--mer-spacing--xs);\n }\n\n .button-icon-only {\n border-color: var(--mer-color__neutral-gray--500);\n border-width: var(--mer-border__width--sm);\n border-radius: var(--mer-border__radius--sm);\n }\n\n .button-icon-only:hover {\n border-color: var(--mer-color__neutral-gray--100);\n }\n}\n","// Stencil\nimport {\n Component,\n Host,\n h,\n Prop,\n Element,\n State,\n getAssetPath\n} from \"@stencil/core\";\n\n// Other Libraries\nimport { getIconPath, MercuryBundles } from \"@genexus/mercury\";\n\n// Custom Imports\nimport { config } from \"../../../common/config\";\nimport { GXServerConnectionData } from \"../connect-gx-server/connect-gx-server\";\nimport { FormSubmitResult } from \"../../../common/types\";\nimport {\n ControlValidation,\n validateControls\n} from \"../../../common/form-validation\";\nimport { Locale } from \"../../../common/locale\";\nimport { mapKbsModelToActionListModel } from \"./helpers\";\nimport {\n ActionListItemActionable,\n ActionListItemModel,\n ActionListItemModelExtended,\n ChActionListRenderCustomEvent,\n ChEditCustomEvent\n} from \"@genexus/chameleon-controls-library\";\nimport { RadioGroupItemModel } from \"@genexus/chameleon-controls-library/dist/types/components/radio-group/types\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"utils/form--full\",\n \"utils/layout\",\n \"utils/typography\",\n \"utils/spacing\",\n \"components/list-box\",\n \"components/tooltip\",\n \"chameleon/scrollbar\"\n];\n\n@Component({\n tag: \"gx-ide-create-kb-from-server\",\n styleUrl: \"create-kb-from-server.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/create-kb-from-server\"]\n})\nexport class GxIdeCreateKbFromServer {\n #chSearchIcon = getIconPath({\n category: \"system\",\n name: \"search\",\n colorType: \"on-surface\"\n });\n\n #showMoreIcon = getIconPath({\n category: \"gemini-tools\",\n name: \"show-more-horizontal\",\n colorType: \"on-elevation\"\n });\n\n #versionsSelect: RadioGroupItemModel[] = [\n { value: \"Trunk\", caption: \"Trunk Version\" },\n { value: \"All\", caption: \"All Versions\" },\n { value: \"Select\", caption: \"Select Version\" }\n ];\n\n [key: string]: any;\n\n #_componentLocale: any;\n #kbsActionListModel: ActionListItemModel[] = [];\n #kbVersions: KBVersion[] = [];\n #shortcutsSrc = getAssetPath(\n `./gx-ide-assets/create-kb-from-server/shortcuts.json`\n );\n #selectedKbId: string;\n #kbNameAlreadyEditedByUser: boolean = false;\n\n #searchKbsEl!: HTMLChEditElement;\n #versionSelectedTypeEl: HTMLChRadioGroupRenderElement;\n\n @Element() el: HTMLGxIdeCreateKbFromServerElement;\n\n #localKBNameEl!: HTMLChEditElement;\n\n /**\n * State to enable/disable the select versions button\n */\n @State() enableSelectVersionsButton: boolean = false;\n\n /**\n * The current kbn name value.\n */\n @State() localKbNameInputValue: string = \"\";\n\n /**\n * State to store the filter input value to filter the list-box\n */\n @State() filterValue: string = \"\";\n\n /**\n * KBs filtered\n */\n @State() kbsFilteredActionListModel: ActionListItemModel[] = [];\n\n @State() validatableControls = new Map<string, ControlValidation>();\n\n /**\n * The version selected type\n */\n @State() versionSelectedType: VersionOption;\n\n /**\n * String value to show the number of versions selected (\"N versions selected\")\n */\n @State() versionsValueInput: string = \"\";\n\n /**\n * Set of data required when executing any of the callbacks that require a connection to the server.\n */\n @Prop() readonly connectionData: GXServerConnectionData;\n\n /**\n * Callback that is invoked when the dialog is closed\n */\n @Prop() readonly cancelCallback!: () => Promise<void>;\n\n /**\n * The host reopens the gx-ide-connect-server login modal with the previous data, and closes the current modal\n */\n @Prop() readonly changeConnectionCallback: (\n data: GXServerConnectionData\n ) => Promise<void>;\n\n /**\n * Callback that must be invoked when the 'Create KB' button is pressed. Receives the user's parameter selection to create the remote KB locally and ends the dialog.\n */\n @Prop() readonly createKBCallback!: (\n kbInfo: KnowledgeBaseInfo\n ) => Promise<FormSubmitResult>;\n\n /**\n * Callback that must be invoked when invoking the dialog\n */\n @Prop() readonly getGXserverKBsCallback!: (\n data: GXServerConnectionData\n ) => Promise<KBData[]>;\n\n /**\n * Callback invoked by pressing the ellipsis in the version selector. Receives the KB selected by the user, and displays the version selector dialog. Returns a list of versions chosen by the user.\n */\n @Prop() readonly selectKBVersionsCallback: (\n selectedKB: string\n ) => Promise<KBVersion[]>;\n\n componentDidLoad() {\n (this.#searchKbsEl as HTMLElement).focus();\n\n this.versionSelectedType = this.#versionSelectedTypeEl\n .value as VersionOption;\n\n this.#initializeValidatableControls();\n }\n\n async componentWillLoad() {\n this.#_componentLocale = await Locale.getComponentStrings(this.el);\n await this.#init();\n }\n\n #cancelHandler = (): void => {\n this.cancelCallback();\n };\n\n #changeConnectionHandler = async (): Promise<void> => {\n this.changeConnectionCallback({\n authenticationType: this.connectionData.authenticationType,\n serverUrl: this.connectionData.serverUrl,\n userName: this.connectionData.userName,\n userPassword: this.connectionData.userPassword\n });\n };\n\n #createHandler = async (): Promise<void> => {\n if (this.versionSelectedType !== \"Select\") {\n this.#kbVersions = [];\n }\n this.createKBCallback({\n selectedKB: this.#selectedKbId,\n versionSelected: this.versionSelectedType,\n localKBName: this.localKbNameInputValue,\n versionList: this.#kbVersions\n }).then((formSubmitResult: FormSubmitResult) => {\n this.validatableControls = validateControls(\n formSubmitResult,\n this.validatableControls\n );\n });\n };\n\n // TODO: evaluate if this should be a global helper function.\n // It is used on other dialogs as well.\n #evaluateTooltipRender = (\n controlReference: HTMLElement\n ): HTMLChTooltipElement =>\n this.validatableControls?.get(controlReference?.id)?.hasError &&\n this.validatableControls.get(controlReference.id)?.message && (\n <ch-tooltip\n class=\"tooltip\"\n actionElement={controlReference as unknown as HTMLButtonElement}\n blockAlign={config.tooltipSettings.blockAlign}\n inlineAlign={config.tooltipSettings.inlineAlign}\n delay={config.tooltipSettings.delay}\n >\n {this.validatableControls.get(controlReference.id).message}\n </ch-tooltip>\n );\n\n #filterValueChangedHandler = (\n event: ChEditCustomEvent<string> | InputEvent\n ) => {\n this.filterValue = (event.detail as string).toLowerCase();\n this.kbsFilteredActionListModel = this.#kbsActionListModel.filter(\n (item: ActionListItemActionable) =>\n item.caption.toLowerCase().includes(this.filterValue)\n );\n };\n\n #init = async () => {\n await this.getGXserverKBsCallback({\n authenticationType: this.connectionData.authenticationType,\n serverUrl: this.connectionData.serverUrl,\n userName: this.connectionData.userName,\n userPassword: this.connectionData.userPassword\n }).then(result => {\n this.#kbsActionListModel = mapKbsModelToActionListModel(result);\n this.kbsFilteredActionListModel = this.#kbsActionListModel;\n this.filterValue = \"\";\n });\n };\n\n #initializeValidatableControls = () => {\n // populate validatableControls with the controls that could have errors.\n const validatableControls: HTMLElement[] = [this.#localKBNameEl];\n validatableControls.forEach(validatableControl => {\n if (validatableControl.id) {\n this.validatableControls.set(validatableControl.id, {\n reference: validatableControl,\n hasError: false,\n message: undefined\n });\n }\n });\n };\n\n #inputLocalKbNameHandler = (\n event: ChEditCustomEvent<string> | InputEvent\n ) => {\n this.localKbNameInputValue = event.detail as string;\n this.#kbNameAlreadyEditedByUser = true;\n };\n\n #selectedVersionHandler = async () => {\n if (this.selectKBVersionsCallback) {\n await this.selectKBVersionsCallback(this.#selectedKbId).then(result => {\n if (result?.length) {\n this.#kbVersions = result.map(kbVersion => ({\n id: kbVersion.id,\n name: kbVersion.name\n }));\n\n if (result.length === 1 && this.#kbVersions[0].id === 0) {\n this.localKbNameInputValue = this.#selectedKbId;\n this.versionsValueInput =\n this.#_componentLocale.kb.versionsPlaceholder;\n } else if (result.length > 1) {\n this.localKbNameInputValue = this.#selectedKbId;\n this.versionsValueInput = `${result.length.toString()} ${\n this.#_componentLocale.kb.versionSelectedFieldValue\n }`;\n } else {\n this.localKbNameInputValue = `${this.#selectedKbId}_${\n this.#kbVersions[0].name\n }`;\n this.versionsValueInput = `${result[0].name} ${\n this.#_componentLocale.kb.oneVersionSelectedFieldValue\n }`;\n }\n }\n });\n }\n };\n\n #selectKbChangeHandler = (\n event: ChActionListRenderCustomEvent<ActionListItemModelExtended[]>\n ): void => {\n const item = event.detail[0]?.item as ActionListItemActionable;\n if (item === undefined) {\n this.enableSelectVersionsButton = false;\n this.#selectedKbId = undefined;\n return;\n }\n this.enableSelectVersionsButton = true;\n this.#selectedKbId = item.id;\n if (this.#kbNameAlreadyEditedByUser) {\n return;\n }\n this.localKbNameInputValue = item.caption;\n if (this.versionSelectedType === \"Select\") {\n this.versionsValueInput = \"\";\n this.#kbVersions = [];\n }\n };\n\n #versionsChangedHandler = (event: CustomEvent<string>) => {\n this.versionSelectedType = event.detail as VersionOption;\n };\n\n #renderFooter = () => {\n return (\n <footer class=\"footer control-footer-with-border spacing-body-inline spacing-body-block-end\">\n <div class=\"buttons-spacer\">\n <button\n // cancel button\n class=\"button-secondary\"\n onClick={this.#cancelHandler}\n part=\"button button-cancel\"\n >\n {this.#_componentLocale.footer.cancel}\n </button>\n\n <button\n // create kb button\n class=\"button-primary\"\n onClick={this.enableSelectVersionsButton && this.#createHandler}\n disabled={!this.enableSelectVersionsButton}\n part=\"button button-create-kb\"\n >\n {this.#_componentLocale.footer.createKb}\n </button>\n </div>\n </footer>\n );\n };\n\n render(): void {\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <ch-shortcuts\n src={this.#shortcutsSrc}\n ref={(el: HTMLChShortcutsElement) =>\n (this.chShortcutsEl = el as HTMLChShortcutsElement)\n }\n ></ch-shortcuts>\n\n <section class=\"section\">\n <header class=\"header control-header-with-border space-body spacing-body-inline spacing-body-block-start\">\n <div class=\"field field-block\">\n <label class=\"label\">\n {this.#_componentLocale.header.serverUrl}\n </label>\n <p>{this.connectionData.serverUrl}</p>\n </div>\n\n <div class=\"field field-block\">\n <label class=\"label\">{this.#_componentLocale.header.user}</label>\n <p>{this.connectionData.userName}</p>\n </div>\n\n <button\n class=\"button-tertiary button-change\"\n onClick={this.#changeConnectionHandler}\n >\n {this.#_componentLocale.header.change}\n </button>\n </header>\n\n <section class=\"main field-group spacing-body\">\n <ch-edit\n class=\"input search-kbs\"\n id=\"local-kb-name\"\n startImgSrc={this.#chSearchIcon}\n onInput={this.#filterValueChangedHandler}\n placeholder={this.#_componentLocale.kb.searchKbsPlaceholder}\n ref={el => (this.#searchKbsEl = el as HTMLChEditElement)}\n ></ch-edit>\n\n <ch-action-list-render\n selection=\"single\"\n class=\"list-box\"\n onSelectedItemsChange={this.#selectKbChangeHandler}\n model={this.kbsFilteredActionListModel}\n ></ch-action-list-render>\n\n <div class=\"versions-container field-group\">\n <ch-radio-group-render\n class=\"radio-group\"\n model={this.#versionsSelect}\n onChange={this.#versionsChangedHandler}\n value={this.#versionsSelect[0].value}\n ref={el =>\n (this.#versionSelectedTypeEl =\n el as HTMLChRadioGroupRenderElement)\n }\n ></ch-radio-group-render>\n\n {this.versionSelectedType === \"Select\" && (\n <div class=\"versions-container__item field-group\">\n <div class=\"field field-block\">\n <label class=\"label\" htmlFor=\"control-id-1\">\n {this.#_componentLocale.kb.versionsLabel}\n </label>\n <div class=\"versions-container__input\">\n <ch-edit\n class=\"input\"\n readonly\n placeholder={\n this.enableSelectVersionsButton\n ? this.#_componentLocale.kb.versionsPlaceholder\n : this.#_componentLocale.kb\n .versionsPlaceholderDisabled\n }\n value={this.versionsValueInput}\n ></ch-edit>\n <button\n class=\"button-tertiary button-icon-only\"\n onClick={this.#selectedVersionHandler}\n disabled={!this.enableSelectVersionsButton}\n >\n <ch-image\n src={this.#showMoreIcon}\n class=\"icon-sm\"\n ></ch-image>\n </button>\n </div>\n </div>\n </div>\n )}\n </div>\n\n <div class=\"field field-block\">\n <label class=\"label\" htmlFor=\"localKbName\">\n {this.#_componentLocale.kb.localKbNameLabel}\n </label>\n <ch-edit\n // local kb name\n class=\"input\"\n id=\"local-kb-name\"\n value={this.localKbNameInputValue}\n onInput={this.#inputLocalKbNameHandler}\n placeholder={this.#_componentLocale.kb.localKbNamePlaceholder}\n ref={(el: HTMLChEditElement) =>\n (this.#localKBNameEl = el as HTMLChEditElement)\n }\n ></ch-edit>\n {this.#evaluateTooltipRender(this.#localKBNameEl)}\n </div>\n </section>\n\n {this.#renderFooter()}\n </section>\n </Host>\n );\n }\n}\n\nexport type KBData = {\n id: string;\n name: string;\n};\n\nexport type KBVersion = {\n id: number;\n name: string;\n type?: VersionType;\n};\n\nexport type ConnectionResultData = {\n formResult: FormSubmitResult;\n kbs: KBData[];\n};\n\nexport type KnowledgeBaseInfo = {\n selectedKB: string;\n versionSelected: VersionOption;\n localKBName: string;\n versionList: KBVersion[];\n};\n\nexport type VersionOption = \"Trunk\" | \"All\" | \"Select\";\n\nexport type VersionType = \"Branch\" | \"Frozen\";\n"],"mappings":"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"}
|
|
@@ -86,6 +86,7 @@ const mercuryChatMessageRender = (a, o = "You", r = "AI Assistant") => i => i.ro
|
|
|
86
86
|
}, i.content), s ] : [
|
|
87
87
|
// "copy button" before "role" and "time" to hide both on button:focus
|
|
88
88
|
copyButton(i.content, "Copy code", "common-message"), e("p", {
|
|
89
|
+
// TODO: make this string translatable
|
|
89
90
|
part: t
|
|
90
91
|
}, "message copied to clipboard"), e("span", {
|
|
91
92
|
part: `message__role ${i.role}`
|
|
@@ -103,4 +104,4 @@ copyButton(i.content, "Copy code", "common-message"), e("p", {
|
|
|
103
104
|
}) ];
|
|
104
105
|
|
|
105
106
|
export { mercuryCodeRender as a, mercuryChatMessageRender as m };
|
|
106
|
-
//# sourceMappingURL=p-
|
|
107
|
+
//# sourceMappingURL=p-d6c2e256.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["MESSAGE_COPIED_PART_SELECTOR","MESSAGE_COPIED_VISIBLE_PART_SELECTOR","ANIMATION_DOTS","h","width","height","fill","cx","cy","r","opacity","attributeName","values","dur","repeatCount","begin","copy","text","event","stopPropagation","navigator","clipboard","writeText","copiedFeedbackRef","target","nextSibling","copiedFeedbackPart","getAttribute","setAttribute","setTimeout","copyButton","textToCopy","accessibleName","additionalPart","title","class","type","onClick","part","mercuryCodeRender","copyButtonAccessibleName","options","plainText","language","lastNestedChildClass","value","mercuryChatMessageRender","theme","userName","assistantName","messageModel","role","status","content","dateTime","metadata","parts","showIndicator","renderCode"],"sources":["src/components/_helpers/chat-container/code-render.tsx"],"sourcesContent":["import { h } from \"@stencil/core\";\nimport {\n MarkdownViewerCodeRender,\n ChatMessageByRole\n} from \"@genexus/chameleon-controls-library\";\nimport { MarkdownViewerCodeRenderOptions } from \"@genexus/chameleon-controls-library/dist/types/components/markdown-viewer/parsers/types\";\nimport { getIconPath } from \"@genexus/mercury\";\ngetIconPath;\n\nconst MESSAGE_COPIED_PART_SELECTOR = \"message__copied-feedback\";\nconst MESSAGE_COPIED_VISIBLE_PART_SELECTOR = \"message__copied-feedback-visible\";\n\nconst ANIMATION_DOTS = (\n <svg width=\"36\" height=\"8\" fill=\"transparent\">\n <circle\n cx=\"4\"\n cy=\"4\"\n r=\"4\"\n opacity=\"0\"\n fill=\"var(--mer-color__primary--200)\"\n >\n <animate\n attributeName=\"opacity\"\n values=\"0;1;0\"\n dur=\"1s\"\n repeatCount=\"indefinite\"\n />\n </circle>\n <circle\n cx=\"18\"\n cy=\"4\"\n r=\"4\"\n opacity=\"0\"\n fill=\"var(--mer-color__primary--200)\"\n >\n <animate\n attributeName=\"opacity\"\n values=\"0;1;0\"\n dur=\"1s\"\n begin=\"0.15s\"\n repeatCount=\"indefinite\"\n />\n </circle>\n <circle\n cx=\"32\"\n cy=\"4\"\n r=\"4\"\n opacity=\"0\"\n fill=\"var(--mer-color__primary--200)\"\n >\n <animate\n attributeName=\"opacity\"\n values=\"0;1;0\"\n dur=\"1s\"\n begin=\"0.30s\"\n repeatCount=\"indefinite\"\n />\n </circle>\n </svg>\n);\n\nconst copy = (text: string) => (event: Event) => {\n event.stopPropagation();\n\n // 1. Copy message\n navigator.clipboard.writeText(text);\n\n // 2. Display \"copied\" message (expects to be the next sibling!)\n const copiedFeedbackRef = (event.target as HTMLElement)\n .nextSibling as HTMLElement;\n const copiedFeedbackPart = copiedFeedbackRef.getAttribute(\"part\");\n if (copiedFeedbackPart === MESSAGE_COPIED_PART_SELECTOR) {\n copiedFeedbackRef.setAttribute(\n \"part\",\n `${MESSAGE_COPIED_PART_SELECTOR} ${MESSAGE_COPIED_VISIBLE_PART_SELECTOR}`\n );\n\n setTimeout(() => {\n copiedFeedbackRef.setAttribute(\"part\", `${MESSAGE_COPIED_PART_SELECTOR}`);\n }, 1000);\n }\n};\n\nconst copyButton = (\n textToCopy: string,\n accessibleName: string,\n additionalPart: string\n) => {\n return (\n <button\n aria-label={accessibleName}\n title={accessibleName}\n class=\"button-copy-code\"\n type=\"button\"\n onClick={copy(textToCopy)}\n part={`message__copy-button ${additionalPart}`}\n ></button>\n );\n};\n\nexport const mercuryCodeRender =\n (copyButtonAccessibleName: string) =>\n (options: MarkdownViewerCodeRenderOptions): MarkdownViewerCodeRender =>\n (\n <div class=\"code-block-container\">\n <div class=\"code-block-header\">\n {copyButton(\n options.plainText,\n copyButtonAccessibleName,\n \"code-render\"\n )}\n </div>\n <ch-code\n language={options.language}\n lastNestedChildClass={options.lastNestedChildClass}\n value={options.plainText}\n ></ch-code>\n </div>\n );\n\nexport const mercuryChatMessageRender =\n (\n theme: string,\n userName: string = \"You\",\n assistantName: string = \"AI Assistant\"\n ) =>\n (messageModel: ChatMessageByRole<\"assistant\" | \"error\" | \"user\">) =>\n messageModel.role === \"assistant\" && messageModel.status === \"waiting\"\n ? [\n <span part=\"message__processing\">{messageModel.content}</span>,\n ANIMATION_DOTS\n ]\n : [\n // \"copy button\" before \"role\" and \"time\" to hide both on button:focus\n copyButton(\n messageModel.content as string,\n \"Copy code\",\n \"common-message\"\n ),\n <p part={MESSAGE_COPIED_PART_SELECTOR}>\n message copied to clipboard\n </p>,\n <span part={`message__role ${messageModel.role}`}>\n {messageModel.role === \"user\" ? userName : assistantName}\n </span>,\n <time dateTime={messageModel.metadata} part=\"message__time\">\n {messageModel.metadata}\n </time>,\n\n messageModel.role === \"user\" ? (\n <span part=\"message__content user\">{messageModel.content}</span>\n ) : (\n <ch-markdown-viewer\n part={\n messageModel.role === \"assistant\" &&\n (messageModel.status === \"complete\" || !messageModel.status) &&\n !messageModel.parts\n ? `message__content no-error`\n : \"message__content\"\n }\n theme={theme}\n showIndicator={false}\n renderCode={mercuryCodeRender(\"Copy code\")}\n value={messageModel.content as string}\n ></ch-markdown-viewer>\n )\n ];\n"],"mappings":";;;;AASA,MAAMA,IAA+B;;AACrC,MAAMC,IAAuC;;AAE7C,MAAMC,IACJC,EAAA;EAAKC,OAAM;EAAKC,QAAO;EAAIC,MAAK;GAC9BH,EAAA;EACEI,IAAG;EACHC,IAAG;EACHC,GAAE;EACFC,SAAQ;EACRJ,MAAK;GAELH,EAAA;EACEQ,eAAc;EACdC,QAAO;EACPC,KAAI;EACJC,aAAY;KAGhBX,EAAA;EACEI,IAAG;EACHC,IAAG;EACHC,GAAE;EACFC,SAAQ;EACRJ,MAAK;GAELH,EAAA;EACEQ,eAAc;EACdC,QAAO;EACPC,KAAI;EACJE,OAAM;EACND,aAAY;KAGhBX,EAAA;EACEI,IAAG;EACHC,IAAG;EACHC,GAAE;EACFC,SAAQ;EACRJ,MAAK;GAELH,EAAA;EACEQ,eAAc;EACdC,QAAO;EACPC,KAAI;EACJE,OAAM;EACND,aAAY;;;AAMpB,MAAME,OAAQC,KAAkBC;EAC9BA,EAAMC;;IAGNC,UAAUC,UAAUC,UAAUL;;IAG9B,MAAMM,IAAqBL,EAAMM,OAC9BC;EACH,MAAMC,IAAqBH,EAAkBI,aAAa;EAC1D,IAAID,MAAuB1B,GAA8B;IACvDuB,EAAkBK,aAChB,QACA,GAAG5B,KAAgCC;IAGrC4B,YAAW;MACTN,EAAkBK,aAAa,QAAQ,GAAG5B;AAA+B,QACxE;;;;AAIP,MAAM8B,aAAa,CACjBC,GACAC,GACAC,MAGE9B,EAAA;EAAA,cACc6B;EACZE,OAAOF;EACPG,OAAM;EACNC,MAAK;EACLC,SAASrB,KAAKe;EACdO,MAAM,wBAAwBL;;;MAKvBM,oBACVC,KACAC,KAEGtC,EAAA;EAAKgC,OAAM;GACThC,EAAA;EAAKgC,OAAM;GACRL,WACCW,EAAQC,WACRF,GACA,iBAGJrC,EAAA;EACEwC,UAAUF,EAAQE;EAClBC,sBAAsBH,EAAQG;EAC9BC,OAAOJ,EAAQC;;;MAKZI,2BACX,CACEC,GACAC,IAAmB,OACnBC,IAAwB,mBAEzBC,KACCA,EAAaC,SAAS,eAAeD,EAAaE,WAAW,YACzD,EACEjD,EAAA;EAAMmC,MAAK;GAAuBY,EAAaG,UAC/CnD,MAEF;;AAEE4B,WACEoB,EAAaG,SACb,aACA,mBAEFlD,EAAA
|
|
1
|
+
{"version":3,"names":["MESSAGE_COPIED_PART_SELECTOR","MESSAGE_COPIED_VISIBLE_PART_SELECTOR","ANIMATION_DOTS","h","width","height","fill","cx","cy","r","opacity","attributeName","values","dur","repeatCount","begin","copy","text","event","stopPropagation","navigator","clipboard","writeText","copiedFeedbackRef","target","nextSibling","copiedFeedbackPart","getAttribute","setAttribute","setTimeout","copyButton","textToCopy","accessibleName","additionalPart","title","class","type","onClick","part","mercuryCodeRender","copyButtonAccessibleName","options","plainText","language","lastNestedChildClass","value","mercuryChatMessageRender","theme","userName","assistantName","messageModel","role","status","content","dateTime","metadata","parts","showIndicator","renderCode"],"sources":["src/components/_helpers/chat-container/code-render.tsx"],"sourcesContent":["import { h } from \"@stencil/core\";\nimport {\n MarkdownViewerCodeRender,\n ChatMessageByRole\n} from \"@genexus/chameleon-controls-library\";\nimport { MarkdownViewerCodeRenderOptions } from \"@genexus/chameleon-controls-library/dist/types/components/markdown-viewer/parsers/types\";\nimport { getIconPath } from \"@genexus/mercury\";\ngetIconPath;\n\nconst MESSAGE_COPIED_PART_SELECTOR = \"message__copied-feedback\";\nconst MESSAGE_COPIED_VISIBLE_PART_SELECTOR = \"message__copied-feedback-visible\";\n\nconst ANIMATION_DOTS = (\n <svg width=\"36\" height=\"8\" fill=\"transparent\">\n <circle\n cx=\"4\"\n cy=\"4\"\n r=\"4\"\n opacity=\"0\"\n fill=\"var(--mer-color__primary--200)\"\n >\n <animate\n attributeName=\"opacity\"\n values=\"0;1;0\"\n dur=\"1s\"\n repeatCount=\"indefinite\"\n />\n </circle>\n <circle\n cx=\"18\"\n cy=\"4\"\n r=\"4\"\n opacity=\"0\"\n fill=\"var(--mer-color__primary--200)\"\n >\n <animate\n attributeName=\"opacity\"\n values=\"0;1;0\"\n dur=\"1s\"\n begin=\"0.15s\"\n repeatCount=\"indefinite\"\n />\n </circle>\n <circle\n cx=\"32\"\n cy=\"4\"\n r=\"4\"\n opacity=\"0\"\n fill=\"var(--mer-color__primary--200)\"\n >\n <animate\n attributeName=\"opacity\"\n values=\"0;1;0\"\n dur=\"1s\"\n begin=\"0.30s\"\n repeatCount=\"indefinite\"\n />\n </circle>\n </svg>\n);\n\nconst copy = (text: string) => (event: Event) => {\n event.stopPropagation();\n\n // 1. Copy message\n navigator.clipboard.writeText(text);\n\n // 2. Display \"copied\" message (expects to be the next sibling!)\n const copiedFeedbackRef = (event.target as HTMLElement)\n .nextSibling as HTMLElement;\n const copiedFeedbackPart = copiedFeedbackRef.getAttribute(\"part\");\n if (copiedFeedbackPart === MESSAGE_COPIED_PART_SELECTOR) {\n copiedFeedbackRef.setAttribute(\n \"part\",\n `${MESSAGE_COPIED_PART_SELECTOR} ${MESSAGE_COPIED_VISIBLE_PART_SELECTOR}`\n );\n\n setTimeout(() => {\n copiedFeedbackRef.setAttribute(\"part\", `${MESSAGE_COPIED_PART_SELECTOR}`);\n }, 1000);\n }\n};\n\nconst copyButton = (\n textToCopy: string,\n accessibleName: string,\n additionalPart: string\n) => {\n return (\n <button\n aria-label={accessibleName}\n title={accessibleName}\n class=\"button-copy-code\"\n type=\"button\"\n onClick={copy(textToCopy)}\n part={`message__copy-button ${additionalPart}`}\n ></button>\n );\n};\n\nexport const mercuryCodeRender =\n (copyButtonAccessibleName: string) =>\n (options: MarkdownViewerCodeRenderOptions): MarkdownViewerCodeRender =>\n (\n <div class=\"code-block-container\">\n <div class=\"code-block-header\">\n {copyButton(\n options.plainText,\n copyButtonAccessibleName,\n \"code-render\"\n )}\n </div>\n <ch-code\n language={options.language}\n lastNestedChildClass={options.lastNestedChildClass}\n value={options.plainText}\n ></ch-code>\n </div>\n );\n\nexport const mercuryChatMessageRender =\n (\n theme: string,\n userName: string = \"You\",\n assistantName: string = \"AI Assistant\"\n ) =>\n (messageModel: ChatMessageByRole<\"assistant\" | \"error\" | \"user\">) =>\n messageModel.role === \"assistant\" && messageModel.status === \"waiting\"\n ? [\n <span part=\"message__processing\">{messageModel.content}</span>,\n ANIMATION_DOTS\n ]\n : [\n // \"copy button\" before \"role\" and \"time\" to hide both on button:focus\n copyButton(\n messageModel.content as string,\n \"Copy code\",\n \"common-message\"\n ),\n <p\n // TODO: make this string translatable\n part={MESSAGE_COPIED_PART_SELECTOR}\n >\n message copied to clipboard\n </p>,\n <span part={`message__role ${messageModel.role}`}>\n {messageModel.role === \"user\" ? userName : assistantName}\n </span>,\n <time dateTime={messageModel.metadata} part=\"message__time\">\n {messageModel.metadata}\n </time>,\n\n messageModel.role === \"user\" ? (\n <span part=\"message__content user\">{messageModel.content}</span>\n ) : (\n <ch-markdown-viewer\n part={\n messageModel.role === \"assistant\" &&\n (messageModel.status === \"complete\" || !messageModel.status) &&\n !messageModel.parts\n ? `message__content no-error`\n : \"message__content\"\n }\n theme={theme}\n showIndicator={false}\n renderCode={mercuryCodeRender(\"Copy code\")}\n value={messageModel.content as string}\n ></ch-markdown-viewer>\n )\n ];\n"],"mappings":";;;;AASA,MAAMA,IAA+B;;AACrC,MAAMC,IAAuC;;AAE7C,MAAMC,IACJC,EAAA;EAAKC,OAAM;EAAKC,QAAO;EAAIC,MAAK;GAC9BH,EAAA;EACEI,IAAG;EACHC,IAAG;EACHC,GAAE;EACFC,SAAQ;EACRJ,MAAK;GAELH,EAAA;EACEQ,eAAc;EACdC,QAAO;EACPC,KAAI;EACJC,aAAY;KAGhBX,EAAA;EACEI,IAAG;EACHC,IAAG;EACHC,GAAE;EACFC,SAAQ;EACRJ,MAAK;GAELH,EAAA;EACEQ,eAAc;EACdC,QAAO;EACPC,KAAI;EACJE,OAAM;EACND,aAAY;KAGhBX,EAAA;EACEI,IAAG;EACHC,IAAG;EACHC,GAAE;EACFC,SAAQ;EACRJ,MAAK;GAELH,EAAA;EACEQ,eAAc;EACdC,QAAO;EACPC,KAAI;EACJE,OAAM;EACND,aAAY;;;AAMpB,MAAME,OAAQC,KAAkBC;EAC9BA,EAAMC;;IAGNC,UAAUC,UAAUC,UAAUL;;IAG9B,MAAMM,IAAqBL,EAAMM,OAC9BC;EACH,MAAMC,IAAqBH,EAAkBI,aAAa;EAC1D,IAAID,MAAuB1B,GAA8B;IACvDuB,EAAkBK,aAChB,QACA,GAAG5B,KAAgCC;IAGrC4B,YAAW;MACTN,EAAkBK,aAAa,QAAQ,GAAG5B;AAA+B,QACxE;;;;AAIP,MAAM8B,aAAa,CACjBC,GACAC,GACAC,MAGE9B,EAAA;EAAA,cACc6B;EACZE,OAAOF;EACPG,OAAM;EACNC,MAAK;EACLC,SAASrB,KAAKe;EACdO,MAAM,wBAAwBL;;;MAKvBM,oBACVC,KACAC,KAEGtC,EAAA;EAAKgC,OAAM;GACThC,EAAA;EAAKgC,OAAM;GACRL,WACCW,EAAQC,WACRF,GACA,iBAGJrC,EAAA;EACEwC,UAAUF,EAAQE;EAClBC,sBAAsBH,EAAQG;EAC9BC,OAAOJ,EAAQC;;;MAKZI,2BACX,CACEC,GACAC,IAAmB,OACnBC,IAAwB,mBAEzBC,KACCA,EAAaC,SAAS,eAAeD,EAAaE,WAAW,YACzD,EACEjD,EAAA;EAAMmC,MAAK;GAAuBY,EAAaG,UAC/CnD,MAEF;;AAEE4B,WACEoB,EAAaG,SACb,aACA,mBAEFlD,EAAA;;EAEEmC,MAAMtC;GAA4B,gCAIpCG,EAAA;EAAMmC,MAAM,iBAAiBY,EAAaC;GACvCD,EAAaC,SAAS,SAASH,IAAWC,IAE7C9C,EAAA;EAAMmD,UAAUJ,EAAaK;EAAUjB,MAAK;GACzCY,EAAaK,WAGhBL,EAAaC,SAAS,SACpBhD,EAAA;EAAMmC,MAAK;GAAyBY,EAAaG,WAEjDlD,EAAA;EACEmC,MACEY,EAAaC,SAAS,gBACrBD,EAAaE,WAAW,eAAeF,EAAaE,YACpDF,EAAaM,QACV,8BACA;EAENT,OAAOA;EACPU,eAAe;EACfC,YAAYnB,kBAAkB;EAC9BM,OAAOK,EAAaG"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { r as e, h as t, H as n } from "./p-2cf37639.js";
|
|
2
2
|
|
|
3
|
-
import { m as a } from "./p-
|
|
3
|
+
import { m as a } from "./p-d6c2e256.js";
|
|
4
4
|
|
|
5
5
|
import "./p-c9551186.js";
|
|
6
6
|
|
|
@@ -204,7 +204,8 @@ const x = class {
|
|
|
204
204
|
chatTitle: "GeneXus Assistant",
|
|
205
205
|
copyConversationCallback: m(this, g, "f"),
|
|
206
206
|
deleteConversationCallback: m(this, f, "f"),
|
|
207
|
-
ref: e => u(this, p, e, "f")
|
|
207
|
+
ref: e => u(this, p, e, "f"),
|
|
208
|
+
class: "elevation-2"
|
|
208
209
|
}, t("ch-chat", {
|
|
209
210
|
callbacks: c,
|
|
210
211
|
class: "chat",
|
|
@@ -227,4 +228,4 @@ p = new WeakMap, g = new WeakMap, f = new WeakMap;
|
|
|
227
228
|
x.style = h;
|
|
228
229
|
|
|
229
230
|
export { x as gx_ide_sc_chat_container };
|
|
230
|
-
//# sourceMappingURL=p-
|
|
231
|
+
//# sourceMappingURL=p-de589873.entry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["PROCESSING_PLACEHOLDER","timeOut","ASSISTANT_RESPONSE_MARKDOWN","ASSISTANT_RESPONSE_SHORT_MARKDOWN","sendChatToLLM","chatRef","document","querySelector","addNewMessage","id","Date","getTime","role","content","status","setTimeout","updateLastMessage","dummyStreaming","counter","stringToDisplay","mode","streamingCompleted","length","message","substring","files","url","caption","undefined","chatCallbacks","clear","Promise","resolve","uploadImage","stopGeneratingAnswer","clearTimeout","chatTranslations","accessibleName","clearChat","copyResponseButton","downloadCodeButton","imagePicker","removeUploadedImage","sendButton","sendInput","stopGeneratingAnswerButton","placeholder","text","copyCodeButton","processing","sourceFiles","Array","from","_","index","codeFixerRecord","metadata","parts","chatShowcaseCss","CSS_BUNDLES","GxIdeScChatContainer","_GxIdeScChatContainer_chatContainerRef","set","this","_GxIdeScChatContainer_copyConversationCallbackHandler","__classPrivateFieldGet","showCopyConversationMessage","_GxIdeScChatContainer_deleteConversationCallbackHandler","console","log","componentDidLoad","assistantStatus","render","h","Host","model","chatTitle","copyConversationCallback","deleteConversationCallback","ref","el","__classPrivateFieldSet","callbacks","class","generatingResponse","loadingState","markdownTheme","renderItem","mercuryChatMessageRender","isMobile","items","showAdditionalContent","translations","slot"],"sources":["src/showcase/chat-container/callbacks.ts","src/showcase/chat-container/chat-showcase.scss?tag=gx-ide-sc-chat-container&encapsulation=shadow","src/showcase/chat-container/chat.showcase.tsx"],"sourcesContent":["import {\n ChatInternalCallbacks,\n ChatMessage,\n ChatTranslations\n} from \"@genexus/chameleon-controls-library\";\n\nconst PROCESSING_PLACEHOLDER = \"{{ASSISTANT_NAME}}\";\n\nlet timeOut: NodeJS.Timeout;\n\nconst ASSISTANT_RESPONSE_MARKDOWN = `\n ### Code block {#code-block}\n To create code blocks, you’ll use three backticks (\\` \\`\\`\\` \\`) or three tildes (\\`~~~\\`) on the lines before and after the code block.\n \n \\`\\`\\`\n {\n \"firstName\": \"John\",\n \"lastName\": \"Smith\",\n \"age\": 25\n }\n \\`\\`\\`\n \n Another way to create code blocks is to indent every line of the block by at least four spaces or one tab.\n \n <html>\n <head>\n </head>\n </html>\n \n \n #### Syntax Highlighting {#syntax-highlighting}\n This feature allows you to add color highlighting for whatever language your code was written in.\n To add syntax highlighting, specify a language next to the backticks before the fenced code block.\n \n \\`\\`\\`json\n {\n \"firstName\": \"John\",\n \"lastName\": \"Smith\",\n \"age\": 25\n }\n \\`\\`\\`\n \n \\`\\`\\`javascript\n import React from 'react'\n import ReactDOM from 'react-dom'\n import Markdown from 'react-markdown'\n import rehypeHighlight from 'rehype-highlight'\n \n const markdown = \\`\n # Your markdown here\n \\`\n \n ReactDOM.render(\n <Markdown rehypePlugins={[rehypeHighlight]}>{markdown}</Markdown>,\n document.querySelector('#content')\n )\n \\`\\`\\`\n \n ### Horizontal Rules {#horizontal-rules}\n To create a horizontal rule, use three or more asterisks (\\`***\\`), dashes (\\`---\\`), or underscores (\\`___\\`) on a line by themselves.\n `;\n\nconst ASSISTANT_RESPONSE_SHORT_MARKDOWN =\n '\\n### Code block {#code-block}\\nTo create code blocks, you’ll use three backticks (` ``` `) or three tildes (`~~~`) on the lines before and after the code block.\\n\\n```json\\n{\\n \"firstName\": \"John\",\\n \"lastName\": \"Smith\",\\n \"age\": 25\\n}\\n```\\n\\nindex: 5\\nindex: 5\\nindex: 5\\nindex: 5\\nindex: 5\\nindex: 5\\nindex: 5\\n';\n\nconst sendChatToLLM = () => {\n // This is a WA to get the chat reference\n const chatRef = document.querySelector(\"ch-chat\") as HTMLChChatElement;\n\n chatRef.addNewMessage({\n id: `${new Date().getTime()}`,\n role: \"assistant\",\n content: \"Analyzing\",\n status: \"waiting\"\n });\n\n timeOut = setTimeout(() => {\n chatRef.updateLastMessage(\n {\n role: \"assistant\",\n content: \"Processing with Chat with LLMs\",\n status: \"waiting\"\n },\n \"replace\"\n );\n\n timeOut = setTimeout(() => {\n dummyStreaming(chatRef, 20, ASSISTANT_RESPONSE_MARKDOWN, \"replace\");\n }, 200);\n }, 200);\n};\n\nfunction dummyStreaming(\n chatRef: HTMLChChatElement,\n counter: number,\n stringToDisplay: string,\n mode: \"concat\" | \"replace\"\n) {\n timeOut = setTimeout(\n () => {\n const streamingCompleted = counter >= stringToDisplay.length;\n\n chatRef.updateLastMessage(\n {\n role: \"assistant\",\n content: {\n message: stringToDisplay.substring(counter - 20, counter),\n files: streamingCompleted\n ? [\n {\n url: \"https://next.genexus.ai\",\n caption: \"Mars Exploration Contract\"\n },\n {\n url: \"https://gx-chameleon.netlify.app\",\n caption: \"Venus Exploration Contract\"\n }\n ]\n : undefined\n },\n status: streamingCompleted ? \"complete\" : \"streaming\"\n },\n mode\n );\n\n if (!streamingCompleted) {\n dummyStreaming(chatRef, counter + 20, stringToDisplay, \"concat\");\n }\n },\n counter % 200 === 0 ? 50 : 40\n );\n}\n\nexport const chatCallbacks: ChatInternalCallbacks = {\n clear: () => new Promise(resolve => resolve()),\n sendChatToLLM: sendChatToLLM,\n uploadImage: () => new Promise(resolve => resolve(\"\")),\n stopGeneratingAnswer: () => {\n clearTimeout(timeOut);\n\n // This is a WA to get the chat reference\n const chatRef = document.querySelector(\"ch-chat\") as HTMLChChatElement;\n\n chatRef.updateLastMessage(\n {\n role: \"assistant\",\n content: \"\",\n status: \"complete\"\n },\n \"concat\"\n );\n\n return new Promise(resolve => setTimeout(() => resolve, 10));\n }\n};\n\nexport const chatTranslations: ChatTranslations = {\n accessibleName: {\n clearChat: \"Clear chat\",\n copyResponseButton: \"Copy assistant response\",\n downloadCodeButton: \"Download code\",\n imagePicker: \"Select images\",\n removeUploadedImage: \"Remove uploaded image\",\n sendButton: \"Send\",\n sendInput: \"Message\",\n stopGeneratingAnswerButton: \"Stop generating answer\"\n },\n placeholder: {\n sendInput: \"Ask me a question...\"\n },\n text: {\n copyCodeButton: \"Copy code\",\n processing: `Processing with ${PROCESSING_PLACEHOLDER}`,\n sourceFiles: \"Source files:\"\n }\n};\n\nexport const chatRecord: ChatMessage[] = [\n { id: \"1\", role: \"user\", content: \"Hello world\" },\n { id: \"2\", role: \"assistant\", content: ASSISTANT_RESPONSE_MARKDOWN },\n { id: \"3\", role: \"user\", content: \"Hello world 1\" },\n { id: \"4\", role: \"assistant\", content: ASSISTANT_RESPONSE_SHORT_MARKDOWN },\n { id: \"5\", role: \"user\", content: \"Hello world 2\" },\n { id: \"6\", role: \"assistant\", content: ASSISTANT_RESPONSE_SHORT_MARKDOWN },\n { id: \"7\", role: \"user\", content: \"Hello world 3\" },\n { id: \"8\", role: \"assistant\", content: ASSISTANT_RESPONSE_SHORT_MARKDOWN },\n { id: \"9\", role: \"user\", content: \"Hello world 4\" },\n { id: \"10\", role: \"assistant\", content: ASSISTANT_RESPONSE_SHORT_MARKDOWN }\n];\n\nexport const longChatRecord: ChatMessage[] = Array.from(\n { length: 40 },\n (_, index) =>\n index % 2 === 0\n ? {\n id: `index: ${index}`,\n role: \"user\",\n content:\n `index: ${index}` +\n `index: ${index}\\n` +\n `index: ${index}\\n` +\n `index: ${index}\\n` +\n `index: ${index}\\n` +\n `index: ${index}\\n` +\n `index: ${index}\\n`\n }\n : {\n id: `index: ${index}`,\n role: \"assistant\",\n content:\n ASSISTANT_RESPONSE_SHORT_MARKDOWN +\n `\\nindex: ${index}\\n` +\n `index: ${index}\\n` +\n `index: ${index}\\n` +\n `index: ${index}\\n` +\n `index: ${index}\\n` +\n `index: ${index}\\n` +\n `index: ${index}\\n`\n }\n);\n\nexport const codeFixerRecord: ChatMessage[] = [\n {\n id: \"1\",\n role: \"user\",\n content: \"Please give me an example about...\",\n metadata: \"14:55\"\n },\n {\n id: \"2\",\n role: \"assistant\",\n status: \"complete\",\n content:\n \"Action required example. Action required example. Action required example.\",\n metadata: \"14:56\"\n },\n {\n id: \"3\",\n role: \"assistant\",\n status: \"complete\",\n content: \"Warning in request\",\n metadata: \"14:57\",\n parts: \"warning\"\n },\n {\n id: \"4\",\n role: \"error\",\n content: \"Error in Request\",\n metadata: \"14:58\"\n },\n {\n id: \"5\",\n role: \"assistant\",\n status: \"complete\",\n content: \"Warning in request\",\n metadata: \"14:59\",\n parts: \"success\"\n },\n {\n id: \"6\",\n role: \"user\",\n content:\n \"Implement the function calculate_average_grade in grades.py that takes a list of grades as input and returns the average grade as a floating-point number\",\n metadata: \"15:00\"\n },\n {\n id: \"7\",\n role: \"assistant\",\n status: \"complete\",\n content:\n \"You can provide further details or updates regarding your support ticket and its associated code. Your input here helps us better understand and address your issue effectively.\",\n metadata: \"15:01\"\n },\n {\n id: \"8\",\n role: \"assistant\",\n status: \"waiting\",\n content: \"You can provide further details or updates\"\n },\n {\n id: \"9\",\n role: \"assistant\",\n status: \"complete\",\n content: ASSISTANT_RESPONSE_SHORT_MARKDOWN\n }\n];\n",":host {\n block-size: 100%;\n display: grid;\n}\n","import { Component, Host, h, State } from \"@stencil/core\";\nimport { mercuryChatMessageRender } from \"../../components/_helpers/chat-container/code-render\";\nimport { MercuryBundles } from \"@genexus/mercury\";\n\nconst CSS_BUNDLES: MercuryBundles = [\"resets/box-sizing\", \"components/chat\"];\n\nimport { chatCallbacks, chatTranslations, codeFixerRecord } from \"./callbacks\";\n\n@Component({\n tag: \"gx-ide-sc-chat-container\",\n styleUrl: \"chat-showcase.scss\",\n shadow: true\n})\nexport class GxIdeScChatContainer {\n #chatContainerRef!: HTMLGxIdeChatContainerElement;\n\n @State() showAdditionalContent: boolean = false;\n @State() conversationCopied: boolean = false;\n @State() assistantStatus: string = \"Getting Data\";\n\n #copyConversationCallbackHandler = () => {\n this.#chatContainerRef.showCopyConversationMessage();\n };\n\n #deleteConversationCallbackHandler = () => {\n console.log(\"delete messages\");\n };\n\n componentDidLoad() {\n setTimeout(() => {\n this.assistantStatus = \"Creating Data Base..\";\n }, 1000);\n }\n\n render() {\n return (\n <Host>\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <gx-ide-chat-container\n chatTitle=\"GeneXus Assistant\"\n copyConversationCallback={this.#copyConversationCallbackHandler}\n deleteConversationCallback={this.#deleteConversationCallbackHandler}\n ref={el =>\n (this.#chatContainerRef = el as HTMLGxIdeChatContainerElement)\n }\n >\n <ch-chat\n callbacks={chatCallbacks}\n class=\"chat\"\n generatingResponse={false}\n loadingState=\"all-records-loaded\"\n markdownTheme=\"mercury/markdown-viewer\"\n renderItem={mercuryChatMessageRender(\n \"mercury/markdown-viewer\",\n \"Bruno\",\n \"Gx Assistant\"\n )}\n isMobile={false}\n items={codeFixerRecord}\n showAdditionalContent={this.showAdditionalContent}\n translations={chatTranslations}\n >\n <div slot=\"additional-content\">\n Custom content that is rendered when the chat renders content\n </div>\n </ch-chat>\n </gx-ide-chat-container>\n </Host>\n );\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["PROCESSING_PLACEHOLDER","timeOut","ASSISTANT_RESPONSE_MARKDOWN","ASSISTANT_RESPONSE_SHORT_MARKDOWN","sendChatToLLM","chatRef","document","querySelector","addNewMessage","id","Date","getTime","role","content","status","setTimeout","updateLastMessage","dummyStreaming","counter","stringToDisplay","mode","streamingCompleted","length","message","substring","files","url","caption","undefined","chatCallbacks","clear","Promise","resolve","uploadImage","stopGeneratingAnswer","clearTimeout","chatTranslations","accessibleName","clearChat","copyResponseButton","downloadCodeButton","imagePicker","removeUploadedImage","sendButton","sendInput","stopGeneratingAnswerButton","placeholder","text","copyCodeButton","processing","sourceFiles","Array","from","_","index","codeFixerRecord","metadata","parts","chatShowcaseCss","CSS_BUNDLES","GxIdeScChatContainer","_GxIdeScChatContainer_chatContainerRef","set","this","_GxIdeScChatContainer_copyConversationCallbackHandler","__classPrivateFieldGet","showCopyConversationMessage","_GxIdeScChatContainer_deleteConversationCallbackHandler","console","log","componentDidLoad","assistantStatus","render","h","Host","model","chatTitle","copyConversationCallback","deleteConversationCallback","ref","el","__classPrivateFieldSet","class","callbacks","generatingResponse","loadingState","markdownTheme","renderItem","mercuryChatMessageRender","isMobile","items","showAdditionalContent","translations","slot"],"sources":["src/showcase/chat-container/callbacks.ts","src/showcase/chat-container/chat-showcase.scss?tag=gx-ide-sc-chat-container&encapsulation=shadow","src/showcase/chat-container/chat.showcase.tsx"],"sourcesContent":["import {\n ChatInternalCallbacks,\n ChatMessage,\n ChatTranslations\n} from \"@genexus/chameleon-controls-library\";\n\nconst PROCESSING_PLACEHOLDER = \"{{ASSISTANT_NAME}}\";\n\nlet timeOut: NodeJS.Timeout;\n\nconst ASSISTANT_RESPONSE_MARKDOWN = `\n ### Code block {#code-block}\n To create code blocks, you’ll use three backticks (\\` \\`\\`\\` \\`) or three tildes (\\`~~~\\`) on the lines before and after the code block.\n \n \\`\\`\\`\n {\n \"firstName\": \"John\",\n \"lastName\": \"Smith\",\n \"age\": 25\n }\n \\`\\`\\`\n \n Another way to create code blocks is to indent every line of the block by at least four spaces or one tab.\n \n <html>\n <head>\n </head>\n </html>\n \n \n #### Syntax Highlighting {#syntax-highlighting}\n This feature allows you to add color highlighting for whatever language your code was written in.\n To add syntax highlighting, specify a language next to the backticks before the fenced code block.\n \n \\`\\`\\`json\n {\n \"firstName\": \"John\",\n \"lastName\": \"Smith\",\n \"age\": 25\n }\n \\`\\`\\`\n \n \\`\\`\\`javascript\n import React from 'react'\n import ReactDOM from 'react-dom'\n import Markdown from 'react-markdown'\n import rehypeHighlight from 'rehype-highlight'\n \n const markdown = \\`\n # Your markdown here\n \\`\n \n ReactDOM.render(\n <Markdown rehypePlugins={[rehypeHighlight]}>{markdown}</Markdown>,\n document.querySelector('#content')\n )\n \\`\\`\\`\n \n ### Horizontal Rules {#horizontal-rules}\n To create a horizontal rule, use three or more asterisks (\\`***\\`), dashes (\\`---\\`), or underscores (\\`___\\`) on a line by themselves.\n `;\n\nconst ASSISTANT_RESPONSE_SHORT_MARKDOWN =\n '\\n### Code block {#code-block}\\nTo create code blocks, you’ll use three backticks (` ``` `) or three tildes (`~~~`) on the lines before and after the code block.\\n\\n```json\\n{\\n \"firstName\": \"John\",\\n \"lastName\": \"Smith\",\\n \"age\": 25\\n}\\n```\\n\\nindex: 5\\nindex: 5\\nindex: 5\\nindex: 5\\nindex: 5\\nindex: 5\\nindex: 5\\n';\n\nconst sendChatToLLM = () => {\n // This is a WA to get the chat reference\n const chatRef = document.querySelector(\"ch-chat\") as HTMLChChatElement;\n\n chatRef.addNewMessage({\n id: `${new Date().getTime()}`,\n role: \"assistant\",\n content: \"Analyzing\",\n status: \"waiting\"\n });\n\n timeOut = setTimeout(() => {\n chatRef.updateLastMessage(\n {\n role: \"assistant\",\n content: \"Processing with Chat with LLMs\",\n status: \"waiting\"\n },\n \"replace\"\n );\n\n timeOut = setTimeout(() => {\n dummyStreaming(chatRef, 20, ASSISTANT_RESPONSE_MARKDOWN, \"replace\");\n }, 200);\n }, 200);\n};\n\nfunction dummyStreaming(\n chatRef: HTMLChChatElement,\n counter: number,\n stringToDisplay: string,\n mode: \"concat\" | \"replace\"\n) {\n timeOut = setTimeout(\n () => {\n const streamingCompleted = counter >= stringToDisplay.length;\n\n chatRef.updateLastMessage(\n {\n role: \"assistant\",\n content: {\n message: stringToDisplay.substring(counter - 20, counter),\n files: streamingCompleted\n ? [\n {\n url: \"https://next.genexus.ai\",\n caption: \"Mars Exploration Contract\"\n },\n {\n url: \"https://gx-chameleon.netlify.app\",\n caption: \"Venus Exploration Contract\"\n }\n ]\n : undefined\n },\n status: streamingCompleted ? \"complete\" : \"streaming\"\n },\n mode\n );\n\n if (!streamingCompleted) {\n dummyStreaming(chatRef, counter + 20, stringToDisplay, \"concat\");\n }\n },\n counter % 200 === 0 ? 50 : 40\n );\n}\n\nexport const chatCallbacks: ChatInternalCallbacks = {\n clear: () => new Promise(resolve => resolve()),\n sendChatToLLM: sendChatToLLM,\n uploadImage: () => new Promise(resolve => resolve(\"\")),\n stopGeneratingAnswer: () => {\n clearTimeout(timeOut);\n\n // This is a WA to get the chat reference\n const chatRef = document.querySelector(\"ch-chat\") as HTMLChChatElement;\n\n chatRef.updateLastMessage(\n {\n role: \"assistant\",\n content: \"\",\n status: \"complete\"\n },\n \"concat\"\n );\n\n return new Promise(resolve => setTimeout(() => resolve, 10));\n }\n};\n\nexport const chatTranslations: ChatTranslations = {\n accessibleName: {\n clearChat: \"Clear chat\",\n copyResponseButton: \"Copy assistant response\",\n downloadCodeButton: \"Download code\",\n imagePicker: \"Select images\",\n removeUploadedImage: \"Remove uploaded image\",\n sendButton: \"Send\",\n sendInput: \"Message\",\n stopGeneratingAnswerButton: \"Stop generating answer\"\n },\n placeholder: {\n sendInput: \"Ask me a question...\"\n },\n text: {\n copyCodeButton: \"Copy code\",\n processing: `Processing with ${PROCESSING_PLACEHOLDER}`,\n sourceFiles: \"Source files:\"\n }\n};\n\nexport const chatRecord: ChatMessage[] = [\n { id: \"1\", role: \"user\", content: \"Hello world\" },\n { id: \"2\", role: \"assistant\", content: ASSISTANT_RESPONSE_MARKDOWN },\n { id: \"3\", role: \"user\", content: \"Hello world 1\" },\n { id: \"4\", role: \"assistant\", content: ASSISTANT_RESPONSE_SHORT_MARKDOWN },\n { id: \"5\", role: \"user\", content: \"Hello world 2\" },\n { id: \"6\", role: \"assistant\", content: ASSISTANT_RESPONSE_SHORT_MARKDOWN },\n { id: \"7\", role: \"user\", content: \"Hello world 3\" },\n { id: \"8\", role: \"assistant\", content: ASSISTANT_RESPONSE_SHORT_MARKDOWN },\n { id: \"9\", role: \"user\", content: \"Hello world 4\" },\n { id: \"10\", role: \"assistant\", content: ASSISTANT_RESPONSE_SHORT_MARKDOWN }\n];\n\nexport const longChatRecord: ChatMessage[] = Array.from(\n { length: 40 },\n (_, index) =>\n index % 2 === 0\n ? {\n id: `index: ${index}`,\n role: \"user\",\n content:\n `index: ${index}` +\n `index: ${index}\\n` +\n `index: ${index}\\n` +\n `index: ${index}\\n` +\n `index: ${index}\\n` +\n `index: ${index}\\n` +\n `index: ${index}\\n`\n }\n : {\n id: `index: ${index}`,\n role: \"assistant\",\n content:\n ASSISTANT_RESPONSE_SHORT_MARKDOWN +\n `\\nindex: ${index}\\n` +\n `index: ${index}\\n` +\n `index: ${index}\\n` +\n `index: ${index}\\n` +\n `index: ${index}\\n` +\n `index: ${index}\\n` +\n `index: ${index}\\n`\n }\n);\n\nexport const codeFixerRecord: ChatMessage[] = [\n {\n id: \"1\",\n role: \"user\",\n content: \"Please give me an example about...\",\n metadata: \"14:55\"\n },\n {\n id: \"2\",\n role: \"assistant\",\n status: \"complete\",\n content:\n \"Action required example. Action required example. Action required example.\",\n metadata: \"14:56\"\n },\n {\n id: \"3\",\n role: \"assistant\",\n status: \"complete\",\n content: \"Warning in request\",\n metadata: \"14:57\",\n parts: \"warning\"\n },\n {\n id: \"4\",\n role: \"error\",\n content: \"Error in Request\",\n metadata: \"14:58\"\n },\n {\n id: \"5\",\n role: \"assistant\",\n status: \"complete\",\n content: \"Warning in request\",\n metadata: \"14:59\",\n parts: \"success\"\n },\n {\n id: \"6\",\n role: \"user\",\n content:\n \"Implement the function calculate_average_grade in grades.py that takes a list of grades as input and returns the average grade as a floating-point number\",\n metadata: \"15:00\"\n },\n {\n id: \"7\",\n role: \"assistant\",\n status: \"complete\",\n content:\n \"You can provide further details or updates regarding your support ticket and its associated code. Your input here helps us better understand and address your issue effectively.\",\n metadata: \"15:01\"\n },\n {\n id: \"8\",\n role: \"assistant\",\n status: \"waiting\",\n content: \"You can provide further details or updates\"\n },\n {\n id: \"9\",\n role: \"assistant\",\n status: \"complete\",\n content: ASSISTANT_RESPONSE_SHORT_MARKDOWN\n }\n];\n",":host {\n block-size: 100%;\n display: grid;\n}\n","import { Component, Host, h, State } from \"@stencil/core\";\nimport { mercuryChatMessageRender } from \"../../components/_helpers/chat-container/code-render\";\nimport { MercuryBundles } from \"@genexus/mercury\";\n\nconst CSS_BUNDLES: MercuryBundles = [\"resets/box-sizing\", \"components/chat\"];\n\nimport { chatCallbacks, chatTranslations, codeFixerRecord } from \"./callbacks\";\n\n@Component({\n tag: \"gx-ide-sc-chat-container\",\n styleUrl: \"chat-showcase.scss\",\n shadow: true\n})\nexport class GxIdeScChatContainer {\n #chatContainerRef!: HTMLGxIdeChatContainerElement;\n\n @State() showAdditionalContent: boolean = false;\n @State() conversationCopied: boolean = false;\n @State() assistantStatus: string = \"Getting Data\";\n\n #copyConversationCallbackHandler = () => {\n this.#chatContainerRef.showCopyConversationMessage();\n };\n\n #deleteConversationCallbackHandler = () => {\n console.log(\"delete messages\");\n };\n\n componentDidLoad() {\n setTimeout(() => {\n this.assistantStatus = \"Creating Data Base..\";\n }, 1000);\n }\n\n render() {\n return (\n <Host>\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <gx-ide-chat-container\n chatTitle=\"GeneXus Assistant\"\n copyConversationCallback={this.#copyConversationCallbackHandler}\n deleteConversationCallback={this.#deleteConversationCallbackHandler}\n ref={el =>\n (this.#chatContainerRef = el as HTMLGxIdeChatContainerElement)\n }\n class=\"elevation-2\"\n >\n <ch-chat\n callbacks={chatCallbacks}\n class=\"chat\"\n generatingResponse={false}\n loadingState=\"all-records-loaded\"\n markdownTheme=\"mercury/markdown-viewer\"\n renderItem={mercuryChatMessageRender(\n \"mercury/markdown-viewer\",\n \"Bruno\",\n \"Gx Assistant\"\n )}\n isMobile={false}\n items={codeFixerRecord}\n showAdditionalContent={this.showAdditionalContent}\n translations={chatTranslations}\n >\n <div slot=\"additional-content\">\n Custom content that is rendered when the chat renders content\n </div>\n </ch-chat>\n </gx-ide-chat-container>\n </Host>\n );\n }\n}\n"],"mappings":"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"}
|
|
@@ -7,6 +7,10 @@ export declare class GxIdeSelectKbItems {
|
|
|
7
7
|
* Represents the nodes list model
|
|
8
8
|
*/
|
|
9
9
|
nodeListFlattenedTreeModel: TreeViewItemModel[];
|
|
10
|
+
/**
|
|
11
|
+
* To show a loader when the component is loading
|
|
12
|
+
*/
|
|
13
|
+
loading: boolean;
|
|
10
14
|
/**
|
|
11
15
|
* View type for the nodes.
|
|
12
16
|
*/
|