@the-portland-company/shell 0.96.1 → 0.96.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ ## 0.96.2
2
+
3
+ The org switcher list shows each organization's icon (Specs/Left-Navigation §6: each org "with its icon mark, name and short ID"; Ben 2026-11-04: the Primary logo showed in the card, but the list did not show the icon).
4
+
5
+ - **Switcher rows use `iconUrl`.** A row shows the org's Brand Kit icon on a white tile, uncropped (`object-contain`). Without an icon it shows the Primary logo as before, then initials. Each row's mark carries `data-org-option-mark="icon" | "logo" | "initials"`.
6
+ - **`iconUrl` reaches the switcher and the collapsed rail.** `ChromeOrgSummary` gains optional `iconUrl` (sent by the chrome API `/api/orgs` from contacts#425). Every org-list copy in the chrome state (token, controlled and uncontrolled providers) and the active org card in `PolitogyAppFrame` now carry it, so the collapsed rail's `OrgIconMark` gets the icon too. Apps that pass their own `tokenOrg.orgs` or controlled `orgs` should include `iconUrl` from `/api/orgs`.
7
+ - Tests: `__tests__/orgSwitcherIcon.test.tsx`.
8
+
1
9
  ## 0.96.1
2
10
 
3
11
  Privacy, Terms and Subscriptions open in a new tab (Ben 2026-11-04: clicking Privacy replaced the app with the public Politogy ID page, with no left bar or top bar).
@@ -2985,6 +2985,8 @@ function NavSidebar({
2985
2985
  ] }) : null,
2986
2986
  filterOrgs(org.organizations, orgFilter).map((o) => {
2987
2987
  const selected = o.id === org.id;
2988
+ const iconSrc = resolveOrgLogoUrl(o.iconUrl);
2989
+ const logoSrc = iconSrc ? void 0 : resolveOrgLogoUrl(o.logoUrl);
2988
2990
  return /* @__PURE__ */ jsxRuntime.jsxs(
2989
2991
  "button",
2990
2992
  {
@@ -3003,12 +3005,13 @@ function NavSidebar({
3003
3005
  /* @__PURE__ */ jsxRuntime.jsx(
3004
3006
  "span",
3005
3007
  {
3006
- style: { backgroundColor: o.brandColor || ORG_PILL_DEFAULT },
3007
- className: "flex h-6 w-6 shrink-0 items-center justify-center overflow-hidden rounded-full text-[10px] font-bold text-[#FFFFFF]",
3008
- children: resolveOrgLogoUrl(o.logoUrl) ? /* @__PURE__ */ jsxRuntime.jsx(
3008
+ "data-org-option-mark": iconSrc ? "icon" : logoSrc ? "logo" : "initials",
3009
+ style: iconSrc ? void 0 : { backgroundColor: o.brandColor || ORG_PILL_DEFAULT },
3010
+ className: `flex h-6 w-6 shrink-0 items-center justify-center overflow-hidden text-[10px] font-bold text-[#FFFFFF] ${iconSrc ? "rounded-[4px] bg-[#FFFFFF]" : "rounded-full"}`,
3011
+ children: iconSrc ? /* @__PURE__ */ jsxRuntime.jsx("img", { src: iconSrc, alt: "", className: "max-h-full max-w-full object-contain" }) : logoSrc ? /* @__PURE__ */ jsxRuntime.jsx(
3009
3012
  "img",
3010
3013
  {
3011
- src: resolveOrgLogoUrl(o.logoUrl),
3014
+ src: logoSrc,
3012
3015
  alt: "",
3013
3016
  className: "h-full w-full object-cover"
3014
3017
  }
@@ -5072,6 +5075,7 @@ function FrameBody({
5072
5075
  name: activeCoreOrg.name,
5073
5076
  id: activeCoreOrg.id,
5074
5077
  logoUrl: activeCoreOrg.logoUrl,
5078
+ iconUrl: activeCoreOrg.iconUrl ?? null,
5075
5079
  brandColor: activeCoreOrg.brandColor,
5076
5080
  organizations: coreOrgs,
5077
5081
  onSwitch: chrome?.setOrgId
@@ -5175,6 +5179,7 @@ function TokenChromeStateProvider({
5175
5179
  id: o.id,
5176
5180
  name: o.name,
5177
5181
  logoUrl: o.logoUrl,
5182
+ iconUrl: o.iconUrl ?? null,
5178
5183
  brandColor: o.brandColor,
5179
5184
  role: o.role,
5180
5185
  rawRole: o.rawRole ?? null
@@ -5435,6 +5440,7 @@ function ChromeStateProvider({
5435
5440
  id: o.id,
5436
5441
  name: o.name,
5437
5442
  logoUrl: o.logoUrl,
5443
+ iconUrl: o.iconUrl ?? null,
5438
5444
  brandColor: o.brandColor,
5439
5445
  role: o.role,
5440
5446
  rawRole: o.rawRole ?? null
@@ -5452,6 +5458,7 @@ function ChromeStateProvider({
5452
5458
  id: o.id,
5453
5459
  name: o.name,
5454
5460
  logoUrl: o.logoUrl,
5461
+ iconUrl: o.iconUrl ?? null,
5455
5462
  brandColor: o.brandColor,
5456
5463
  role: o.role,
5457
5464
  rawRole: o.rawRole ?? null