{"version":3,"file":"main.6rDC6Y.js","sources":["theme-13/virtual:theme","theme-13/discourse/initializers/init-nav-bar-additions.js","theme-13/virtual:entrypoint:main"],"sourcesContent":["import { getObjectForTheme } from \"discourse/lib/theme-settings-store\";\n\nexport const settings = getObjectForTheme(13);\n\nexport function themePrefix(key) {\n  return `theme_translations.13.${key}`;\n}\n","import { withPluginApi } from \"discourse/lib/plugin-api\";\nimport I18n from \"I18n\";\n\n/**\n * Resolve a field value from a nav link, checking for a locale-specific\n * translation first. Falls back to the base field value.\n */\nfunction getLocalizedField(link, fieldName) {\n  const translations = link.translations;\n  if (!translations || translations.length === 0) {\n    return link[fieldName];\n  }\n\n  const locale = I18n.currentLocale();\n\n  // Try exact match first (e.g. \"pt_BR\"), then prefix match (e.g. \"pt\")\n  const match =\n    translations.find((t) => t.locale === locale) ||\n    translations.find((t) => locale.startsWith(t.locale));\n\n  return (match && match[fieldName]) || link[fieldName];\n}\n\n// Built-in Discourse filter routes that have associated topic counts\nconst COUNTED_FILTERS = {\n  \"/new\": \"new\",\n  \"/unread\": \"unread\",\n};\n\nfunction getCountForFilter(\n  topicTrackingState,\n  filterType,\n  { enable_unified_new }\n) {\n  if (!topicTrackingState) {\n    return 0;\n  }\n\n  const newCount =\n    topicTrackingState.countNew?.() ?? topicTrackingState.newCount ?? 0;\n  const unreadCount =\n    topicTrackingState.countUnread?.() ?? topicTrackingState.unreadCount ?? 0;\n\n  if (filterType === \"new\") {\n    // When Discourse's \"Unified New\" is enabled, the /new route shows both\n    // new and unread topics, so the count should reflect both — matching\n    // the behaviour of Discourse's built-in \"New\" navigation item.\n    if (enable_unified_new) {\n      return newCount + unreadCount;\n    }\n    return newCount;\n  }\n\n  if (filterType === \"unread\") {\n    return unreadCount;\n  }\n\n  return 0;\n}\n\nexport default {\n  name: \"nav-links-component\",\n\n  initialize() {\n    withPluginApi((api) => {\n      const topicTrackingState = api.container.lookup(\n        \"service:topic-tracking-state\"\n      );\n      const siteSettings = api.container.lookup(\"service:site-settings\");\n\n      for (const link of settings.nav_links) {\n        const { display_name: displayName, url } = link;\n        const localizedDisplayName = getLocalizedField(link, \"display_name\");\n        const localizedTitle = getLocalizedField(link, \"title\");\n        const filterType = COUNTED_FILTERS[url];\n        const itemConfig = {\n          name: `custom_${displayName.replace(/\\s+/g, \"-\").toLowerCase()}`,\n          title: localizedTitle,\n          href: url,\n          forceActive: (category, args, router) =>\n            router.currentURL?.split(\"?\")[0] === url,\n        };\n\n        if (settings.Show_counts && filterType && topicTrackingState) {\n          // Use a function for displayName so Discourse re-evaluates it\n          // reactively, picking up count changes from TopicTrackingState.\n          itemConfig.displayName = () => {\n            const count = getCountForFilter(topicTrackingState, filterType, {\n              enable_unified_new: siteSettings.enable_unified_new,\n            });\n            return count > 0\n              ? `${localizedDisplayName} (${count})`\n              : localizedDisplayName;\n          };\n        } else {\n          itemConfig.displayName = localizedDisplayName;\n        }\n\n        api.addNavigationBarItem(itemConfig);\n      }\n    });\n  },\n};\n","import * as Mod1 from \"./discourse/initializers/init-nav-bar-additions\";\nconst compatModules = {\n  \"discourse/initializers/init-nav-bar-additions\": Mod1,\n};\nexport { compatModules };\nexport default compatModules;\n"],"names":["settings","getObjectForTheme","getLocalizedField","link","fieldName","translations","length","locale","I18n","currentLocale","match","find","t","startsWith","COUNTED_FILTERS","getCountForFilter","topicTrackingState","filterType","enable_unified_new","newCount","countNew","unreadCount","countUnread","initNavBarAdditions","name","initialize","withPluginApi","api","container","lookup","siteSettings","nav_links","display_name","displayName","url","localizedDisplayName","localizedTitle","itemConfig","replace","toLowerCase","title","href","forceActive","category","args","router","currentURL","split","Show_counts","count","addNavigationBarItem","compatModules"],"mappings":"6RAEaA,EAAWC,EAAkB;ACK1C,SAASC,EAAkBC,EAAMC,GAC/B,MAAMC,EAAeF,EAAKE;AAC1B,IAAKA,GAAwC,IAAxBA,EAAaC,OAChC,OAAOH,EAAKC;AAGd,MAAMG,EAASC,EAAKC,gBAGdC,EACJL,EAAaM,KAAMC,GAAMA,EAAEL,SAAWA,IACtCF,EAAaM,KAAMC,GAAML,EAAOM,WAAWD,EAAEL;AAE/C,OAAQG,GAASA,EAAMN,IAAeD,EAAKC,EAC7C,CAGA,MAAMU,EAAkB,CACtB,OAAQ,MACR,UAAW;AAGb,SAASC,EACPC,EACAC,GACAC,mBAAEA,IAEF,IAAKF,EACH,OAAO;AAGT,MAAMG,EACJH,EAAmBI,cAAgBJ,EAAmBG,UAAY,EAC9DE,EACJL,EAAmBM,iBAAmBN,EAAmBK,aAAe;AAE1E,MAAmB,QAAfJ,EAIEC,EACKC,EAAWE,EAEbF,EAGU,WAAfF,EACKI,EAGF,CACT,CAEA,IAAAE,EAAe,CACbC,KAAM,sBAENC,UAAAA;8BACEC,CAAeC,IACb,MAAMX,EAAqBW,EAAIC,UAAUC,OACvC,gCAEIC,EAAeH,EAAIC,UAAUC,OAAO;AAE1C,IAAK,MAAM1B,KAAQH,EAAS+B,UAAW,CACrC,MAAQC,aAAcC,EAAWC,IAAEA,GAAQ/B,EACrCgC,EAAuBjC,EAAkBC,EAAM,gBAC/CiC,EAAiBlC,EAAkBC,EAAM,SACzCc,EAAaH,EAAgBoB,GAC7BG,EAAa,CACjBb,KAAM,UAAUS,EAAYK,QAAQ,OAAQ,KAAKC,gBACjDC,MAAOJ,EACPK,KAAMP,EACNQ,YAAaA,CAACC,EAAUC,EAAMC,IAC5BA,EAAOC,YAAYC,MAAM,KAAK,KAAOb;AAGrClC,EAASgD,aAAe/B,GAAcD,EAGxCqB,EAAWJ,YAAc,KACvB,MAAMgB,EAAQlC,EAAkBC,EAAoBC,EAAY,CAC9DC,mBAAoBY,EAAaZ;AAEnC,OAAO+B,EAAQ,EACX,GAAGd,MAAyBc,KAC5Bd,GAGNE,EAAWJ,YAAcE,EAG3BR,EAAIuB,qBAAqBb,EAC3B,GAEJ;ACpGG,MAACc,EAAgB,CACpB;"}