@the-portland-company/shell 0.57.0 → 0.59.0

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,22 @@
1
+ ## 0.59.0 — 2026-09-30
2
+
3
+ ### Fixed — parent nav row stays active on child routes when the 'tabs' nav preference strips children (`src/app-chrome/frame.tsx`, DevNotes ebb036a1)
4
+
5
+ ## 0.58.0 — 2026-09-30
6
+
7
+ ### Fixed — Meta build-metadata row renders for every viewer (`src/app-chrome/index.tsx`)
8
+
9
+ `useChromeFooter` gated the `env | commit | version` / `date | author` rows
10
+ behind Super Administrator. Reference/UI-Platform "Left bar — required
11
+ elements" and Specs/Left-Navigation §10 list Meta unconditionally, so every
12
+ non-admin viewer was missing a required rail element (DevNotes 83a64713).
13
+
14
+ ### Fixed — rail font pinned to the Brand token (`src/native/index.tsx`)
15
+
16
+ `NavSidebar` now sets `font-family: var(--font-family, …)` directly instead
17
+ of inheriting `body`, so an app-level font (Contacts) can no longer leak into
18
+ the left rail (DevNotes 64a4961e).
19
+
1
20
  ## 0.57.0 — 2026-09-30
2
21
 
3
22
  ### Fixed — 10DLC alert no longer auto-redirects on every login (`src/native/chromeActions.tsx`)
@@ -2094,6 +2094,7 @@ function NavSidebar({
2094
2094
  "fixed inset-y-0 left-0 w-[240px] flex-col border-r border-[color:var(--line)] bg-[color:var(--sidebar-bg,var(--nav-surface))] lg:flex",
2095
2095
  open ? "flex z-50" : "hidden z-30"
2096
2096
  ),
2097
+ style: { fontFamily: 'var(--font-family, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif)' },
2097
2098
  onKeyDown: trapTab,
2098
2099
  onClick: (e) => {
2099
2100
  if (open && e.target.closest("a[href]")) onClose?.();
@@ -4079,6 +4080,21 @@ function FrameBody({
4079
4080
  [data?.contactsItem, data?.petitionsItem, navMode, activeOrgId]
4080
4081
  );
4081
4082
  const navItems = core?.nav ?? derivedNavItems;
4083
+ const navIsActive = react.useMemo(() => {
4084
+ const childHrefs = /* @__PURE__ */ new Map();
4085
+ for (const item of navItems) {
4086
+ if (!item.href || !item.children?.length) continue;
4087
+ const hrefs = [];
4088
+ for (const child of item.children) {
4089
+ if (child.href) hrefs.push(child.href);
4090
+ for (const leaf of child.children ?? []) {
4091
+ if (leaf.href) hrefs.push(leaf.href);
4092
+ }
4093
+ }
4094
+ childHrefs.set(item.href, hrefs);
4095
+ }
4096
+ return (pathname2, href) => isNavItemActive(pathname2, href) || (childHrefs.get(href) ?? []).some((h) => isNavItemActive(pathname2, h));
4097
+ }, [navItems]);
4082
4098
  const derivedBreadcrumbs = react.useMemo(
4083
4099
  () => deriveBreadcrumbs(navItems, pathname, { search, origin: meta.origin }),
4084
4100
  [navItems, pathname, search, meta.origin]
@@ -4111,6 +4127,7 @@ function FrameBody({
4111
4127
  // (which strips children) would leave one childless parent row —
4112
4128
  // flat apps ignore the stripping.
4113
4129
  items: navDisplay === "tabs" && meta.navShape !== "flat" ? navItems.map(({ children: _sub, ...item }) => item) : navItems,
4130
+ isActive: navIsActive,
4114
4131
  flatten: meta.navShape === "flat"
4115
4132
  },
4116
4133
  // The app's own workspace is NOT the organization — it is a per-app
@@ -4576,10 +4593,9 @@ var FOOTER_LINKS = [
4576
4593
  }
4577
4594
  ];
4578
4595
  function useChromeFooter(meta) {
4579
- const isSuperAdmin = useIsSuperAdmin();
4580
4596
  return react.useMemo(
4581
- () => isSuperAdmin ? { links: FOOTER_LINKS, ...meta } : { links: FOOTER_LINKS },
4582
- [isSuperAdmin, meta.envLabel, meta.version, meta.commit, meta.commitDate, meta.commitAuthor]
4597
+ () => ({ links: FOOTER_LINKS, ...meta }),
4598
+ [meta.envLabel, meta.version, meta.commit, meta.commitDate, meta.commitAuthor]
4583
4599
  );
4584
4600
  }
4585
4601
  function useChromeIdentity(fallback) {