@genexus/genexus-ide-ui 1.0.67 → 1.0.69

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
  2. package/dist/cjs/gx-ide-new-version.cjs.entry.js +101 -0
  3. package/dist/cjs/gx-ide-new-version.cjs.entry.js.map +1 -0
  4. package/dist/cjs/gx-ide-select-kb-items.cjs.entry.js +2 -1
  5. package/dist/cjs/gx-ide-select-kb-items.cjs.entry.js.map +1 -1
  6. package/dist/cjs/gx-ide-sign-in.cjs.entry.js +1 -1
  7. package/dist/cjs/gx-ide-sign-in.cjs.entry.js.map +1 -1
  8. package/dist/cjs/gx-ide-splash.cjs.entry.js +3 -8
  9. package/dist/cjs/gx-ide-splash.cjs.entry.js.map +1 -1
  10. package/dist/cjs/loader.cjs.js +1 -1
  11. package/dist/collection/collection-manifest.json +1 -0
  12. package/dist/collection/components/new-version/gx-ide-assets/new-version/langs/new-version.lang.en.json +16 -0
  13. package/dist/collection/components/new-version/gx-ide-assets/new-version/langs/new-version.lang.ja.json +16 -0
  14. package/dist/collection/components/new-version/gx-ide-assets/new-version/langs/new-version.lang.zh.json +16 -0
  15. package/dist/collection/components/new-version/new-version.css +17 -0
  16. package/dist/collection/components/new-version/new-version.js +181 -0
  17. package/dist/collection/components/new-version/new-version.js.map +1 -0
  18. package/dist/collection/components/select-kb-items/select-kb-items.js +20 -1
  19. package/dist/collection/components/select-kb-items/select-kb-items.js.map +1 -1
  20. package/dist/collection/components/sign-in/gx-ide-assets/sign-in/langs/sign-in.lang.en.json +3 -3
  21. package/dist/collection/components/sign-in/sign-in.js +1 -1
  22. package/dist/collection/components/sign-in/sign-in.js.map +1 -1
  23. package/dist/collection/components/splash/gx-ide-assets/splash/langs/splash.lang.en.json +1 -1
  24. package/dist/collection/components/splash/gx-ide-assets/splash/langs/splash.lang.ja.json +1 -1
  25. package/dist/collection/components/splash/gx-ide-assets/splash/langs/splash.lang.zh.json +1 -1
  26. package/dist/collection/components/splash/splash.css +0 -28
  27. package/dist/collection/components/splash/splash.js +2 -7
  28. package/dist/collection/components/splash/splash.js.map +1 -1
  29. package/dist/collection/testing/locale.e2e.js +1 -0
  30. package/dist/collection/testing/locale.e2e.js.map +1 -1
  31. package/dist/components/gx-ide-new-version.d.ts +11 -0
  32. package/dist/components/gx-ide-new-version.js +124 -0
  33. package/dist/components/gx-ide-new-version.js.map +1 -0
  34. package/dist/components/gx-ide-select-kb-items.js +3 -1
  35. package/dist/components/gx-ide-select-kb-items.js.map +1 -1
  36. package/dist/components/gx-ide-sign-in.js +1 -1
  37. package/dist/components/gx-ide-sign-in.js.map +1 -1
  38. package/dist/components/gx-ide-splash.js +3 -8
  39. package/dist/components/gx-ide-splash.js.map +1 -1
  40. package/dist/esm/genexus-ide-ui.js +1 -1
  41. package/dist/esm/gx-ide-new-version.entry.js +97 -0
  42. package/dist/esm/gx-ide-new-version.entry.js.map +1 -0
  43. package/dist/esm/gx-ide-select-kb-items.entry.js +2 -1
  44. package/dist/esm/gx-ide-select-kb-items.entry.js.map +1 -1
  45. package/dist/esm/gx-ide-sign-in.entry.js +1 -1
  46. package/dist/esm/gx-ide-sign-in.entry.js.map +1 -1
  47. package/dist/esm/gx-ide-splash.entry.js +3 -8
  48. package/dist/esm/gx-ide-splash.entry.js.map +1 -1
  49. package/dist/esm/loader.js +1 -1
  50. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  51. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js.map +1 -1
  52. package/dist/genexus-ide-ui/gx-ide-assets/new-version/langs/new-version.lang.en.json +16 -0
  53. package/dist/genexus-ide-ui/gx-ide-assets/new-version/langs/new-version.lang.ja.json +16 -0
  54. package/dist/genexus-ide-ui/gx-ide-assets/new-version/langs/new-version.lang.zh.json +16 -0
  55. package/dist/genexus-ide-ui/gx-ide-assets/sign-in/langs/sign-in.lang.en.json +3 -3
  56. package/dist/genexus-ide-ui/gx-ide-assets/splash/langs/splash.lang.en.json +1 -1
  57. package/dist/genexus-ide-ui/gx-ide-assets/splash/langs/splash.lang.ja.json +1 -1
  58. package/dist/genexus-ide-ui/gx-ide-assets/splash/langs/splash.lang.zh.json +1 -1
  59. package/dist/genexus-ide-ui/p-0cd96b35.entry.js +150 -0
  60. package/dist/genexus-ide-ui/p-0cd96b35.entry.js.map +1 -0
  61. package/dist/genexus-ide-ui/{p-842a081e.entry.js → p-6b957e82.entry.js} +2 -4
  62. package/dist/genexus-ide-ui/p-6b957e82.entry.js.map +1 -0
  63. package/dist/genexus-ide-ui/{p-6331b2f2.entry.js → p-72d32141.entry.js} +10 -8
  64. package/dist/genexus-ide-ui/p-72d32141.entry.js.map +1 -0
  65. package/dist/genexus-ide-ui/p-c91af626.entry.js +149 -0
  66. package/dist/genexus-ide-ui/p-c91af626.entry.js.map +1 -0
  67. package/dist/types/components/new-version/new-version.d.ts +36 -0
  68. package/dist/types/components/select-kb-items/select-kb-items.d.ts +4 -0
  69. package/dist/types/components.d.ts +51 -0
  70. package/package.json +1 -1
  71. package/dist/genexus-ide-ui/p-6331b2f2.entry.js.map +0 -1
  72. package/dist/genexus-ide-ui/p-842a081e.entry.js.map +0 -1
  73. package/dist/genexus-ide-ui/p-a76d8ad7.entry.js +0 -160
  74. package/dist/genexus-ide-ui/p-a76d8ad7.entry.js.map +0 -1
@@ -1 +0,0 @@
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","iconStart","endImgSrc","iconEnd","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.iconStart,\n endImgSrc: item.iconEnd,\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 iconStart = item.iconStart;\n const iconEnd = item.iconEnd;\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: iconStart,\n endImgSrc: iconEnd,\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","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\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 >\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 ></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 iconStart?: string;\n iconEnd?: 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":";;;;;;;;AAGO,MAAMA,+CAA+C,CAC1DC,GACAC;EAEA,MAAMC,IAAuD;EAE7D,MAAMC,cAAeC;;IACnB,MAAMC,OAAQC,IAAAF,EAAKG,WAAK,QAAAD,WAAA,aAAAA,EAAEE;IAC1B,MAAMC,IACJR,MAAiB,SAChBA,MAAiB,YAAYG,EAAKK,YAClCR,MAAiB,UAAUI;IAC9B,MAAMK,IAAWC,KAAKC,UAAU;MAC9BC,aAAaT,EAAKU;;IAEpBZ,EAAgCa,KAAK;MACnCC,IAAIZ,EAAKY,GAAGC;MACZC,UAAUR;MACVS,SAASf,EAAKgB;MACdC,SAASjB,EAAKiB;MACdZ,UAAUA;MACVa,UAAUlB,EAAKkB;MACfC,aAAanB,EAAKoB;MAClBC,WAAWrB,EAAKsB;MAChBC,OAAO;MACPtB,MAAMA;MACNuB,UAAUxB,EAAKwB;;IAGjB,IAAIxB,EAAKG,OAAO;MACdH,EAAKG,MAAMsB,SAAQC,KAAa3B,YAAY2B;;;EAIhD9B,EAAU6B,SAAQzB,KAAQD,YAAYC;EACtC,OAAOF;AAA+B;;AAGjC,MAAM6B,kCAAkC,CAC7C/B,GACAC;EAEA,MAAM+B,IAA8C;EACpDhC,EAAU6B,SAAQzB;;IAChB,MAAMC,OAAQC,IAAAF,EAAKG,WAAK,QAAAD,WAAA,aAAAA,EAAEE;IAC1B,MAAMc,IAAWlB,EAAKkB;IACtB,MAAME,IAAYpB,EAAKoB;IACvB,MAAME,IAAUtB,EAAKsB;IACrB,MAAMO,IAAQC,SAAS9B,EAAKY;IAC5B,MAAMP,IACJR,MAAiB,SAChBA,MAAiB,YAAYG,EAAKK,YAClCR,MAAiB,UAAUI;IAC9B,MAAMK,IAAWC,KAAKC,UAAU;MAC9BC,aAAaT,EAAKU;;IAEpBkB,EAAuBjB,KAAK;MAC1BC,IAAIZ,EAAKY,GAAGC;MACZC,UAAUR;MACVS,SAASf,EAAKgB;MACdX,UAAUA;MACVY,SAASjB,EAAKiB;MACdY,OAAOA;MACPL,UAAUxB,EAAKwB;MACfN,UAAUA;MACVC,aAAaC;MACbC,WAAWC;MACXC,QAAQtB,IACJ0B,gCAAgC3B,EAAKG,OAAON,KAC5C;MACJI,MAAMA;;AACN;EAGJ,OAAO2B;AAAsB;;AAG/B,MAAMG,eAAe,CAACnB,GAAYZ;EAChC,IAAIA,EAAKY,OAAOA,GAAI;IAClB,OAAOZ;;EAGT,IAAIA,EAAKG,OAAO;IACd,KAAK,MAAM6B,KAAYhC,EAAKG,OAAO;MACjC,MAAM8B,IAASF,aAAanB,GAAIoB;MAChC,IAAIC,GAAQ;QACV,OAAOA;;;;EAIb,OAAO;AAAI;;AAGb,SAASC,gBAAgBC,GAAwBvB;EAC/C,KAAK,MAAMZ,KAAQmC,GAAY;IAC7B,MAAMF,IAASF,aAAanB,GAAIZ;IAChC,IAAIiC,GAAQ;MACV,OAAOA;;;EAGX,OAAO;AACT;;AACA,MAAMG,0BAA2BxC;EAC/B,MAAMyC,UAAWL;;IACfA,EAASf,UAAU;IACnB,KAAIf,IAAA8B,EAAS7B,WAAK,QAAAD,WAAA,aAAAA,EAAEE,QAAQ;MAC1B4B,EAAS7B,MAAMsB,SAAQC,KAAaW,QAAQX;;;EAIhD9B,EAAU6B,SAAQzB,KAAQqC,QAAQrC;EAClC,OAAOJ;AAAS;;AAGX,MAAM0C,mBAAoB1C;EAC/B,MAAM2C,WAAYP;;IAChBA,EAASR,WAAW;IACpB,KAAItB,IAAA8B,EAAS7B,WAAK,QAAAD,WAAA,aAAAA,EAAEE,QAAQ;MAC1B4B,EAAS7B,MAAMsB,SAAQC,KAAaa,SAASb;;;EAIjD9B,EAAU6B,SAAQzB,KAAQuC,SAASvC;AAAM;;AAGpC,MAAMwC,aAAa,CACxB5C,GACA6C;EAEAL,wBAAwBxC;EACxB6C,EAAWhB,SAAQb;IACjB,MAAM8B,IAAWR,gBAAgBtC,GAAWgB;IAC5C,IAAI8B,GAAU;MACZA,EAASzB,UAAU;;;EAIvB,OAAOrB;AAAS;;AAGX,MAAM+C,cAAc,CACzB/C,GACA6C;EAEAA,EAAWhB,SAAQb;IACjB,MAAM8B,IAAWR,gBAAgBtC,GAAWgB;IAC5C,IAAI8B,GAAU;MACZA,EAASxB,WAAW;;;EAIxB,OAAOtB;AAAS;;AAGX,MAAMgD,cAAc,CACzBhD,GACAiD;EAEAA,EAAYpB,SAAQb;IAClB,MAAM8B,IAAWR,gBAAgBtC,GAAWgB;IAC5C,IAAI8B,GAAU;MACZA,EAASlB,WAAW;;;EAGxB,OAAO5B;AAAS;;AAGlB,SAASkD,aAAa9C,GAAgBY;;;IAEpC,IAAIZ,EAAKY,OAAOA,GAAI;IAClB,OAAO;;;IAIT,KAAIV,IAAAF,EAAKG,WAAK,QAAAD,WAAA,aAAAA,EAAEE,QAAQ;IACtB,KAAK,MAAM2C,KAAQ/C,EAAKG,OAAO;MAC7B,MAAM6C,IAAUF,aAAaC,GAAMnC;MACnC,IAAIoC,MAAY,MAAM;;QAEpB,OAAO,EAAChD,EAAKY,OAAOoC;;;;EAI1B,OAAO;AACT;;AAEO,MAAMC,qBAAqB,CAChC1B,GACA2B;EAEA,MAAMF,IAAoB;EAC1B,KAAK,MAAMpC,KAAMsC,GAAK;IACpB,KAAK,MAAMC,KAAY5B,GAAO;MAC5B,MAAM6B,IAAUN,aAAaK,GAAUvC;MACvC,IAAIwC,MAAY,MAAM;QACpBA,EAAQ3B,SAAQQ;UACde,EAAQrC,KAAKsB;AAAO;;;;EAK5B,OAAOe;AAAO;;AC5MhB,MAAMK,IAAmB;;;;;;;;;;;;;;;;;ACgCzB,MAAMC,IAA8B,EAClC,qBACA,uBACA,sBACA,wBACA,oBACA,gBACA,iBACA;;AAGF,MAAMC,IAAqBC,EAAY;EACrCC,UAAU;EACVzC,MAAM;EACN0C,WAAW;;;AAGb,MAAMC,IAAyC;;AAC/C,MAAMC,IAAyC;;AAE/C,MAAMC,IAAkC;;MAQ3BC,IAAkB;;;IAC7BC,EAAAC,IAAAC,WAAA;IAEAC,EAAAF,IAAAC,MAA6B;IAC7BE,EAAAH,IAAAC,WAAA;IACAG,EAAAJ,IAAAC,MAA8B;IAC9BI,EAAAL,IAAAC,MAAgBK,EACd;IAEFC,EAAAP,IAAAC,MAAgC;IAEhCO,EAAAR,IAAAC,WAAA;IAGAQ,EAAAT,IAAAC,WAAA;IA0HAS,EAAAV,IAAAC,OAAiB;MACf,IAAIA,KAAKU,gBAAgB;QACvBV,KAAKU;;;IAITC,EAAAZ,IAAAC,OAA6BY,MAC3BC;MAEA,MAAMC,IAA4B;MAClCD,EAAEE,OAAOvD,SAAQsB;QACfA,EAAK/C,KAAKiB,WAAW8D,EAAgBpE,KAAKoC,EAAK/C,KAAKY;AAAG;MAEzDqE,EAAAhB,MAAIC,GAAoBa,GAAe;MACvCE,EAAAhB,MAAIM,GAAqB/B,WAAWyB,KAAKrE,WAAWsF,EAAAjB,MAAIC,GAAA,OAAkB;MAE1E,IAAID,KAAKkB,gBAAgB;QACvBlB,KAAKkB,eAAeD,EAAAjB,MAAIC,GAAA;;;IAI5BkB,EAAApB,IAAAC,OAAkB;MAChB,IAAIA,KAAKoB,iBAAiB;QACxBpB,KAAKoB,gBAAgBH,EAAAjB,MAAIC,GAAA;;;IAI7BoB,EAAAtB,IAAAC,OAAsBY,MACpBC;MAOA,IAAIb,KAAKsB,yBAAyB;QAChC,IAAIC;QACJ,MAAMC,IAAaP,EAAAjB,MAAIG,GAAA,KAAmBsB,MAAK9E,KAAMA,MAAOkE,EAAEE,OAAOpE;QACrE,KAAKsE,EAAAjB,MAAIG,GAAA,KAAmBhE,WAAWqF,GAAY;gBAC3CP,EAAAjB,MAAIQ,GAAA,KAAmBkB,sBAC3BT,EAAAjB,MAAIG,GAAA,MACJ;YAAE5C,UAAU;;gBAER0D,EAAAjB,MAAIQ,GAAA,KAAmBkB,sBAAsB,EAACb,EAAEE,OAAOpE,MAAK;YAChEY,UAAU;;UAEZgE,IAAO;YACLI,SAASd,EAAEE,OAAOa,iBAAiBD;YACnCE,SAAShB,EAAEE,OAAOa,iBAAiBC;YACnCC,WAAW,EAACjB,EAAEE,OAAOpE;;eAElB;UACL4E,IAAO;YACLI,SAASd,EAAEE,OAAOa,iBAAiBD;YACnCE,SAAShB,EAAEE,OAAOa,iBAAiBC;YACnCC,WAAWb,EAAAjB,MAAIG,GAAA;;;QAGnBH,KAAKsB,wBAAwBC;;;IAIjCQ,EAAAhC,IAAAC,OACEgC,KAEO;MACLA,EAASf,EAAAjB,MAAIC,GAAA,MAAmBgB,EAAAjB,MAAIG,GAAA;AAAmB;IAI3D8B,EAAAlC,IAAAC,OACEkC;MAEAlC,KAAKmC,qBAAqBD,EAAMnB,OAAOnE;AAAU;IAGnDwF,EAAArC,IAAAC,OAAuB,MAEnBqC,EAAA,aACGrC,KAAKsC,cAAcC,KAAIC,KAEpBH,EAAA;MACEI,OAAO;MACPC,MAAM,iBAAiBF,EAAOzF;MAC9B4F,SAAS1B,EAAAjB,MAAI+B,GAAA,KAAqBa,KAAzB5C,MAA0BwC,EAAOR;MAC1Ca,UAAU7C,KAAK8C;OAEdN,EAAOzF;IAQpBgG,EAAAhD,IAAAC,OAAgB,MAEZqC,EAAA;MAAQI,OAAM;OACXxB,EAAAjB,MAAIoC,GAAA,KAAqBQ,KAAzB5C,OACDqC,EAAA;MAAKI,OAAM;OACRzC,KAAKU,kBACJ2B,EAAA;MACEI,OAAO;MACPC,MAAM;MACNC,SAAS1B,EAAAjB,MAAIS,GAAA;OAEZQ,EAAAjB,MAAIF,GAAA,KAAmBkD,OAAOC,SAGlCjD,KAAKoB,mBACJiB,EAAA;MACEI,OAAO;MACPC,MAAM;MACNC,SAAS1B,EAAAjB,MAAImB,GAAA;MACb0B,UAAU7C,KAAK8C;OAEd7B,EAAAjB,MAAIF,GAAA,KAAmBkD,OAAOE;IAQ3CC,EAAApD,IAAAC,OACEa;MAEA,MAAMuC,IAA6B;MACnC/E,iBAAiB2B,KAAKrE;MACtBkF,EAAEE,OAAOvD,SAAQsB;QACfsE,EAAiB1G,KAAKoC,EAAK/C,KAAKY;AAAG;MAErCqE,EAAAhB,MAAIG,GAAqBiD,GAAgB;MACzC,IAAIpD,KAAKqD,kBAAkB;QACzBrD,KAAKqD,iBAAiBpC,EAAAjB,MAAIG,GAAA;;MAG5Ba,EAAAhB,MAAIM,GAAqB3B,YAAYqB,KAAKrE,WAAWyH,IAAiB;AAAA;IAGxEE,EAAAvD,IAAAC,OAAoCY,MAAO2C;MACzC,MAAMC,IAAgBxE,mBAAmBgB,KAAKrE,WAAW4H;MACzD,MAAME,IAAmB9E,YAAYqB,KAAKrE,WAAW4H;MACrD,MAAMG,IAAmBhF,YAAY+E,GAAkBD;MACvDvC,EAAAjB,MAAI2D,GAAA,KAAaf,KAAjB5C,MAAkB0D;AAAiB;IAGrCE,EAAA7D,IAAAC,OAAkCY,MAAO2C;MACvC,MAAMC,IAAgBxE,mBAAmBgB,KAAKrE,WAAW4H;MACzD,MAAMG,IAAmBhF,YAAYsB,KAAKrE,WAAW6H;MACrDvC,EAAAjB,MAAI2D,GAAA,KAAaf,KAAjB5C,MAAkB0D;AAAiB;IAGrCC,EAAA5D,IAAAC,OAAgB6D;MACd7D,KAAK8D,4BAA4BpG,gCAC/BmG,GACA7D,KAAKpE;MAGPoE,KAAK+D,6BACHrI,6CACEmI,GACA7D,KAAKpE;AACN;IAGLoI,EAAAjE,IAAAC,OAA6BY,MAAOsB;MAClC,MAAM+B,IAAmB/B,EAAMnB;MAC/Bf,KAAKkE,wBAAwBD;MAC7B,IAAIjE,KAAKkE,0BAA0B,QAAQ;cACnCjD,EAAAjB,MAAIsD,GAAA,KAAkCV,KAAtC5C,MAAuCiB,EAAAjB,MAAIG,GAAA;cAC3Cc,EAAAjB,MAAI4D,GAAA,KAAgChB,KAApC5C,MAAqCiB,EAAAjB,MAAIC,GAAA;;MAEjDgB,EAAAjB,MAAI2D,GAAA,KAAaf,KAAjB5C,MAAkBiB,EAAAjB,MAAIM,GAAA;AAAmB;IAG3C6D,EAAApE,IAAAC,OACEkC;MAEAlC,KAAKoE,mBAAmBlC,EAAMnB,WAAWnB;AAA+B;sCAxSf;mBAK/B;iCAK4B;qCAKE;8BAKpB;4BAKD;;;;;yBAwBY;;qBAYR;0BAaG;;;EAV5C,oBAAAyE,CAAqBR;IACnB,IAAIA,EAAa1H,SAAS,GAAG;MAC3B6D,KAAK8C,UAAU;;IAEjB7B,EAAAjB,MAAI2D,GAAA,KAAaf,KAAjB5C,MAAkB6D;;EAapB,uBAAMS;IACJtD,EAAAhB,MAAIF,SAA2ByE,EAAOC,oBAAoBxE,KAAKyE,KAAG;IAClEzD,EAAAhB,MAAIO,GAAqB,EACvB;MAAEmE,OAAOhF;MAAiB5C,SAASmE,EAAAjB,MAAIF,GAAA,KAAmB6E,KAAKC;OAC/D;MAAEF,OAAO/E;MAAiB7C,SAAS;SACpC;IACDkD,KAAKqE,qBAAqBrE,KAAKrE;;;;SAOjC,sBAAMkJ,CAAiBA;IACrB,IAAIA,GAAkB;MACpB5D,EAAAjB,MAAIE,GAAA,KAAgB4E,UAAU;WACzB;MACL7D,EAAAjB,MAAIE,GAAA,KAAgB4E,UAAU;;;;;SAQlC,qBAAMC,CAAgBxB;;IAEpBtC,EAAAjB,MAAIQ,GAAA,KAAmBkB,sBAAsBT,EAAAjB,MAAIG,GAAA,MAAoB;MACnE5C,UAAU;;;QAGZ0D,EAAAjB,MAAIQ,GAAA,KAAmBkB,sBAAsB6B,GAAkB;MAC7DhG,UAAU;;;EA0Ld,MAAAyH;IACE,OACE3C,EAAC4C,GAAI;MAACxC,OAAM;OACVJ,EAAA;MAAU6C,OAAO7F;QACjBgD,EAAA;MACE8C,KAAKlE,EAAAjB,MAAII,GAAA;MACTgF,KAAMX,KACHzD,EAAAhB,MAAIE,GAAkBuE,GAA4B;QAGvDpC,EAAA;MAASI,OAAM;OACbJ,EAAA;MAAQI,OAAM;OACZJ,EAAA;MAAKI,OAAM;OACTJ,EAAA;MAAKI,OAAM;OACTJ,EAAA;MAAOI,OAAM;MAAQ4C,SAAQ;OAAW,sBAGxChD,EAAA;MACEI,OAAM;MACN9F,IAAG;MACHuI,OAAOjE,EAAAjB,MAAIO,GAAA;MACX+E,UAAUrE,EAAAjB,MAAIgE,GAAA;MACdU,OAAOzD,EAAAjB,MAAIO,GAAA,KAAmB,GAAGmE;SAIpC1E,KAAKpE,iBAAiB,UACrByG,EAAA;MAAKI,OAAM;OACTJ,EAAA;MAAOI,OAAM;MAAQ4C,SAAQ;OAAmB,sBAGhDhD,EAAA;MACEI,OAAM;MACN9F,IAAG;MACH4I,cAAc3F;MACd8E,OAAO9E;MACP4F,SAASvE,EAAAjB,MAAImE,GAAA;UAMrB9B,EAAA;MACEI,OAAM;MACNgD,aACExE,EAAAjB,MAAIF,GAAA,KAAmB4F,OAAOC;MAEhCzI,aAAaoC;MACbkG,SAASvE,EAAAjB,MAAIiC,GAAA;SAIjBI,EAAA;MAAKI,OAAM;OACRzC,KAAK8C,UACJT,EAAA;MACEuD,aAAa3E,EAAAjB,MAAIF,GAAA,KAAmB+F,OAAOC;MAC3CC,MAAI;SAGN1D,EAAA;MACEI,OAAM;MACNyC,OACElF,KAAKkE,0BAA0B,SAC3BlE,KAAK8D,4BACL9D,KAAK+D;MAA0B,cAGnC/D,KAAKkE,0BAA0B,SAAS,QAAQ;MAElD8B,kBACEhG,KAAKkE,0BAA0B,SAAS,eAAe;MAEzD+B,mBAAmBhF,EAAAjB,MAAIqB,GAAA;MACvB6E,sBAAsBjF,EAAAjB,MAAIW,GAAA;MAC1BwF,uBAAuBlF,EAAAjB,MAAImD,GAAA;MAC3BiD,gBAAgBpG,KAAKoG;MACrBC,QAAQrG,KAAKmC;MACbmE,YAAW;MACXlC,kBAAkBpE,KAAKoE;MACvBgB,KAAMX;QACJzD,EAAAhB,MAAIQ,GAAqBiE,GAAiC;AAAA;UAKhEzE,KAAKsC,cAAcnG,SAAS,KAC5B6D,KAAKU,kBACLV,KAAKoB,oBACLH,EAAAjB,MAAI+C,GAAA,KAAcH,KAAlB5C"}
@@ -1 +0,0 @@
1
- {"version":3,"names":["signInCss","COPYRIGHTS_ILLUSTRATION","getAssetPath","ICON_NEXT","CSS_BUNDLES","GxIdeUiSplash","_GxIdeUiSplash_componentLocale","set","this","componentWillLoad","__classPrivateFieldSet","Locale","getComponentStrings","el","render","h","Host","model","class","role","__classPrivateFieldGet","illustrationAriaLabel","src","alt","illustrationFigureAriaLabel","illustrationAlternativeText","title","hidden","descriptionText","byContinuingTextFirstPart","onClick","termsCallback","byContinuingCallBackText","signInCallback","signInButtonCaption"],"sources":["src/components/sign-in/sign-in.scss?tag=gx-ide-sign-in&encapsulation=shadow","src/components/sign-in/sign-in.tsx"],"sourcesContent":[":host {\n display: grid;\n block-size: 100%;\n inline-size: 100%;\n align-items: center;\n justify-content: center;\n padding: var(--mer-spacing--xl);\n}\n\n.slide {\n display: grid;\n max-inline-size: 1100px;\n grid-template-columns: 1fr 550px;\n background-color: var(--mer-surface__elevation--01);\n border-radius: var(--mer-spacing--md);\n overflow: hidden;\n\n &__illustration {\n overflow: hidden;\n max-block-size: 700px;\n }\n\n &__sign-in {\n display: grid;\n block-size: 100%;\n inline-size: 100%;\n padding: var(--mer-spacing--3xl);\n }\n\n &__sign-in-container {\n display: grid;\n gap: var(--mer-spacing--lg);\n max-inline-size: 480px;\n place-self: center;\n }\n\n &__sign-in-header {\n display: grid;\n gap: var(--mer-spacing--lg);\n }\n\n &__sign-in-title {\n font-size: var(--mer-font__size--xl);\n color: var(--mer-text__on-surface);\n letter-spacing: 0.02em;\n font-weight: var(--mer-font__weight--semi-bold);\n }\n\n &__sign-in-description {\n display: grid;\n color: var(--mer-text__complementary);\n gap: var(--mer-spacing--2xl);\n font-size: var(--mer-font__size--sm);\n font-weight: var(--mer-font__weight--light);\n line-height: var(--mer-line-height--spaced);\n }\n}\n\n.terms-conditions {\n text-decoration: underline;\n}\n.sign-in-btn {\n padding-inline-start: var(--mer-spacing--3xl) !important;\n padding-inline-end: var(--mer-spacing--3xl) !important;\n}\n","// Stencil\nimport { Component, Host, h, Prop, Element, getAssetPath } from \"@stencil/core\";\n// Other Libraries\nimport { MercuryBundles } from \"@genexus/mercury\";\n// Custom Imports\nimport { Locale } from \"../../common/locale\";\n\nconst COPYRIGHTS_ILLUSTRATION = getAssetPath(\n `./gx-ide-assets/welcome-page/images/copyrights-illustration.png`\n);\nconst ICON_NEXT = getAssetPath(\n `./gx-ide-assets/welcome-page/images/icon-next.svg`\n);\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"utils/typography\",\n \"components/button\"\n];\n\n@Component({\n tag: \"gx-ide-sign-in\",\n styleUrl: \"sign-in.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/sign-in\"]\n})\nexport class GxIdeUiSplash {\n /**\n * The component hard-coded strings translations.\n */\n // eslint-disable-next-line @stencil-community/own-props-must-be-private\n #componentLocale: any;\n\n @Element() el: HTMLGxIdeSignInElement;\n\n /**\n * Callback executed when the user click on the \"term and conditions\" link\n */\n @Prop() readonly termsCallback: () => Promise<void>;\n\n /**\n * Callback executed when the user click the Sign In button\n */\n @Prop() readonly signInCallback: () => Promise<void>;\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n }\n\n render() {\n return (\n <Host>\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <section class=\"slide\">\n <div\n class=\"slide__illustration\"\n role=\"img\"\n aria-label={this.#componentLocale.illustrationAriaLabel}\n >\n <img\n // base image (acts like a background)\n src={COPYRIGHTS_ILLUSTRATION}\n class=\"slide__illustration\"\n alt={this.#componentLocale.illustrationFigureAriaLabel}\n />\n </div>\n\n <div class=\"slide__sign-in\">\n <div class=\"slide__sign-in-container\">\n <header class=\"slide__sign-in-header\">\n <img\n src={ICON_NEXT}\n alt={this.#componentLocale.illustrationAlternativeText}\n />\n <h2 class=\"slide__sign-in-title\">\n {this.#componentLocale.title}\n </h2>\n </header>\n <div class=\"slide__sign-in-description\">\n <p hidden>\n <span>{this.#componentLocale.descriptionText}</span>\n </p>\n <span>\n {this.#componentLocale.byContinuingTextFirstPart}\n <a class=\"terms-conditions\" onClick={this.termsCallback}>\n {this.#componentLocale.byContinuingCallBackText}\n </a>\n </span>\n </div>\n <div>\n <button\n class=\"button-primary sign-in-btn\"\n onClick={this.signInCallback}\n >\n {this.#componentLocale.signInButtonCaption}\n </button>\n </div>\n </div>\n </div>\n </section>\n </Host>\n );\n }\n}\n"],"mappings":";;;;AAAA,MAAMA,IAAY;;;;;;;;;;;;;;;;;ACOlB,MAAMC,IAA0BC,EAC9B;;AAEF,MAAMC,IAAYD,EAChB;;AAEF,MAAME,IAA8B,EAClC,qBACA,oBACA;;MASWC,IAAa;;;;;;;QAKxBC,EAAAC,IAAAC,WAAA;;;;EAcA,uBAAMC;IACJC,EAAAF,MAAIF,SAA0BK,EAAOC,oBAAoBJ,KAAKK,KAAG;;EAGnE,MAAAC;IACE,OACEC,EAACC,GAAI,MACHD,EAAA;MAAUE,OAAOb;QACjBW,EAAA;MAASG,OAAM;OACbH,EAAA;MACEG,OAAM;MACNC,MAAK;MAAK,cACEC,EAAAZ,MAAIF,GAAA,KAAkBe;OAElCN,EAAA;;MAEEO,KAAKrB;MACLiB,OAAM;MACNK,KAAKH,EAAAZ,MAAIF,GAAA,KAAkBkB;SAI/BT,EAAA;MAAKG,OAAM;OACTH,EAAA;MAAKG,OAAM;OACTH,EAAA;MAAQG,OAAM;OACZH,EAAA;MACEO,KAAKnB;MACLoB,KAAKH,EAAAZ,MAAIF,GAAA,KAAkBmB;QAE7BV,EAAA;MAAIG,OAAM;OACPE,EAAAZ,MAAIF,GAAA,KAAkBoB,SAG3BX,EAAA;MAAKG,OAAM;OACTH,EAAA;MAAGY,QAAM;OACPZ,EAAA,cAAOK,EAAAZ,MAAIF,GAAA,KAAkBsB,mBAE/Bb,EAAA,cACGK,EAAAZ,MAAIF,GAAA,KAAkBuB,2BACvBd,EAAA;MAAGG,OAAM;MAAmBY,SAAStB,KAAKuB;OACvCX,EAAAZ,MAAIF,GAAA,KAAkB0B,6BAI7BjB,EAAA,aACEA,EAAA;MACEG,OAAM;MACNY,SAAStB,KAAKyB;OAEbb,EAAAZ,MAAIF,GAAA,KAAkB4B"}
@@ -1,160 +0,0 @@
1
- import { g as e, r as t, h as o, H as i, a as s } from "./p-25a9f1d7.js";
2
-
3
- import { g as r } from "./p-6e4208d8.js";
4
-
5
- import "./p-c9551186.js";
6
-
7
- import { L as a } from "./p-311eedf3.js";
8
-
9
- import { A as n } from "./p-9a609b51.js";
10
-
11
- const l = ".button-close{position:absolute;inset-inline-end:24px;inset-block-start:24px;padding:19px;border-radius:var(--control__border-radius)}.button-close:hover{background-color:var(--mer-surface__elevation--02)}.button-close:active{background-color:var(--mer-surface__elevation--03)}.button-close ch-image{transform:scale(1.8)}:host{--wrapper-copacity:0;--wrapper-min-inline-size:700px;--wrapper-max-inline-size:1040px;--wrapper-block-size:640px;transition:var(--mer-timing--regular) opacity;display:flex;align-items:center;justify-content:center;inline-size:100%;block-size:100%;padding:16px;overflow:auto}.wrapper{flex:1;display:grid;grid-template-columns:1fr var(--wrapper-block-size);block-size:var(--wrapper-block-size);max-inline-size:var(--wrapper-max-inline-size);background-color:var(--mer-surface__elevation--01);border-radius:var(--mer-spacing--sm);overflow:auto;transform:translateY(6px)}.side-inline-start{background-size:cover}.side-inline-end{position:relative;display:grid;grid-template-rows:max-content 1fr max-content;padding:64px 80px;transition:1000ms grid-template-rows;overflow:auto}.close-button{position:absolute;inset-inline-end:0;inset-block-start:0}.header{display:grid;gap:var(--mer-spacing--md);margin-block-end:92px}.header__logo__close-button{display:flex;justify-content:space-between}.title{color:var(--mer-text__on-surface);font-size:var(--mer-font__size--xl);font-weight:var(--mer-font__weight--semi-bold);letter-spacing:0.02em}.header__description{color:var(--mer-text__complementary);line-height:1.45 !important}.main{display:flex;flex-direction:column;gap:var(--mer-spacing--sm);overflow:auto}.log__container{--logVisibleLines:6;--logFontSize:12px;--logLineHeight:1.2;--logGap:4px;--logContainerBlockSize:calc(\n var(--logFontSize) * var(--logLineHeight) * var(--logVisibleLines) +\n calc(var(--logGap) * (var(--logVisibleLines) - 1))\n );block-size:var(--logContainerBlockSize);font-family:monospace;color:var(--mer-text__complementary);display:flex;flex-direction:column-reverse;gap:var(--logGap);overflow:hidden}.log__container:hover{overflow:auto}.log__message{opacity:0;transition:var(--mer-timing--regular) opacity;animation:fadeInLogMessage 0.45s ease-out forwards}.log__message--error{color:var(--mer-text__error)}.footer{display:grid;grid-auto-rows:max-content;gap:var(--mer-spacing--sm);margin-block-start:var(--mer-spacing--lg)}.error-message{font-family:monospace;font-size:13px;line-height:1.5;color:var(--mer-text__error);margin-block-start:auto;display:-webkit-box;-webkit-line-clamp:2;overflow:hidden}.status--processing{display:flex;flex-direction:row;align-items:baseline;gap:4px}@keyframes fadeInLogMessage{from{opacity:0}to{opacity:1}}.download-docker-button{margin-inline-end:12px}.button-tertiary{padding-inline-start:0 !important}";
12
-
13
- var c = undefined && undefined.__classPrivateFieldSet || function(e, t, o, i, s) {
14
- if (i === "m") throw new TypeError("Private method is not writable");
15
- if (i === "a" && !s) throw new TypeError("Private accessor was defined without a setter");
16
- if (typeof t === "function" ? e !== t || !s : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
17
- return i === "a" ? s.call(e, o) : s ? s.value = o : t.set(e, o), o;
18
- };
19
-
20
- var p = undefined && undefined.__classPrivateFieldGet || function(e, t, o, i) {
21
- if (o === "a" && !i) throw new TypeError("Private accessor was defined without a getter");
22
- if (typeof t === "function" ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
23
- return o === "m" ? i : o === "a" ? i.call(e) : i ? i.value : t.get(e);
24
- };
25
-
26
- var d;
27
-
28
- const m = e(`./gx-ide-assets/splash/images/copyrights-illustration.svg`);
29
-
30
- const g = e(`./gx-ide-assets/welcome-page/images/icon-next.svg`);
31
-
32
- const u = [ "resets/box-sizing", "utils/typography", "components/button", "chameleon/scrollbar" ];
33
-
34
- const f = r({
35
- category: "system",
36
- name: "launch",
37
- colorType: "primary"
38
- });
39
-
40
- const h = r({
41
- category: "system",
42
- name: "close",
43
- colorType: "on-elevation"
44
- });
45
-
46
- const b = class {
47
- constructor(e) {
48
- t(this, e);
49
- /**
50
- * The component hard-coded strings translations.
51
- */
52
- // eslint-disable-next-line @stencil-community/own-props-must-be-private
53
- d.set(this, void 0);
54
- this.ariaBusy = true;
55
- this.downloadDockerCallback = undefined;
56
- this.quitCallback = undefined;
57
- this.messages = [];
58
- this.openLogCallback = undefined;
59
- this.showQuitButton = false;
60
- this.showOpenLogLink = false;
61
- this.showDockerMissingError = false;
62
- }
63
- async componentWillLoad() {
64
- c(this, d, await a.getComponentStrings(this.el), "f");
65
- }
66
- render() {
67
- var e, t;
68
- const s = this.showOpenLogLink && this.openLogCallback;
69
- const r = this.showQuitButton && this.quitCallback && this.messages.length > 0;
70
- const a = !(this.showQuitButton && this.quitCallback) && ((e = this.messages) === null || e === void 0 ? void 0 : e.length) > 0;
71
- const l = this.showDockerMissingError || !a;
72
- let c = p(this, d, "f").warnings.installationFailed;
73
- if (s) {
74
- c = `${c} ${p(this, d, "f").warnings.checkTheLog}`;
75
- }
76
- return o(i, null, o("ch-theme", {
77
- model: u
78
- }), o("div", {
79
- class: {
80
- scrollable: true,
81
- wrapper: true
82
- }
83
- }, o("div", {
84
- class: "side-inline-start",
85
- style: {
86
- backgroundImage: `url(${m})`
87
- },
88
- role: "img"
89
- }), o("section", {
90
- class: "side-inline-end scrollable"
91
- }, this.quitCallback && this.showQuitButton && o("button", {
92
- class: "button-close",
93
- "aria-label": "close presentation",
94
- onClick: this.quitCallback
95
- }, o("ch-image", {
96
- class: "icon-md",
97
- src: h
98
- })), o("header", {
99
- class: "header"
100
- }, o("img", {
101
- src: g,
102
- alt: p(this, d, "f").illustrationAlternativeText
103
- }), o("h2", {
104
- class: "title"
105
- }, p(this, d, "f").title), o("p", {
106
- class: "body-italic-m header__description"
107
- }, p(this, d, "f").allRightsReserved), o("p", {
108
- class: "body-italic-m header__description"
109
- }, p(this, d, "f").copyright)), o("main", {
110
- class: "main"
111
- }, a && o("p", {
112
- class: {
113
- "body-regular-m": true,
114
- "status--processing": true
115
- }
116
- }, p(this, d, "f").initializingServices, n("tiny", "on-surface")), o("code", {
117
- class: "log__container scrollable",
118
- role: "status",
119
- "aria-live": "polite",
120
- "aria-busy": this.ariaBusy
121
- }, (t = this.messages) === null || t === void 0 ? void 0 : t.reverse().map(((e, t) => o("p", {
122
- class: {
123
- "tiny-regular-l": true,
124
- log__message: true,
125
- "log__message--error": e.type === "error"
126
- },
127
- key: this.messages.length - t
128
- }, e.text)))), l && o("p", {
129
- class: "error-message status--error"
130
- }, r && o("span", null, c), r && this.showDockerMissingError && o("span", null, " - "), this.showDockerMissingError && o("span", null, p(this, d, "f").warnings.dockerMissing))), o("footer", {
131
- class: "footer"
132
- }, o("div", {
133
- class: "buttons-spacer"
134
- }, this.showDockerMissingError && o("button", {
135
- key: "download-docker",
136
- class: "button-secondary button-icon-and-text download-docker-button",
137
- onClick: this.downloadDockerCallback
138
- }, p(this, d, "f").downloadDocker), s && o("button", {
139
- key: "open-log",
140
- class: "button-tertiary button-icon-and-text",
141
- onClick: this.openLogCallback
142
- }, o("ch-image", {
143
- class: "icon-md",
144
- src: f
145
- }), p(this, d, "f").openLog))))));
146
- }
147
- static get assetsDirs() {
148
- return [ "gx-ide-assets/splash" ];
149
- }
150
- get el() {
151
- return s(this);
152
- }
153
- };
154
-
155
- d = new WeakMap;
156
-
157
- b.style = l;
158
-
159
- export { b as gx_ide_splash };
160
- //# sourceMappingURL=p-a76d8ad7.entry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["splashCss","COPYRIGHTS_ILLUSTRATION","getAssetPath","LOGO_NEXT","CSS_BUNDLES","OPEN_LOG_ICON","getIconPath","category","name","colorType","CLOSE_ICON","GxIdeUiSplash","_GxIdeUiSplash_componentLocale","set","this","componentWillLoad","__classPrivateFieldSet","Locale","getComponentStrings","el","render","renderOpenLogLink","showOpenLogLink","openLogCallback","renderInstallationErrorMessage","showQuitButton","quitCallback","messages","length","renderInitializingMessage","_a","renderErrorMessage","showDockerMissingError","installationErrorMessage","__classPrivateFieldGet","warnings","installationFailed","checkTheLog","h","Host","model","class","scrollable","wrapper","style","backgroundImage","role","onClick","src","alt","illustrationAlternativeText","title","allRightsReserved","copyright","initializingServices","ANIMATION_DOTS","ariaBusy","_b","reverse","map","message","i","log__message","type","key","text","dockerMissing","downloadDockerCallback","downloadDocker","openLog"],"sources":["src/components/splash/splash.scss?tag=gx-ide-splash&encapsulation=shadow","src/components/splash/splash.tsx"],"sourcesContent":["@import \"../../global/components/splash-and-welcome-page\";\n\n// Shared styles\n.button-close {\n /* TODO:\n The close button seems not to be a Mercury button from the showcase.\n Ask design team to include this button style somewere. \n */\n\n position: absolute;\n inset-inline-end: 24px;\n inset-block-start: 24px;\n padding: 19px;\n border-radius: var(--control__border-radius);\n\n &:hover {\n background-color: var(--mer-surface__elevation--02);\n }\n &:active {\n background-color: var(--mer-surface__elevation--03);\n }\n\n ch-image {\n transform: scale(\n 1.8\n ); // WA: Someone said that the button looked small. This should be resolved on Mercury.\n }\n}\n\n:host {\n --wrapper-copacity: 0;\n --wrapper-min-inline-size: 700px;\n --wrapper-max-inline-size: 1040px;\n --wrapper-block-size: 640px;\n transition: var(--mer-timing--regular) opacity;\n\n display: flex;\n align-items: center;\n justify-content: center;\n inline-size: 100%;\n block-size: 100%;\n padding: 16px;\n\n overflow: auto;\n}\n\n.wrapper {\n flex: 1;\n display: grid;\n grid-template-columns: 1fr var(--wrapper-block-size);\n block-size: var(--wrapper-block-size);\n // min-inline-size: var(--wrapper-min-inline-size);\n max-inline-size: var(--wrapper-max-inline-size);\n\n background-color: var(--mer-surface__elevation--01);\n border-radius: var(--mer-spacing--sm);\n\n overflow: auto;\n transform: translateY(6px);\n}\n\n// Side inline-start (the illustration)\n.side-inline-start {\n background-size: cover;\n}\n\n// Side inline-end (the content)\n.side-inline-end {\n position: relative;\n display: grid;\n grid-template-rows: max-content 1fr max-content;\n padding: 64px 80px;\n\n transition: 1000ms grid-template-rows;\n overflow: auto;\n}\n\n.close-button {\n position: absolute;\n inset-inline-end: 0;\n inset-block-start: 0;\n}\n\n// header\n.header {\n display: grid;\n gap: var(--mer-spacing--md);\n margin-block-end: 92px;\n}\n.header__logo__close-button {\n display: flex;\n justify-content: space-between;\n}\n.title {\n color: var(--mer-text__on-surface);\n font-size: var(--mer-font__size--xl);\n font-weight: var(--mer-font__weight--semi-bold);\n letter-spacing: 0.02em;\n}\n.header__description {\n color: var(--mer-text__complementary);\n line-height: 1.45 !important;\n // TODO: Discuss with Design Team about line-height.\n // Mercury line-heights looks tight to me.\n}\n\n.main {\n display: flex;\n flex-direction: column;\n gap: var(--mer-spacing--sm);\n // margin-block-start: auto;\n\n overflow: auto;\n}\n.log__container {\n --logVisibleLines: 6;\n --logFontSize: 12px; // 12px is the font size of .tiny-regular-l\n --logLineHeight: 1.2; // 1.2 is the line-height of .tiny-regular-l\n --logGap: 4px;\n --logContainerBlockSize: calc(\n var(--logFontSize) * var(--logLineHeight) * var(--logVisibleLines) +\n calc(var(--logGap) * (var(--logVisibleLines) - 1))\n );\n block-size: var(--logContainerBlockSize);\n // TODO: Add/include on Mercury a monospaced font, and then use it here.\n font-family: monospace;\n color: var(--mer-text__complementary);\n display: flex;\n flex-direction: column-reverse;\n gap: var(--logGap);\n overflow: hidden;\n // margin-block-start: auto;\n\n &:hover {\n overflow: auto;\n }\n}\n.log__message {\n opacity: 0;\n transition: var(--mer-timing--regular) opacity;\n animation: fadeInLogMessage 0.45s ease-out forwards;\n\n &--error {\n color: var(--mer-text__error);\n }\n}\n\n// footer\n.footer {\n display: grid;\n grid-auto-rows: max-content;\n gap: var(--mer-spacing--sm);\n margin-block-start: var(--mer-spacing--lg);\n}\n.error-message {\n font-family: monospace;\n font-size: 13px;\n line-height: 1.5;\n color: var(--mer-text__error);\n margin-block-start: auto;\n // TODO: Use clamp from a helper mixin\n display: -webkit-box;\n -webkit-line-clamp: 2;\n overflow: hidden;\n}\n\n// helpers\n.status--processing {\n display: flex;\n flex-direction: row;\n align-items: baseline;\n gap: 4px;\n}\n\n@keyframes fadeInLogMessage {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n// WA/TODO\n.download-docker-button {\n margin-inline-end: 12px;\n}\n.button-tertiary {\n padding-inline-start: 0 !important;\n}\n","// Stencil\nimport {\n Component,\n Host,\n h,\n Prop,\n Element,\n State,\n getAssetPath\n} from \"@stencil/core\";\nimport { MercuryBundles, getIconPath } from \"@genexus/mercury\";\n\nimport { Locale } from \"../../common/locale\";\nimport { ANIMATION_DOTS } from \"../../common/common\";\n\nconst COPYRIGHTS_ILLUSTRATION = getAssetPath(\n `./gx-ide-assets/splash/images/copyrights-illustration.svg`\n);\nconst LOGO_NEXT = getAssetPath(\n `./gx-ide-assets/welcome-page/images/icon-next.svg`\n);\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"utils/typography\",\n \"components/button\",\n \"chameleon/scrollbar\"\n];\n\nconst OPEN_LOG_ICON = getIconPath({\n category: \"system\",\n name: \"launch\",\n colorType: \"primary\"\n});\nconst CLOSE_ICON = getIconPath({\n category: \"system\",\n name: \"close\",\n colorType: \"on-elevation\"\n});\n\n@Component({\n tag: \"gx-ide-splash\",\n styleUrl: \"splash.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/splash\"]\n})\nexport class GxIdeUiSplash {\n /**\n * The component hard-coded strings translations.\n */\n // eslint-disable-next-line @stencil-community/own-props-must-be-private\n #componentLocale: any;\n\n @Element() el: HTMLGxIdeSplashElement;\n\n /**\n * Set this to true if installation is in process\n */\n @State() ariaBusy: boolean = true;\n\n /**\n * Callback invoked when the user clicks the 'Download Docker' button.\n */\n @Prop() readonly downloadDockerCallback: () => void;\n\n /**\n * Callback invoked when the user clicks the quit button.\n */\n @Prop() readonly quitCallback: () => void;\n\n /**\n * Array of messages to display in the text box.\n * This property updates whenever a message is added,\n * and the scroll should position itself at the bottom to keep the last message visible.\n */\n @Prop() readonly messages: MessageType[] = [];\n\n /**\n * Callback invoked when the user clicks the 'Open log' link.\n */\n @Prop() readonly openLogCallback: () => void;\n\n /**\n * Set to `true` to display the quit button.\n */\n @Prop() readonly showQuitButton: boolean = false;\n\n /**\n * Set to `true` to display the 'Open log' link.\n */\n @Prop() readonly showOpenLogLink: boolean = false;\n\n /**\n * Set to `true` to display \"Docker is not installed\" error message and to display \"Download Docker\" button.\n */\n @Prop() readonly showDockerMissingError: boolean = false;\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n }\n\n render() {\n const renderOpenLogLink = this.showOpenLogLink && this.openLogCallback;\n const renderInstallationErrorMessage =\n this.showQuitButton && this.quitCallback && this.messages.length > 0;\n const renderInitializingMessage =\n !(this.showQuitButton && this.quitCallback) && this.messages?.length > 0;\n const renderErrorMessage =\n this.showDockerMissingError || !renderInitializingMessage;\n\n let installationErrorMessage =\n this.#componentLocale.warnings.installationFailed;\n if (renderOpenLogLink) {\n installationErrorMessage = `${installationErrorMessage} ${\n this.#componentLocale.warnings.checkTheLog\n }`;\n }\n\n return (\n <Host>\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <div\n class={{\n scrollable: true,\n wrapper: true\n }}\n >\n <div\n class=\"side-inline-start\"\n style={{ backgroundImage: `url(${COPYRIGHTS_ILLUSTRATION})` }}\n role=\"img\"\n ></div>\n\n <section class=\"side-inline-end scrollable\">\n {this.quitCallback && this.showQuitButton && (\n <button\n class=\"button-close\"\n aria-label=\"close presentation\"\n onClick={this.quitCallback}\n >\n <ch-image class=\"icon-md\" src={CLOSE_ICON}></ch-image>\n </button>\n )}\n\n <header class=\"header\">\n <img\n src={LOGO_NEXT}\n alt={this.#componentLocale.illustrationAlternativeText}\n />\n <h2 class=\"title\">{this.#componentLocale.title}</h2>\n <p class=\"body-italic-m header__description\">\n {this.#componentLocale.allRightsReserved}\n </p>\n <p class=\"body-italic-m header__description\">\n {this.#componentLocale.copyright}\n </p>\n </header>\n\n <main class=\"main\">\n {renderInitializingMessage && (\n <p\n class={{\n \"body-regular-m\": true,\n \"status--processing\": true\n }}\n >\n {this.#componentLocale.initializingServices}\n {ANIMATION_DOTS(\"tiny\", \"on-surface\")}\n </p>\n )}\n\n <code\n class=\"log__container scrollable\"\n role=\"status\"\n aria-live=\"polite\"\n aria-busy={this.ariaBusy}\n >\n {this.messages?.reverse().map((message, i) => {\n return (\n <p\n class={{\n \"tiny-regular-l\": true,\n \"log__message\": true,\n \"log__message--error\": message.type === \"error\"\n }}\n key={this.messages.length - i}\n >\n {message.text}\n </p>\n );\n })}\n </code>\n\n {renderErrorMessage && (\n <p class=\"error-message status--error\">\n {renderInstallationErrorMessage && (\n <span>{installationErrorMessage}</span>\n )}\n\n {renderInstallationErrorMessage &&\n this.showDockerMissingError && <span> - </span>}\n\n {this.showDockerMissingError && (\n <span>{this.#componentLocale.warnings.dockerMissing}</span>\n )}\n </p>\n )}\n </main>\n\n <footer class=\"footer\">\n <div class=\"buttons-spacer\">\n {this.showDockerMissingError && (\n <button\n key=\"download-docker\"\n class=\"button-secondary button-icon-and-text download-docker-button\"\n onClick={this.downloadDockerCallback}\n >\n {this.#componentLocale.downloadDocker}\n </button>\n )}\n\n {renderOpenLogLink && (\n <button\n key=\"open-log\"\n class=\"button-tertiary button-icon-and-text\"\n onClick={this.openLogCallback}\n >\n <ch-image class=\"icon-md\" src={OPEN_LOG_ICON}></ch-image>\n {this.#componentLocale.openLog}\n </button>\n )}\n </div>\n </footer>\n </section>\n </div>\n </Host>\n );\n }\n}\n\nexport type MessageType = {\n type: \"info\" | \"error\";\n text: string;\n};\n"],"mappings":"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"}