@genexus/genexus-ide-ui 1.0.41 → 1.0.42

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 (89) hide show
  1. package/dist/cjs/MERCURY_ASSETS-27fcab57.js +9 -0
  2. package/dist/cjs/MERCURY_ASSETS-27fcab57.js.map +1 -0
  3. package/dist/cjs/gx-ide-ai-message.cjs.entry.js +1 -1
  4. package/dist/cjs/gx-ide-create-kb-from-server.cjs.entry.js +1 -1
  5. package/dist/cjs/gx-ide-current-user-info.cjs.entry.js +2 -2
  6. package/dist/cjs/gx-ide-current-user-info.cjs.entry.js.map +1 -1
  7. package/dist/cjs/gx-ide-dashboard-home.cjs.entry.js +1 -1
  8. package/dist/cjs/gx-ide-data-selector.cjs.entry.js +1 -1
  9. package/dist/cjs/gx-ide-data-type-selector.cjs.entry.js +1 -1
  10. package/dist/cjs/gx-ide-design-import.cjs.entry.js +1 -1
  11. package/dist/cjs/gx-ide-entity-selector.cjs.entry.js +1 -1
  12. package/dist/cjs/gx-ide-kb-manager-export.cjs.entry.js +1 -1
  13. package/dist/cjs/gx-ide-kb-manager-import.cjs.entry.js +1 -1
  14. package/dist/cjs/gx-ide-manage-module-references-v2.cjs.entry.js +1 -1
  15. package/dist/cjs/gx-ide-manage-module-references.cjs.entry.js +1 -1
  16. package/dist/cjs/gx-ide-new-kb.cjs.entry.js +1 -1
  17. package/dist/cjs/gx-ide-object-selector.cjs.entry.js +1 -1
  18. package/dist/cjs/gx-ide-share-kb.cjs.entry.js +1 -1
  19. package/dist/cjs/gx-ide-start-page.cjs.entry.js +1 -1
  20. package/dist/cjs/gx-ide-welcome-page.cjs.entry.js +1 -1
  21. package/dist/collection/components/current-user-info/current-user-info.js +1 -1
  22. package/dist/collection/components/current-user-info/current-user-info.js.map +1 -1
  23. package/dist/components/MERCURY_ASSETS.js +1 -1
  24. package/dist/components/MERCURY_ASSETS.js.map +1 -1
  25. package/dist/components/gx-ide-current-user-info.js +1 -1
  26. package/dist/components/gx-ide-current-user-info.js.map +1 -1
  27. package/dist/esm/MERCURY_ASSETS-845caae6.js +7 -0
  28. package/dist/esm/MERCURY_ASSETS-845caae6.js.map +1 -0
  29. package/dist/esm/gx-ide-ai-message.entry.js +1 -1
  30. package/dist/esm/gx-ide-create-kb-from-server.entry.js +1 -1
  31. package/dist/esm/gx-ide-current-user-info.entry.js +2 -2
  32. package/dist/esm/gx-ide-current-user-info.entry.js.map +1 -1
  33. package/dist/esm/gx-ide-dashboard-home.entry.js +1 -1
  34. package/dist/esm/gx-ide-data-selector.entry.js +1 -1
  35. package/dist/esm/gx-ide-data-type-selector.entry.js +1 -1
  36. package/dist/esm/gx-ide-design-import.entry.js +1 -1
  37. package/dist/esm/gx-ide-entity-selector.entry.js +1 -1
  38. package/dist/esm/gx-ide-kb-manager-export.entry.js +1 -1
  39. package/dist/esm/gx-ide-kb-manager-import.entry.js +1 -1
  40. package/dist/esm/gx-ide-manage-module-references-v2.entry.js +1 -1
  41. package/dist/esm/gx-ide-manage-module-references.entry.js +1 -1
  42. package/dist/esm/gx-ide-new-kb.entry.js +1 -1
  43. package/dist/esm/gx-ide-object-selector.entry.js +1 -1
  44. package/dist/esm/gx-ide-share-kb.entry.js +1 -1
  45. package/dist/esm/gx-ide-start-page.entry.js +1 -1
  46. package/dist/esm/gx-ide-welcome-page.entry.js +1 -1
  47. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  48. package/dist/genexus-ide-ui/{p-bf1682ff.entry.js → p-04d7f44c.entry.js} +20 -20
  49. package/dist/genexus-ide-ui/{p-a8e43d8e.entry.js → p-0f08bb20.entry.js} +2 -2
  50. package/dist/genexus-ide-ui/{p-88e16a83.entry.js → p-2137f5fa.entry.js} +2 -2
  51. package/dist/genexus-ide-ui/{p-05775d0c.entry.js → p-47e31aba.entry.js} +2 -2
  52. package/dist/genexus-ide-ui/{p-a3a43593.entry.js → p-48cc3f73.entry.js} +2 -2
  53. package/dist/genexus-ide-ui/{p-b81d21d5.js → p-617e65ca.js} +1486 -604
  54. package/dist/genexus-ide-ui/p-617e65ca.js.map +1 -0
  55. package/dist/genexus-ide-ui/{p-993819d4.entry.js → p-6563141c.entry.js} +2 -2
  56. package/dist/genexus-ide-ui/{p-d15caa11.entry.js → p-6747cc1e.entry.js} +5 -5
  57. package/dist/genexus-ide-ui/{p-de6112f9.entry.js → p-75ed87db.entry.js} +2 -2
  58. package/dist/genexus-ide-ui/{p-5fc133b2.entry.js → p-877cd71e.entry.js} +2 -2
  59. package/dist/genexus-ide-ui/{p-0f196406.entry.js → p-8ea94a5e.entry.js} +2 -2
  60. package/dist/genexus-ide-ui/{p-cadec045.entry.js → p-a9d67992.entry.js} +2 -2
  61. package/dist/genexus-ide-ui/{p-c2ec8185.entry.js → p-b12a5426.entry.js} +7 -7
  62. package/dist/genexus-ide-ui/{p-c2ec8185.entry.js.map → p-b12a5426.entry.js.map} +1 -1
  63. package/dist/genexus-ide-ui/{p-7cde7e4f.entry.js → p-c0e184da.entry.js} +2 -2
  64. package/dist/genexus-ide-ui/{p-764540b3.entry.js → p-c7e6222b.entry.js} +2 -2
  65. package/dist/genexus-ide-ui/{p-bd5316a2.entry.js → p-d2ab4f70.entry.js} +11 -11
  66. package/dist/genexus-ide-ui/{p-f36f9a6d.entry.js → p-d32a6ca4.entry.js} +2 -2
  67. package/dist/genexus-ide-ui/{p-7ba9fb6d.entry.js → p-f50076d3.entry.js} +2 -2
  68. package/package.json +3 -3
  69. package/dist/cjs/MERCURY_ASSETS-b23e31e2.js +0 -9
  70. package/dist/cjs/MERCURY_ASSETS-b23e31e2.js.map +0 -1
  71. package/dist/esm/MERCURY_ASSETS-7a7c1795.js +0 -7
  72. package/dist/esm/MERCURY_ASSETS-7a7c1795.js.map +0 -1
  73. package/dist/genexus-ide-ui/p-b81d21d5.js.map +0 -1
  74. /package/dist/genexus-ide-ui/{p-bf1682ff.entry.js.map → p-04d7f44c.entry.js.map} +0 -0
  75. /package/dist/genexus-ide-ui/{p-a8e43d8e.entry.js.map → p-0f08bb20.entry.js.map} +0 -0
  76. /package/dist/genexus-ide-ui/{p-88e16a83.entry.js.map → p-2137f5fa.entry.js.map} +0 -0
  77. /package/dist/genexus-ide-ui/{p-05775d0c.entry.js.map → p-47e31aba.entry.js.map} +0 -0
  78. /package/dist/genexus-ide-ui/{p-a3a43593.entry.js.map → p-48cc3f73.entry.js.map} +0 -0
  79. /package/dist/genexus-ide-ui/{p-993819d4.entry.js.map → p-6563141c.entry.js.map} +0 -0
  80. /package/dist/genexus-ide-ui/{p-d15caa11.entry.js.map → p-6747cc1e.entry.js.map} +0 -0
  81. /package/dist/genexus-ide-ui/{p-de6112f9.entry.js.map → p-75ed87db.entry.js.map} +0 -0
  82. /package/dist/genexus-ide-ui/{p-5fc133b2.entry.js.map → p-877cd71e.entry.js.map} +0 -0
  83. /package/dist/genexus-ide-ui/{p-0f196406.entry.js.map → p-8ea94a5e.entry.js.map} +0 -0
  84. /package/dist/genexus-ide-ui/{p-cadec045.entry.js.map → p-a9d67992.entry.js.map} +0 -0
  85. /package/dist/genexus-ide-ui/{p-7cde7e4f.entry.js.map → p-c0e184da.entry.js.map} +0 -0
  86. /package/dist/genexus-ide-ui/{p-764540b3.entry.js.map → p-c7e6222b.entry.js.map} +0 -0
  87. /package/dist/genexus-ide-ui/{p-bd5316a2.entry.js.map → p-d2ab4f70.entry.js.map} +0 -0
  88. /package/dist/genexus-ide-ui/{p-f36f9a6d.entry.js.map → p-d32a6ca4.entry.js.map} +0 -0
  89. /package/dist/genexus-ide-ui/{p-7ba9fb6d.entry.js.map → p-f50076d3.entry.js.map} +0 -0
@@ -72,7 +72,7 @@ const CSS_BUNDLES = [
72
72
  // TODO: review if "utils/form--full" is required.
73
73
  "resets/box-sizing",
74
74
  "components/tooltip",
75
- "components/toggle",
75
+ "components/switch",
76
76
  "components/icon",
77
77
  "components/dropdown",
78
78
  "utils/layout",
@@ -1 +1 @@
1
- {"file":"gx-ide-current-user-info.js","mappings":"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","names":[],"sources":["src/components/current-user-info/helpers.tsx","src/components/current-user-info/current-user-info.scss?tag=gx-ide-current-user-info&encapsulation=shadow","src/components/current-user-info/current-user-info.tsx"],"sourcesContent":["/**\n * Returns initials from the first two words of a name. Returns \"X\" for invalid input.\n *\n * @param name - The full name string.\n * @returns Initials of the first two words, or \"X\" if invalid.\n *\n * Example:\n * getInitialsFromName(\"John Doe\") -> \"JD\"\n * getInitialsFromName(\"Jane\") -> \"J\"\n * getInitialsFromName(\"\") -> \"X\"\n */\nexport const getInitialsFromName = (name: string): string | null => {\n if (typeof name !== \"string\" || name.trim() === \"\") {\n return \"X\";\n }\n\n const nameData = name.split(\" \").filter(Boolean); // Remove any empty strings from splitting\n if (nameData.length === 1) {\n return nameData[0][0].toUpperCase();\n } else {\n return `${nameData[0][0].toUpperCase()}${nameData[1][0].toUpperCase()}`;\n }\n};\n\n/**\n * Limits the full name to the first two words. Returns null for invalid input.\n *\n * @param fullName - The full name string to be limited.\n * @returns The first two words of the full name, or null if invalid.\n *\n * Example:\n * limitFullName(\"John Doe Smith\") -> \"John Doe\"\n * limitFullName(\"Jane\") -> \"Jane\"\n * limitFullName(\"\") -> null\n */\nexport const limitFullName = (fullName: string): string | null => {\n if (typeof fullName !== \"string\" || fullName.trim() === \"\") {\n return null;\n }\n\n const fullNameData = fullName.split(\" \").filter(Boolean); // Remove any empty strings from splitting\n if (fullNameData.length === 1) {\n return fullNameData[0];\n } else {\n return `${fullNameData[0]} ${fullNameData[1]}`;\n }\n};\n","@import \"../../../node_modules/@genexus/mercury/dist/mercury.scss\";\n\n:host {\n display: inline-grid;\n justify-items: end;\n block-size: 100%;\n}\n\n.user-login {\n &__button {\n all: unset;\n display: grid;\n grid-template-columns: max-content max-content max-content;\n align-items: center;\n gap: var(--mer-spacing--sm);\n block-size: auto;\n cursor: pointer;\n }\n &__details {\n display: grid;\n grid-template-rows: max-content max-content;\n gap: var(--mer-spacing--3xs);\n justify-items: end;\n }\n &__name {\n font-weight: var(--mer-font__weight--medium);\n font-size: var(--mer-font__size--3xs);\n color: var(--mer-text__on-elevation);\n }\n &__organization {\n font-weight: var(--mer-font__weight--light);\n font-size: var(--mer-font__size--4xs);\n color: var(--mer-text__neutral);\n }\n &__name,\n &__organization {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-inline-size: 120px;\n display: inline-block;\n }\n &__avatar {\n font-size: 9px;\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n justify-content: center;\n block-size: var(--mer-spacing--lg);\n inline-size: var(--mer-spacing--lg);\n color: var(--mer-text__on-elevation);\n border-radius: 50%;\n background-color: var(--mer-color__tinted-primary--10);\n border: var(--mer-border__width--sm) solid var(--mer-color__primary--200);\n }\n}\n\n.privacy-policy {\n text-decoration: underline;\n cursor: pointer;\n}\n","/* STENCIL IMPORTS */\nimport { Component, Element, Host, Prop, State, h } from \"@stencil/core\";\n\nimport { getIconPath, MercuryBundles } from \"@genexus/mercury\";\n\nimport { Locale } from \"../../common/locale\";\nimport { getInitialsFromName, limitFullName } from \"./helpers\";\nimport { DropdownModel } from \"@genexus/chameleon-controls-library\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n // TODO: review if \"utils/form--full\" is required.\n \"resets/box-sizing\",\n \"components/tooltip\",\n \"components/toggle\",\n \"components/icon\",\n \"components/dropdown\",\n \"utils/layout\",\n \"utils/typography\",\n \"utils/spacing\",\n \"chameleon/scrollbar\"\n];\n\nconst CHEVRON_DOWN_ICON = getIconPath({\n category: \"navigation\",\n name: \"chevron-down\",\n colorType: \"neutral\"\n});\n\nconst MY_ACCOUNT_ID = \"my-account\";\nconst CHANGE_TEAM_ID = \"change-team\";\nconst SIGN_OUT_ID = \"sign-out\";\nconst LANGUAGE_ID = \"language\";\n\n@Component({\n tag: \"gx-ide-current-user-info\",\n styleUrl: \"current-user-info.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/current-user-info\"]\n})\nexport class GxIdeNewEnvironment {\n #componentLocale: any;\n #initials: string = \"\";\n // #mode: Mode;\n #menuDropdownModel: DropdownModel;\n\n @Element() el: HTMLGxIdeCurrentUserInfoElement;\n #userLoginButton: HTMLButtonElement;\n\n @State() showMenu: boolean = false;\n\n /**\n * User data\n */\n @Prop() readonly userInfo: UserInfo;\n\n /**\n * Callback executed when the user click \"My Account\" link\n */\n @Prop() readonly myAccountCallback!: () => Promise<void>;\n\n /**\n * Callback executed when the user click \"change team\" link\n */\n @Prop() readonly changeTeamCallback!: () => Promise<void>;\n\n /**\n * Callback executed when the user click \"Language\" link\n */\n @Prop() readonly changeLanguageCallback!: () => Promise<void>;\n\n /**\n * Callback executed when the user switch the \"Mode\" status\n */\n @Prop() readonly changeModeCallback!: (mode: Mode) => Promise<void>;\n\n /**\n * Callback executed when the user click \"Sign Out\" link\n */\n @Prop() readonly signOutCallback!: () => Promise<void>;\n\n /**\n * Callback executed when the user click \"Privacy Policy & Terms of use\" link\n */\n @Prop() readonly showTermsCallback!: () => Promise<void>;\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n this.#initials = getInitialsFromName(this.userInfo.name);\n this.#menuDropdownModel = [\n {\n id: MY_ACCOUNT_ID,\n caption: this.#componentLocale.myAccountLabel,\n showSeparator: false\n },\n {\n id: CHANGE_TEAM_ID,\n caption: this.#componentLocale.changeTeamLabel,\n showSeparator: false\n },\n {\n id: SIGN_OUT_ID,\n caption: this.#componentLocale.signOutLabel,\n showSeparator: true\n }\n // {\n // id: LANGUAGE_ID,\n // caption: this.#componentLocale.languageLabel,\n // showSeparator: true\n // }\n ];\n }\n\n // #handleModeSwitch = () => {\n // this.#mode = this.#mode === \"dark\" ? \"light\" : \"dark\";\n // if (this.changeModeCallback) {\n // this.changeModeCallback(this.#mode);\n // }\n // };\n\n #dropDownitemClickHandler = (\n _event: UIEvent,\n _target: string,\n itemId: string\n ): void => {\n if (itemId === MY_ACCOUNT_ID) {\n this.myAccountCallback();\n } else if (itemId === CHANGE_TEAM_ID) {\n this.changeTeamCallback();\n } else if (itemId === SIGN_OUT_ID) {\n this.signOutCallback();\n } else if (itemId === LANGUAGE_ID) {\n this.changeLanguageCallback();\n }\n };\n\n render() {\n const userName = limitFullName(this.userInfo?.name);\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <ch-dropdown-render\n class=\"dropdown\"\n model={this.#menuDropdownModel}\n position=\"InsideEnd_OutsideEnd\"\n itemClickCallback={this.#dropDownitemClickHandler}\n >\n <button\n class=\"user-login__button\"\n ref={el => (this.#userLoginButton = el as HTMLButtonElement)}\n slot=\"action\"\n >\n <div class=\"user-login__details\">\n {userName ? (\n <span class=\"user-login__name\">{userName}</span>\n ) : null}\n {this.userInfo?.team ? (\n <span class=\"user-login__organization\">\n {this.userInfo.team}\n </span>\n ) : null}\n </div>\n\n <div class=\"user-login__avatar\">{this.#initials}</div>\n <ch-image\n src={CHEVRON_DOWN_ICON}\n class=\"icon-md\"\n containerRef={this.#userLoginButton}\n ></ch-image>\n </button>\n <div class=\"user-login__footer footer-slot\" slot=\"footer\">\n <p\n class=\"text-body-regular-s privacy-policy\"\n onClick={this.showTermsCallback}\n >\n {this.#componentLocale.privacyAndTerms}\n </p>\n </div>\n </ch-dropdown-render>\n </Host>\n );\n }\n}\n\nexport type UserInfo = {\n name: string;\n team: string;\n};\n\nexport type Mode = \"dark\" | \"light\";\n"],"version":3}
1
+ {"file":"gx-ide-current-user-info.js","mappings":"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","names":[],"sources":["src/components/current-user-info/helpers.tsx","src/components/current-user-info/current-user-info.scss?tag=gx-ide-current-user-info&encapsulation=shadow","src/components/current-user-info/current-user-info.tsx"],"sourcesContent":["/**\n * Returns initials from the first two words of a name. Returns \"X\" for invalid input.\n *\n * @param name - The full name string.\n * @returns Initials of the first two words, or \"X\" if invalid.\n *\n * Example:\n * getInitialsFromName(\"John Doe\") -> \"JD\"\n * getInitialsFromName(\"Jane\") -> \"J\"\n * getInitialsFromName(\"\") -> \"X\"\n */\nexport const getInitialsFromName = (name: string): string | null => {\n if (typeof name !== \"string\" || name.trim() === \"\") {\n return \"X\";\n }\n\n const nameData = name.split(\" \").filter(Boolean); // Remove any empty strings from splitting\n if (nameData.length === 1) {\n return nameData[0][0].toUpperCase();\n } else {\n return `${nameData[0][0].toUpperCase()}${nameData[1][0].toUpperCase()}`;\n }\n};\n\n/**\n * Limits the full name to the first two words. Returns null for invalid input.\n *\n * @param fullName - The full name string to be limited.\n * @returns The first two words of the full name, or null if invalid.\n *\n * Example:\n * limitFullName(\"John Doe Smith\") -> \"John Doe\"\n * limitFullName(\"Jane\") -> \"Jane\"\n * limitFullName(\"\") -> null\n */\nexport const limitFullName = (fullName: string): string | null => {\n if (typeof fullName !== \"string\" || fullName.trim() === \"\") {\n return null;\n }\n\n const fullNameData = fullName.split(\" \").filter(Boolean); // Remove any empty strings from splitting\n if (fullNameData.length === 1) {\n return fullNameData[0];\n } else {\n return `${fullNameData[0]} ${fullNameData[1]}`;\n }\n};\n","@import \"../../../node_modules/@genexus/mercury/dist/mercury.scss\";\n\n:host {\n display: inline-grid;\n justify-items: end;\n block-size: 100%;\n}\n\n.user-login {\n &__button {\n all: unset;\n display: grid;\n grid-template-columns: max-content max-content max-content;\n align-items: center;\n gap: var(--mer-spacing--sm);\n block-size: auto;\n cursor: pointer;\n }\n &__details {\n display: grid;\n grid-template-rows: max-content max-content;\n gap: var(--mer-spacing--3xs);\n justify-items: end;\n }\n &__name {\n font-weight: var(--mer-font__weight--medium);\n font-size: var(--mer-font__size--3xs);\n color: var(--mer-text__on-elevation);\n }\n &__organization {\n font-weight: var(--mer-font__weight--light);\n font-size: var(--mer-font__size--4xs);\n color: var(--mer-text__neutral);\n }\n &__name,\n &__organization {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-inline-size: 120px;\n display: inline-block;\n }\n &__avatar {\n font-size: 9px;\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n justify-content: center;\n block-size: var(--mer-spacing--lg);\n inline-size: var(--mer-spacing--lg);\n color: var(--mer-text__on-elevation);\n border-radius: 50%;\n background-color: var(--mer-color__tinted-primary--10);\n border: var(--mer-border__width--sm) solid var(--mer-color__primary--200);\n }\n}\n\n.privacy-policy {\n text-decoration: underline;\n cursor: pointer;\n}\n","/* STENCIL IMPORTS */\nimport { Component, Element, Host, Prop, State, h } from \"@stencil/core\";\n\nimport { getIconPath, MercuryBundles } from \"@genexus/mercury\";\n\nimport { Locale } from \"../../common/locale\";\nimport { getInitialsFromName, limitFullName } from \"./helpers\";\nimport { DropdownModel } from \"@genexus/chameleon-controls-library\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n // TODO: review if \"utils/form--full\" is required.\n \"resets/box-sizing\",\n \"components/tooltip\",\n \"components/switch\",\n \"components/icon\",\n \"components/dropdown\",\n \"utils/layout\",\n \"utils/typography\",\n \"utils/spacing\",\n \"chameleon/scrollbar\"\n];\n\nconst CHEVRON_DOWN_ICON = getIconPath({\n category: \"navigation\",\n name: \"chevron-down\",\n colorType: \"neutral\"\n});\n\nconst MY_ACCOUNT_ID = \"my-account\";\nconst CHANGE_TEAM_ID = \"change-team\";\nconst SIGN_OUT_ID = \"sign-out\";\nconst LANGUAGE_ID = \"language\";\n\n@Component({\n tag: \"gx-ide-current-user-info\",\n styleUrl: \"current-user-info.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/current-user-info\"]\n})\nexport class GxIdeNewEnvironment {\n #componentLocale: any;\n #initials: string = \"\";\n // #mode: Mode;\n #menuDropdownModel: DropdownModel;\n\n @Element() el: HTMLGxIdeCurrentUserInfoElement;\n #userLoginButton: HTMLButtonElement;\n\n @State() showMenu: boolean = false;\n\n /**\n * User data\n */\n @Prop() readonly userInfo: UserInfo;\n\n /**\n * Callback executed when the user click \"My Account\" link\n */\n @Prop() readonly myAccountCallback!: () => Promise<void>;\n\n /**\n * Callback executed when the user click \"change team\" link\n */\n @Prop() readonly changeTeamCallback!: () => Promise<void>;\n\n /**\n * Callback executed when the user click \"Language\" link\n */\n @Prop() readonly changeLanguageCallback!: () => Promise<void>;\n\n /**\n * Callback executed when the user switch the \"Mode\" status\n */\n @Prop() readonly changeModeCallback!: (mode: Mode) => Promise<void>;\n\n /**\n * Callback executed when the user click \"Sign Out\" link\n */\n @Prop() readonly signOutCallback!: () => Promise<void>;\n\n /**\n * Callback executed when the user click \"Privacy Policy & Terms of use\" link\n */\n @Prop() readonly showTermsCallback!: () => Promise<void>;\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n this.#initials = getInitialsFromName(this.userInfo.name);\n this.#menuDropdownModel = [\n {\n id: MY_ACCOUNT_ID,\n caption: this.#componentLocale.myAccountLabel,\n showSeparator: false\n },\n {\n id: CHANGE_TEAM_ID,\n caption: this.#componentLocale.changeTeamLabel,\n showSeparator: false\n },\n {\n id: SIGN_OUT_ID,\n caption: this.#componentLocale.signOutLabel,\n showSeparator: true\n }\n // {\n // id: LANGUAGE_ID,\n // caption: this.#componentLocale.languageLabel,\n // showSeparator: true\n // }\n ];\n }\n\n // #handleModeSwitch = () => {\n // this.#mode = this.#mode === \"dark\" ? \"light\" : \"dark\";\n // if (this.changeModeCallback) {\n // this.changeModeCallback(this.#mode);\n // }\n // };\n\n #dropDownitemClickHandler = (\n _event: UIEvent,\n _target: string,\n itemId: string\n ): void => {\n if (itemId === MY_ACCOUNT_ID) {\n this.myAccountCallback();\n } else if (itemId === CHANGE_TEAM_ID) {\n this.changeTeamCallback();\n } else if (itemId === SIGN_OUT_ID) {\n this.signOutCallback();\n } else if (itemId === LANGUAGE_ID) {\n this.changeLanguageCallback();\n }\n };\n\n render() {\n const userName = limitFullName(this.userInfo?.name);\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <ch-dropdown-render\n class=\"dropdown\"\n model={this.#menuDropdownModel}\n position=\"InsideEnd_OutsideEnd\"\n itemClickCallback={this.#dropDownitemClickHandler}\n >\n <button\n class=\"user-login__button\"\n ref={el => (this.#userLoginButton = el as HTMLButtonElement)}\n slot=\"action\"\n >\n <div class=\"user-login__details\">\n {userName ? (\n <span class=\"user-login__name\">{userName}</span>\n ) : null}\n {this.userInfo?.team ? (\n <span class=\"user-login__organization\">\n {this.userInfo.team}\n </span>\n ) : null}\n </div>\n\n <div class=\"user-login__avatar\">{this.#initials}</div>\n <ch-image\n src={CHEVRON_DOWN_ICON}\n class=\"icon-md\"\n containerRef={this.#userLoginButton}\n ></ch-image>\n </button>\n <div class=\"user-login__footer footer-slot\" slot=\"footer\">\n <p\n class=\"text-body-regular-s privacy-policy\"\n onClick={this.showTermsCallback}\n >\n {this.#componentLocale.privacyAndTerms}\n </p>\n </div>\n </ch-dropdown-render>\n </Host>\n );\n }\n}\n\nexport type UserInfo = {\n name: string;\n team: string;\n};\n\nexport type Mode = \"dark\" | \"light\";\n"],"version":3}