{"version":3,"file":"virtual_main.js","sources":["theme-60/virtual:init-settings","theme-60/virtual:theme","theme-60/discourse/api-initializers/experimental_user_card.js","theme-60/discourse/templates/components/user-badge.hbs","theme-60/discourse/templates/components/user-card-contents.hbs","theme-60/virtual:main"],"sourcesContent":["import { registerSettings } from \"discourse/lib/theme-settings-store\";\n\nregisterSettings(60, {\n  \"use_contract_date_for_cakeday\": false,\n  \"google_maps_location\": false,\n  \"user_location_maps_link\": \"none\"\n});\n","import { getObjectForTheme } from \"discourse/lib/theme-settings-store\";\n\nexport const settings = getObjectForTheme(60);\n\nexport function themePrefix(key) {\n  return `theme_translations.60.${key}`;\n}\n","import { get } from \"@ember/object\";\nimport { isEmpty } from \"@ember/utils\";\nimport { apiInitializer } from \"discourse/lib/api\";\nimport discourseComputed, { observes } from \"discourse/lib/decorators\";\nimport { getURLWithCDN } from \"discourse/lib/get-url\";\n\nexport default apiInitializer(\"0.11.1\", (api) => {\n  api.modifyClass(\"component:user-card-contents\", {\n    classNames: \"d-user-card\",\n    pluginId: \"experimental-user-card\",\n\n    @discourseComputed()\n    themeSettingValid() {\n      return [\"google_maps\", \"open_street_map\"].includes(\n        settings.user_location_maps_link\n      );\n    },\n\n    @discourseComputed()\n    userLocationLink() {\n      const mapOption = settings.user_location_maps_link;\n      if (mapOption === \"google_maps\") {\n        return `https://www.google.com/maps/place/${encodeURIComponent(\n          this.user.location\n        )}`;\n      } else {\n        return `https://www.openstreetmap.org/search?query=${encodeURIComponent(\n          this.user.location\n        )}`;\n      }\n    },\n\n    @observes(\"user.card_background_upload_url\")\n    addBackground() {\n      if (!this.allowBackgrounds) {\n        return;\n      }\n\n      const thisElem = this.element;\n      if (!thisElem) {\n        return;\n      }\n\n      if (!this.user) {\n        return;\n      }\n\n      const backgroundUrl = this.get(\"user.card_background_upload_url\");\n      const avatar_template = get(this.user, \"avatar_template\").replace(\n        \"{size}\",\n        \"240\"\n      );\n\n      if (!avatar_template) {\n        return;\n      }\n\n      const bg = isEmpty(backgroundUrl)\n        ? `url(${getURLWithCDN(avatar_template)})`\n        : `url(${getURLWithCDN(backgroundUrl)})`;\n      thisElem.style.setProperty(\"--user-background\", bg);\n\n      if (isEmpty(backgroundUrl) && !isEmpty(avatar_template)) {\n        thisElem.classList.add(\"avatar-background\");\n      }\n    },\n  });\n});\n","<a class=\"user-card-badge-link\" href={{this.badgeUrl}}>\n  <BadgeButton @badge={{@badge}}>\n    {{#if this.showGrantCount}}\n      <span class=\"count\">(&times;&nbsp;{{@count}})</span>\n    {{/if}}\n  </BadgeButton>\n  <DTooltip>\n    {{@badge.name}}\n  </DTooltip>\n</a>","{{#if this.visible}}\n  <PluginOutlet\n    @name=\"before-user-card-content\"\n    @outletArgs={{hash user=this.user}}\n  />\n  {{#if this.loading}}\n    <div class=\"d-user-card__header d-user-card__placeholder-animation\">\n    </div>\n    <div class=\"d-user-card__main-content\">\n      <div class=\"d-user-card__main-content-top\">\n        <div class=\"d-user-card__id\">\n          <span\n            class=\"card-avatar-placeholder d-user-card__placeholder-animation\"\n          >\n          </span>\n          <span class=\"d-user-card__id-titles\">\n            <div\n              class=\"d-user-card__titles-top d-user-card__placeholder-animation\"\n            >\n            </div>\n            <div\n              class=\"d-user-card__titles-bottom d-user-card__placeholder-animation\"\n            >\n            </div>\n          </span>\n        </div>\n        <div class=\"d-user-card__user-content\">\n          <div\n            class=\"d-user-card__custom-fields .card-row .d-user-card__placeholder-animation\"\n          >\n          </div>\n        </div>\n      </div>\n      <div class=\"d-user-card__main-content-bottom\">\n        <div class=\"card-row d-user-card__placeholder-animation\"></div>\n        <div class=\"card-row d-user-card__placeholder-animation\"></div>\n        <div class=\"card-row d-user-card__placeholder-animation\"></div>\n      </div>\n    </div>\n  {{else}}\n    <div class=\"d-user-card__container\">\n      <div class=\"d-user-card__header\">\n        {{! TODO: Add ability to edit image/color from usercard }}\n        {{! <button class=\"d-user-card__edit-btn\">\n        <i class=\"fa-solid fa-pencil\"></i>\n        <span class=\"btn-label\">Edit</span>\n        </button> }}\n        {{#unless this.contentHidden}}\n          {{#if (or this.showUserLocalTime this.user.location)}}\n            <div class=\"d-user-card__relative-time\">\n              {{#if this.showUserLocalTime}}\n                <div class=\"d-user-card__time\">\n                  {{d-icon \"far-clock\"}}\n                  <span class=\"label\">{{this.formattedUserLocalTime}}</span>\n                </div>\n              {{/if}}\n              {{#if this.user.location}}\n                <div class=\"d-user-card__location\">\n                  {{d-icon \"location-dot\"}}\n                  {{#if this.themeSettingValid}}\n                    <a\n                      href={{this.userLocationLink}}\n                      class=\"label d-user-card__location-link\"\n                    >{{this.user.location}}</a>\n                  {{else}}\n                    <span class=\"label\">{{this.user.location}}</span>\n                  {{/if}}\n                </div>\n              {{/if}}\n            </div>\n          {{/if}}\n        {{/unless}}\n        <div class=\"d-user-card__badges\">\n          {{#if this.showBadges}}\n            {{#if this.user.featured_user_badges}}\n              {{#each this.user.featured_user_badges as |ub|}}\n                <UserBadge @badge={{ub.badge}} @user={{this.user}} />\n              {{/each}}\n              {{#if this.showMoreBadges}}\n                <span class=\"d-user-card__badges-more\">\n                  <LinkTo @route=\"user.badges\" @model={{this.user}}>\n                    {{theme-i18n \"more_badges\" count=this.moreBadgesCount}}\n                  </LinkTo>\n                </span>\n              {{/if}}\n            {{/if}}\n          {{/if}}\n        </div>\n      </div>\n      <div class=\"d-user-card__main-content\">\n        <div class=\"d-user-card__main-content-top\">\n          <div class=\"d-user-card__id\">\n            {{#if this.contentHidden}}\n              <span class=\"d-user-card__avatar\">{{bound-avatar\n                  this.user\n                  \"huge\"\n                }}</span>\n            {{else}}\n              <a\n                href={{this.user.path}}\n                {{on \"click\" (fn this.handleShowUser this.user)}}\n                class=\"d-user-card__avatar\"\n              >{{bound-avatar this.user \"huge\"}}</a>\n            {{/if}}\n            <UserAvatarFlair @user={{this.user}} />\n            <div>\n              <PluginOutlet\n                @name=\"user-card-avatar-flair\"\n                @connectorTagName=\"div\"\n                @outletArgs={{hash user=this.user}}\n              />\n            </div>\n            <div class=\"d-user-card__id-titles\">\n              <div class=\"d-user-card__titles-top\">\n                <h1\n                  class=\"d-user-card__name\n                    {{this.staff}}\n                    {{this.newUser}}\n                    {{if this.nameFirst 'full-name' 'username'}}\"\n                  title=\"@{{this.user.username}}\"\n                >\n                  {{#if this.contentHidden}}\n                    {{if\n                      this.nameFirst\n                      this.user.name\n                      (format-username this.user.username)\n                    }}\n                  {{else}}\n                    <a\n                      href={{this.user.path}}\n                      title={{if\n                        this.nameFirst\n                        this.user.name\n                        (format-username this.user.username)\n                      }}\n                      {{on \"click\" (fn this.handleShowUser this.user)}}\n                      class=\"d-user-card__user-link\"\n                    >\n                      {{if\n                        this.nameFirst\n                        this.user.name\n                        (format-username this.user.username)\n                      }}\n                    </a>\n                  {{/if}}\n                  {{user-status this.user currentUser=this.currentUser}}\n                </h1>\n                {{#if this.user.staged}}\n                  <span class=\"staged\">{{i18n \"user.staged\"}}</span>\n                {{/if}}\n                <div>\n                  <PluginOutlet\n                    @name=\"user-card-post-names\"\n                    @connectorTagName=\"div\"\n                    @outletArgs={{hash user=this.user}}\n                  />\n                </div>\n              </div>\n              <div class=\"d-user-card__titles-bottom\">\n                {{#if this.nameFirst}}\n                  <span class=\"d-user-card__user-name\" title=\"Fullname\">\n                    @{{this.user.username}}\n                  </span>\n                {{else}}\n                  {{#if this.user.name}}\n                    <span class=\"d-user-card__user-name\" title=\"Fullname\">\n                      {{this.user.name}}\n                    </span>\n                  {{/if}}\n                {{/if}}\n                {{#if this.user.title}}\n                  <span class=\"d-user-card__user-title\">\n                    {{if this.user.name \" - \"}}{{this.user.title}}\n                  </span>\n                {{/if}}\n                {{#if this.user.status}}\n                  <UserStatusMessage @status={{this.user.status}} />\n                {{/if}}\n              </div>\n            </div>\n          </div>\n          <div class=\"d-user-card__user-content\">\n            {{#if this.showFeaturedTopic}}\n              <div class=\"d-user-card__featured-topic\">\n                <span class=\"d-user-card__featured-topic-title\">{{emoji\n                    \"pushpin\"\n                  }}</span>\n                <LinkTo\n                  @route=\"topic\"\n                  @models={{array\n                    this.user.featured_topic.slug\n                    this.user.featured_topic.id\n                  }}\n                  title={{i18n \"user.featured_topic\"}}\n                  class=\"d-user-card__link\"\n                >{{replace-emoji\n                    (html-safe this.user.featured_topic.fancy_title)\n                  }}</LinkTo>\n              </div>\n            {{/if}}\n            {{#if this.user.profile_hidden}}\n              <span>{{i18n \"user.profile_hidden\"}}</span>\n            {{else if this.user.inactive}}\n              <span>{{i18n \"user.inactive_user\"}}</span>\n            {{/if}}\n            {{#if this.isSuspendedOrHasBio}}\n              <div class=\"d-user-card__bio\">\n                {{#if this.user.suspend_reason}}\n                  <div class=\"d-user-card__suspension\">\n                    <div class=\"d-user-card__suspension-date\">\n                      {{d-icon \"ban\"}}\n                      {{#if this.user.suspendedForever}}\n                        {{i18n \"user.suspended_permanently\"}}\n                      {{else}}\n                        {{i18n\n                          \"user.suspended_notice\"\n                          date=this.user.suspendedTillDate\n                        }}\n                      {{/if}}\n                    </div>\n                    <div class=\"d-user-card__suspension-reason\">\n                      <span class=\"d-user-card__suspension-reason-title\">{{i18n\n                          \"user.suspended_reason\"\n                        }}</span>\n                      <span\n                        class=\"d-user-card__suspension-reason-description\"\n                      >{{this.user.suspend_reason}}</span>\n                    </div>\n                  </div>\n                {{else}}\n                  {{#if this.user.bio_excerpt}}\n                    <div class=\"d-user-card__bio-excerpt\">\n                      <HtmlWithLinks>\n                        <p>{{replace-emoji\n                            (html-safe this.user.bio_excerpt)\n                          }}</p>\n                      </HtmlWithLinks>\n                    </div>\n                  {{/if}}\n                {{/if}}\n              </div>\n            {{/if}}\n            {{#unless this.contentHidden}}\n              <div class=\"d-user-card__custom-fields\">\n                <div class=\"d-user-card__custom-field-group\">\n                  {{#if this.user.time_read}}\n                    <div class=\"d-user-card__field read\">\n                      <span class=\"d-user-card__custom-field-title\">{{i18n\n                          \"time_read\"\n                        }}</span>\n                      <span\n                        class=\"d-user-card__custom-field-data\"\n                      >{{format-duration this.user.time_read}}\n                        {{#if this.showRecentTimeRead}}\n                          ({{i18n\n                            \"time_read_recently\"\n                            time_read=this.recentTimeRead\n                          }})\n                        {{/if}}\n                      </span>\n                    </div>\n                  {{/if}}\n                  {{#if this.user.last_posted_at}}\n                    <div class=\"d-user-card__field posted\">\n                      <span class=\"d-user-card__custom-field-title\">{{i18n\n                          \"last_post\"\n                        }}</span>\n                      <span class=\"d-user-card__custom-field-data\">{{format-date\n                          this.user.last_posted_at\n                          leaveAgo=\"true\"\n                        }}</span>\n                    </div>\n                  {{/if}}\n                  {{#if this.showCheckEmail}}\n                    <div class=\"d-user-card__field email\">\n                      <span class=\"d-user-card__custom-field-data\">\n                        {{d-icon \"envelope\" title=\"user.email.title\"}}\n                        {{#if this.user.email}}\n                          {{this.user.email}}\n                        {{else}}\n                          <DButton\n                            @action={{action \"checkEmail\"}}\n                            @actionParam={{this.user}}\n                            @icon=\"envelope\"\n                            @label=\"admin.users.check_email.text\"\n                            class=\"btn-primary\"\n                          />\n                        {{/if}}\n                      </span>\n                    </div>\n                  {{/if}}\n                  <PluginOutlet\n                    @name=\"user-card-metadata\"\n                    @connectorTagName=\"div\"\n                    @outletArgs={{hash user=this.user}}\n                  />\n                  {{#if this.publicUserFields}}\n                    {{#each this.publicUserFields as |uf|}}\n                      {{#if uf.value}}\n                        <div\n                          class=\"d-user-card__field\n                            {{uf.field.dasherized_name}}\"\n                        >\n                          <span\n                            class=\"d-user-card__custom-field-title\"\n                          >{{uf.field.name}}</span>\n                          <span class=\"d-user-card__custom-field-data\">\n                            {{#each uf.value as |v|}}\n                              {{! some values are arrays }}\n                              {{v}}\n                            {{else}}\n                              {{uf.value}}\n                            {{/each}}\n                          </span>\n                        </div>\n                      {{/if}}\n                    {{/each}}\n                  {{/if}}\n                </div>\n              </div>\n            {{/unless}}\n            <PluginOutlet\n              @name=\"user-card-after-metadata\"\n              @connectorTagName=\"div\"\n              @outletArgs={{hash user=this.user}}\n            />\n            <div class=\"d-user-card__meta-data\">\n              {{#if this.user.website_name}}\n                <div class=\"d-user-card__website\">\n                  {{d-icon \"globe\"}}\n                  {{! template-lint-disable link-rel-noopener }}\n                  <a\n                    href={{this.user.website}}\n                    rel=\"noopener {{unless this.removeNoFollow 'nofollow ugc'}}\"\n                    target=\"_blank\"\n                    class=\"d-user-card__link\"\n                  >{{this.user.website_name}}</a>\n                  {{! template-lint-enable link-rel-noopener }}\n                </div>\n              {{/if}}\n              {{#if this.user.created_at}}\n                <div class=\"d-user-card__cakeday\">\n                  <img\n                    height=\"20\"\n                    width=\"20\"\n                    src=\"https://emoji.discourse-cdn.com/twitter/cake.png?v=12\"\n                    alt=\"\"\n                  />\n                  <span class=\"label\">{{format-date\n                      (if\n                        (theme-setting \"use_contract_date_for_cakeday\")\n                        this.user.custom_fields.employee_contract_start_date\n                        this.user.created_at\n                      )\n                      leaveAgo=\"true\"\n                    }}</span>\n                </div>\n              {{/if}}\n              <span>\n                <PluginOutlet\n                  @name=\"user-card-location-and-website\"\n                  @connectorTagName=\"div\"\n                  @outletArgs={{hash user=this.user}}\n                />\n              </span>\n            </div>\n          </div>\n        </div>\n        {{#if\n          (or\n            this.user.can_send_private_message_to_user\n            this.showFilter\n            this.hasUserFilters\n            this.showDelete\n          )\n        }}\n          <div class=\"d-user-card__main-content-bottom\">\n            <ul class=\"d-user-card__controls\">\n              {{#if this.user.can_send_private_message_to_user}}\n                <li class=\"d-user-card__action\">\n                  <DButton\n                    class=\"d-user-card__button btn-primary\"\n                    @action={{action \"composePM\" this.user this.post}}\n                    @icon=\"envelope\"\n                    @label=\"user.private_message\"\n                  />\n                </li>\n              {{/if}}\n              <PluginOutlet\n                @name=\"user-card-below-message-button\"\n                @connectorTagName=\"li\"\n                @outletArgs={{hash user=this.user close=(action \"close\")}}\n              />\n              {{#if this.showFilter}}\n                <li class=\"d-user-card__action\">\n                  <DButton\n                    class=\"d-user-card__button btn-default\"\n                    @action={{action \"filterPosts\" this.user}}\n                    @icon=\"filter\"\n                    @translatedLabel={{this.filterPostsLabel}}\n                  />\n                </li>\n              {{/if}}\n              {{#if this.hasUserFilters}}\n                <li class=\"d-user-card__action\">\n                  <DButton\n                    class=\"d-user-card__button btn-default\"\n                    @action={{action \"cancelFilter\"}}\n                    @icon=\"xmark\"\n                    @label=\"topic.filters.cancel\"\n                  />\n                </li>\n              {{/if}}\n              {{#if this.showDelete}}\n                <li class=\"d-user-card__action\">\n                  <DButton\n                    class=\"d-user-card__button btn-danger\"\n                    @action={{action \"deleteUser\"}}\n                    @actionParam={{this.user}}\n                    @icon=\"triangle-exclamation\"\n                    @label=\"admin.user.delete\"\n                  />\n                </li>\n              {{/if}}\n              <PluginOutlet\n                @name=\"user-card-additional-buttons\"\n                @outletArgs={{hash user=this.user close=(action \"close\")}}\n              />\n            </ul>\n            <PluginOutlet\n              @name=\"user-card-additional-controls\"\n              @connectorTagName=\"div\"\n              @outletArgs={{hash user=this.user close=(action \"close\")}}\n            />\n          </div>\n        {{/if}}\n      </div>\n    </div>\n  {{/if}}\n\n{{/if}}","import \"virtual:init-settings\";\n\nconst themeCompatModules = {};\nimport * as Mod1 from \"./discourse/api-initializers/experimental_user_card\";\nthemeCompatModules[\"discourse/api-initializers/experimental_user_card\"] = Mod1;\n\nimport * as Mod2 from \"./discourse/templates/components/user-badge\";\nthemeCompatModules[\"discourse/templates/components/user-badge\"] = Mod2;\n\nimport * as Mod3 from \"./discourse/templates/components/user-card-contents\";\nthemeCompatModules[\"discourse/templates/components/user-card-contents\"] = Mod3;\n\nexport default themeCompatModules;\n"],"names":["registerSettings","use_contract_date_for_cakeday","google_maps_location","user_location_maps_link","settings","getObjectForTheme","experimental_user_card","apiInitializer","api","modifyClass","dt7948","p","classNames","pluginId","themeSettingValid","includes","userLocationLink","encodeURIComponent","this","user","location","addBackground","allowBackgrounds","thisElem","element","backgroundUrl","get","avatar_template","replace","bg","isEmpty","getURLWithCDN","style","setProperty","classList","add","discourseComputed","observes","userBadge","createTemplateFactory","id","block","moduleName","isStrictMode","userCardContents","themeCompatModules","Mod1","Mod2","Mod3"],"mappings":";AAEAA,EAAiB,GAAI,CACnBC,+BAAiC,EACjCC,sBAAwB,EACxBC,wBAA2B;ACHtB,MAAMC,EAAWC,EAAkB;ACI1C,IAAAC,EAAeC,EAAe,SAAWC,IACvCA,EAAIC,YAAY,+BAA8BC,OAAAC,EAAE,CAC9CC,WAAY,cACZC,SAAU,yBAGVC,kBAAiBA,IACR,CAAC,cAAe,mBAAmBC,SACxCX,EAASD,yBAKba,gBAAAA,GAEE,MAAkB,gBADAZ,EAASD,wBAElB,qCAAqCc,mBAC1CC,KAAKC,KAAKC,YAGL,8CAA8CH,mBACnDC,KAAKC,KAAKC,WAGhB,EAGAC,aAAAA,GACE,IAAKH,KAAKI,iBACR;AAGF,MAAMC,EAAWL,KAAKM;AACtB,IAAKD,EACH;AAGF,IAAKL,KAAKC,KACR;AAGF,MAAMM,EAAgBP,KAAKQ,IAAI,mCACzBC,EAAkBD,EAAIR,KAAKC,KAAM,mBAAmBS,QACxD,SACA;AAGF,IAAKD,EACH;AAGF,MAAME,EAAKC,EAAQL,GACf,OAAOM,EAAcJ,MACrB,OAAOI,EAAcN;AACzBF,EAASS,MAAMC,YAAY,oBAAqBJ,GAE5CC,EAAQL,KAAmBK,EAAQH,IACrCJ,EAASW,UAAUC,IAAI,oBAE3B,GACD,CAAA,CAAA,SAAA,oBAAA,CAvDEC,oCAOAA,MAAmB,CAAA,SAAA,gBAAA,CAcnBC,EAAS,sFC9BAC,EAAAC,EAAA,CAAAC,GAAA,KAAAC,MAAA,keAAAC,WAAA,yDAAAC,cAAA,gDCAAC,EAAAL,EAAA,CAAAC,GAAA,KAAAC,MAAA,opiBAAAC,WAAA,iEAAAC,cAAA;ACAT,MAACE,EAAqB,CAAA;AAE3BA,EAAmB,qDAAuDC,EAG1ED,EAAmB,6CAA+CE,EAGlEF,EAAmB,qDAAuDG;"}