@the-portland-company/shell 0.3.0 → 0.3.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/dist/index.d.cts CHANGED
@@ -228,7 +228,26 @@ interface ShellFooterValue {
228
228
  commitLog?: string;
229
229
  version?: string;
230
230
  releaseName?: string;
231
+ /**
232
+ * Environment label rendered as a colored chip in the sidebar
233
+ * footer (e.g., 'production' = red, 'staging' = orange,
234
+ * 'local'/'development' = green).
235
+ */
231
236
  environmentLabel?: string;
237
+ /**
238
+ * Optional pre-rendered environment chip element. When supplied,
239
+ * <CommitCopyButton> renders this instead of building a default chip
240
+ * from `environmentLabel`. Use this when the app already has an
241
+ * <EnvironmentBanner> component it wants to drop in unchanged.
242
+ */
243
+ envNode?: ReactNode;
244
+ /**
245
+ * When set, <CommitCopyButton> renders a diagnostics icon next to
246
+ * the version that, when clicked, fires this handler. The shell
247
+ * does not navigate or open anything — apps wire whatever they want
248
+ * (modal, route, console dump).
249
+ */
250
+ onDiagnosticsClick?: () => void;
232
251
  }
233
252
  /** Props for the top-level ShellProvider. */
234
253
  interface ShellProviderProps {
@@ -245,12 +264,16 @@ interface ShellProviderProps {
245
264
  organization?: ShellOrganizationValue;
246
265
  /** If provided, UserMenu shows account switcher + add-account button. */
247
266
  linkedAccounts?: ShellLinkedAccountsValue;
248
- /** If provided, shell renders <SupportRequestButton /> in the header. */
267
+ /** Drives the modal submission flow used by app-supplied support widgets. */
249
268
  support?: ShellSupportValue;
250
269
  /** Optional element rendered in the header (typically <DevNotesMenu /> from @the-portland-company/devnotes). */
251
270
  devNotesMenu?: ReactNode;
252
271
  /** href used by the UserMenu "My Profile" link. Defaults to '/my-profile'. */
253
272
  myProfileHref?: string;
273
+ /** Optional avatar URL override for the header UserMenu. Useful when the
274
+ * app has additional avatar sources (profile.avatar_url, memoji selection
275
+ * in localStorage, branded default URL) that aren't in user_metadata. */
276
+ userAvatarUrl?: string;
254
277
  }
255
278
  /** Return value of useShellAuth(). */
256
279
  interface ShellAuthValue {
@@ -343,9 +366,12 @@ interface ShellChromeValue {
343
366
  href?: string;
344
367
  }>;
345
368
  headerActions?: ReactNode;
369
+ /** Avatar URL override for UserMenu. Apps that store the avatar in their own
370
+ * profile table or localStorage should pass it here. */
371
+ userAvatarUrl?: string;
346
372
  }
347
373
  declare const ShellChromeContext: react.Context<ShellChromeValue | null>;
348
- declare function ShellProvider({ children, supabaseClient, currentApp, appRegistry, basename, organization, linkedAccounts, support, devNotesMenu, myProfileHref, }: ShellProviderProps): react_jsx_runtime.JSX.Element;
374
+ declare function ShellProvider({ children, supabaseClient, currentApp, appRegistry, basename, organization, linkedAccounts, support, devNotesMenu, myProfileHref, userAvatarUrl, }: ShellProviderProps): react_jsx_runtime.JSX.Element;
349
375
 
350
376
  declare function useShellAuth(): ShellAuthValue;
351
377
 
@@ -441,13 +467,16 @@ interface HeaderProps {
441
467
  * 2. headerActions (app-supplied React node, e.g., page action buttons).
442
468
  * 3. headerIconsSlot (app-supplied React node, e.g., FuelPopover,
443
469
  * NewTextBellPopup, SystemAlertsMenu, NavigationToggleMenu,
444
- * ImportProgressIndicator).
445
- * 4. DevNotesMenu (from useShellChrome().devNotesMenu).
446
- * 5. UserMenu (avatar + name/email VStack + chevron).
470
+ * ImportProgressIndicator, DevNotesMenu, SupportRequestAction).
471
+ * 4. UserMenu (avatar + name/email VStack + chevron).
447
472
  *
448
473
  * NOTE: app-specific widgets stay in the app. The shell only renders
449
- * what the app passes through `headerActions` + `headerIconsSlot` +
450
- * `devNotesMenu`.
474
+ * what the app passes through `headerActions` + `headerIconsSlot`. As of
475
+ * v0.3.1, the shell no longer renders a separate `devNotesMenu` slot
476
+ * after `headerIconsSlot` — apps must inline DevNotesMenu inside
477
+ * `headerIconsSlot` so they have full control of icon ordering. The
478
+ * `devNotesMenu` prop on <ShellChrome> is still accepted for backward
479
+ * compat but is ignored.
451
480
  */
452
481
  declare function Header({ onOpen, id }: HeaderProps): react_jsx_runtime.JSX.Element;
453
482
 
@@ -591,6 +620,50 @@ declare function BrandIcon({ name, size, className, style, alt, basePath, }: Bra
591
620
  */
592
621
  declare function SupportRequestButton(): react_jsx_runtime.JSX.Element | null;
593
622
 
623
+ interface CommitCopyButtonProps {
624
+ /**
625
+ * Pre-rendered environment chip (e.g., the app's own `EnvironmentBanner`).
626
+ * Takes precedence over `environmentLabel`. Click anywhere on the chip
627
+ * copies the full commit SHA.
628
+ */
629
+ envNode?: ReactNode;
630
+ /**
631
+ * Environment label (e.g., 'staging', 'production', 'local'). When
632
+ * `envNode` is not supplied, the component renders a default chip
633
+ * keyed off this label with appropriate background/border color.
634
+ */
635
+ environmentLabel?: string;
636
+ /** Full git commit SHA. Last 4 characters are rendered; click copies the full SHA. */
637
+ commit?: string;
638
+ /** App version, e.g., '2.34.1'. Renders as `v{version}`. */
639
+ version?: string;
640
+ /** ISO date string of the commit. Formatted as 'Mon D'. */
641
+ commitDate?: string;
642
+ /** Commit author name (e.g., 'Leland Smith'). First name is shown. */
643
+ commitAuthor?: string;
644
+ /** Full commit message body — shown as a tooltip over the env chip. */
645
+ commitLog?: string;
646
+ /**
647
+ * Optional click handler for the diagnostics icon. When unset, the
648
+ * icon is not rendered.
649
+ */
650
+ onDiagnosticsClick?: () => void;
651
+ }
652
+ /**
653
+ * Footer commit info pill. Ported from
654
+ * `react/app/src/layouts/AuthenticatedLayout.tsx::CommitCopyButton`
655
+ * (lines 3017–3284, 2026-05-13).
656
+ *
657
+ * Visual: two stacked rows.
658
+ * Row 1: [env chip] | {last4 SHA} | v{version} | [diagnostics icon]
659
+ * Row 2: | {Mon D} | {firstName} | (only when date or author present)
660
+ *
661
+ * Clicking the env chip copies the full SHA via `useClipboard`, with a
662
+ * brief "Copied" toast that fades up. Hovering the env chip shows the
663
+ * full commit log in a tooltip.
664
+ */
665
+ declare function CommitCopyButton({ envNode, environmentLabel, commit, version, commitDate, commitAuthor, commitLog, onDiagnosticsClick, }: CommitCopyButtonProps): react_jsx_runtime.JSX.Element;
666
+
594
667
  interface ShellChromeProps {
595
668
  children: ReactNode;
596
669
  /** Drives <OrgPill /> in the sidebar. */
@@ -632,6 +705,9 @@ interface ShellChromeProps {
632
705
  }>;
633
706
  /** Header right-side action buttons (rendered before the icon row). */
634
707
  headerActions?: ReactNode;
708
+ /** Avatar URL override for UserMenu. Pass a value computed from the app's
709
+ * profile.avatar_url / localStorage / default fallback chain. */
710
+ userAvatarUrl?: string;
635
711
  }
636
712
  /**
637
713
  * Drop-in chrome binding for apps where the org/linked-account/support data
@@ -645,7 +721,7 @@ interface ShellChromeProps {
645
721
  * Apps that have all the data available at the ShellProvider construction
646
722
  * site can pass the same props to <ShellProvider> directly instead.
647
723
  */
648
- declare function ShellChrome({ children, organization, linkedAccounts, support, devNotesMenu, myProfileHref, mode, navItems, navigationPreference, role, footer, brandLogoSrc, headerIconsSlot, organizationSettingsHref, showContinueOnboarding, onContinueOnboarding, pageTitle, breadcrumbs, headerActions, }: ShellChromeProps): react_jsx_runtime.JSX.Element;
724
+ declare function ShellChrome({ children, organization, linkedAccounts, support, devNotesMenu, myProfileHref, mode, navItems, navigationPreference, role, footer, brandLogoSrc, headerIconsSlot, organizationSettingsHref, showContinueOnboarding, onContinueOnboarding, pageTitle, breadcrumbs, headerActions, userAvatarUrl, }: ShellChromeProps): react_jsx_runtime.JSX.Element;
649
725
 
650
726
  /** Returns a normalized 7-char hex color, or null if the input isn't valid. */
651
727
  declare function normalizeHexColor(value?: string | null): string | null;
@@ -722,4 +798,4 @@ declare function registerShellPrecache(opts?: RegisterShellPrecacheOptions): Pro
722
798
  */
723
799
  declare function buildSpeculationRules(currentApp: string, registry: AppRegistryEntry[]): string | null;
724
800
 
725
- export { AppLayout, type AppRegistryEntry, BrandIcon, BrandLogo, BreadcrumbBar, Card, Footer, GlobalUiIdProvider, Header, HeaderTabBar, type HeaderTabBarItem, ModePill, NavItem, OrgPill, OrgPill as OrgSelector, PageContainer, PageHeader, type ShellActiveRoleConfig, type ShellAuthStatus, type ShellAuthValue, ShellChrome, ShellChromeContext, type ShellChromeProps, type ShellChromeValue, ShellFooterContext, type ShellFooterLink, type ShellFooterValue, type ShellLinkedAccount, ShellLinkedAccountsContext, type ShellLinkedAccountsValue, type ShellModeConfig, ShellModeContext, type ShellModeValue, type ShellNavItem, ShellNavItemsContext, type ShellNavItemsValue, ShellNavigationPreferenceContext, type ShellNavigationPreferenceValue, ShellOrgContext, type ShellOrganization, type ShellOrganizationValue, ShellProvider, type ShellProviderProps, ShellRoleContext, type ShellRoleValue, type ShellSlots, type ShellSupportContext, ShellSupportProviderContext, type ShellSupportValue, type ShellUser, Sidebar, SupportRequestButton, UserMenu, buildSpeculationRules, getOrganizationBadgeLetters, getOrganizationBrandColor, getUserDisplayName, hexToRgba, lightenHexColor, normalizeHexColor, politogyTheme, registerShellPrecache, useAppRegistry, useCurrentApp, useShellAuth, useShellChrome, useShellFooter, useShellLinkedAccounts, useShellMode, useShellNavItems, useShellNavigationPreference, useShellOrganization, useShellRole, useShellSupport };
801
+ export { AppLayout, type AppRegistryEntry, BrandIcon, BrandLogo, BreadcrumbBar, Card, CommitCopyButton, type CommitCopyButtonProps, Footer, GlobalUiIdProvider, Header, HeaderTabBar, type HeaderTabBarItem, ModePill, NavItem, OrgPill, OrgPill as OrgSelector, PageContainer, PageHeader, type ShellActiveRoleConfig, type ShellAuthStatus, type ShellAuthValue, ShellChrome, ShellChromeContext, type ShellChromeProps, type ShellChromeValue, ShellFooterContext, type ShellFooterLink, type ShellFooterValue, type ShellLinkedAccount, ShellLinkedAccountsContext, type ShellLinkedAccountsValue, type ShellModeConfig, ShellModeContext, type ShellModeValue, type ShellNavItem, ShellNavItemsContext, type ShellNavItemsValue, ShellNavigationPreferenceContext, type ShellNavigationPreferenceValue, ShellOrgContext, type ShellOrganization, type ShellOrganizationValue, ShellProvider, type ShellProviderProps, ShellRoleContext, type ShellRoleValue, type ShellSlots, type ShellSupportContext, ShellSupportProviderContext, type ShellSupportValue, type ShellUser, Sidebar, SupportRequestButton, UserMenu, buildSpeculationRules, getOrganizationBadgeLetters, getOrganizationBrandColor, getUserDisplayName, hexToRgba, lightenHexColor, normalizeHexColor, politogyTheme, registerShellPrecache, useAppRegistry, useCurrentApp, useShellAuth, useShellChrome, useShellFooter, useShellLinkedAccounts, useShellMode, useShellNavItems, useShellNavigationPreference, useShellOrganization, useShellRole, useShellSupport };
package/dist/index.d.ts CHANGED
@@ -228,7 +228,26 @@ interface ShellFooterValue {
228
228
  commitLog?: string;
229
229
  version?: string;
230
230
  releaseName?: string;
231
+ /**
232
+ * Environment label rendered as a colored chip in the sidebar
233
+ * footer (e.g., 'production' = red, 'staging' = orange,
234
+ * 'local'/'development' = green).
235
+ */
231
236
  environmentLabel?: string;
237
+ /**
238
+ * Optional pre-rendered environment chip element. When supplied,
239
+ * <CommitCopyButton> renders this instead of building a default chip
240
+ * from `environmentLabel`. Use this when the app already has an
241
+ * <EnvironmentBanner> component it wants to drop in unchanged.
242
+ */
243
+ envNode?: ReactNode;
244
+ /**
245
+ * When set, <CommitCopyButton> renders a diagnostics icon next to
246
+ * the version that, when clicked, fires this handler. The shell
247
+ * does not navigate or open anything — apps wire whatever they want
248
+ * (modal, route, console dump).
249
+ */
250
+ onDiagnosticsClick?: () => void;
232
251
  }
233
252
  /** Props for the top-level ShellProvider. */
234
253
  interface ShellProviderProps {
@@ -245,12 +264,16 @@ interface ShellProviderProps {
245
264
  organization?: ShellOrganizationValue;
246
265
  /** If provided, UserMenu shows account switcher + add-account button. */
247
266
  linkedAccounts?: ShellLinkedAccountsValue;
248
- /** If provided, shell renders <SupportRequestButton /> in the header. */
267
+ /** Drives the modal submission flow used by app-supplied support widgets. */
249
268
  support?: ShellSupportValue;
250
269
  /** Optional element rendered in the header (typically <DevNotesMenu /> from @the-portland-company/devnotes). */
251
270
  devNotesMenu?: ReactNode;
252
271
  /** href used by the UserMenu "My Profile" link. Defaults to '/my-profile'. */
253
272
  myProfileHref?: string;
273
+ /** Optional avatar URL override for the header UserMenu. Useful when the
274
+ * app has additional avatar sources (profile.avatar_url, memoji selection
275
+ * in localStorage, branded default URL) that aren't in user_metadata. */
276
+ userAvatarUrl?: string;
254
277
  }
255
278
  /** Return value of useShellAuth(). */
256
279
  interface ShellAuthValue {
@@ -343,9 +366,12 @@ interface ShellChromeValue {
343
366
  href?: string;
344
367
  }>;
345
368
  headerActions?: ReactNode;
369
+ /** Avatar URL override for UserMenu. Apps that store the avatar in their own
370
+ * profile table or localStorage should pass it here. */
371
+ userAvatarUrl?: string;
346
372
  }
347
373
  declare const ShellChromeContext: react.Context<ShellChromeValue | null>;
348
- declare function ShellProvider({ children, supabaseClient, currentApp, appRegistry, basename, organization, linkedAccounts, support, devNotesMenu, myProfileHref, }: ShellProviderProps): react_jsx_runtime.JSX.Element;
374
+ declare function ShellProvider({ children, supabaseClient, currentApp, appRegistry, basename, organization, linkedAccounts, support, devNotesMenu, myProfileHref, userAvatarUrl, }: ShellProviderProps): react_jsx_runtime.JSX.Element;
349
375
 
350
376
  declare function useShellAuth(): ShellAuthValue;
351
377
 
@@ -441,13 +467,16 @@ interface HeaderProps {
441
467
  * 2. headerActions (app-supplied React node, e.g., page action buttons).
442
468
  * 3. headerIconsSlot (app-supplied React node, e.g., FuelPopover,
443
469
  * NewTextBellPopup, SystemAlertsMenu, NavigationToggleMenu,
444
- * ImportProgressIndicator).
445
- * 4. DevNotesMenu (from useShellChrome().devNotesMenu).
446
- * 5. UserMenu (avatar + name/email VStack + chevron).
470
+ * ImportProgressIndicator, DevNotesMenu, SupportRequestAction).
471
+ * 4. UserMenu (avatar + name/email VStack + chevron).
447
472
  *
448
473
  * NOTE: app-specific widgets stay in the app. The shell only renders
449
- * what the app passes through `headerActions` + `headerIconsSlot` +
450
- * `devNotesMenu`.
474
+ * what the app passes through `headerActions` + `headerIconsSlot`. As of
475
+ * v0.3.1, the shell no longer renders a separate `devNotesMenu` slot
476
+ * after `headerIconsSlot` — apps must inline DevNotesMenu inside
477
+ * `headerIconsSlot` so they have full control of icon ordering. The
478
+ * `devNotesMenu` prop on <ShellChrome> is still accepted for backward
479
+ * compat but is ignored.
451
480
  */
452
481
  declare function Header({ onOpen, id }: HeaderProps): react_jsx_runtime.JSX.Element;
453
482
 
@@ -591,6 +620,50 @@ declare function BrandIcon({ name, size, className, style, alt, basePath, }: Bra
591
620
  */
592
621
  declare function SupportRequestButton(): react_jsx_runtime.JSX.Element | null;
593
622
 
623
+ interface CommitCopyButtonProps {
624
+ /**
625
+ * Pre-rendered environment chip (e.g., the app's own `EnvironmentBanner`).
626
+ * Takes precedence over `environmentLabel`. Click anywhere on the chip
627
+ * copies the full commit SHA.
628
+ */
629
+ envNode?: ReactNode;
630
+ /**
631
+ * Environment label (e.g., 'staging', 'production', 'local'). When
632
+ * `envNode` is not supplied, the component renders a default chip
633
+ * keyed off this label with appropriate background/border color.
634
+ */
635
+ environmentLabel?: string;
636
+ /** Full git commit SHA. Last 4 characters are rendered; click copies the full SHA. */
637
+ commit?: string;
638
+ /** App version, e.g., '2.34.1'. Renders as `v{version}`. */
639
+ version?: string;
640
+ /** ISO date string of the commit. Formatted as 'Mon D'. */
641
+ commitDate?: string;
642
+ /** Commit author name (e.g., 'Leland Smith'). First name is shown. */
643
+ commitAuthor?: string;
644
+ /** Full commit message body — shown as a tooltip over the env chip. */
645
+ commitLog?: string;
646
+ /**
647
+ * Optional click handler for the diagnostics icon. When unset, the
648
+ * icon is not rendered.
649
+ */
650
+ onDiagnosticsClick?: () => void;
651
+ }
652
+ /**
653
+ * Footer commit info pill. Ported from
654
+ * `react/app/src/layouts/AuthenticatedLayout.tsx::CommitCopyButton`
655
+ * (lines 3017–3284, 2026-05-13).
656
+ *
657
+ * Visual: two stacked rows.
658
+ * Row 1: [env chip] | {last4 SHA} | v{version} | [diagnostics icon]
659
+ * Row 2: | {Mon D} | {firstName} | (only when date or author present)
660
+ *
661
+ * Clicking the env chip copies the full SHA via `useClipboard`, with a
662
+ * brief "Copied" toast that fades up. Hovering the env chip shows the
663
+ * full commit log in a tooltip.
664
+ */
665
+ declare function CommitCopyButton({ envNode, environmentLabel, commit, version, commitDate, commitAuthor, commitLog, onDiagnosticsClick, }: CommitCopyButtonProps): react_jsx_runtime.JSX.Element;
666
+
594
667
  interface ShellChromeProps {
595
668
  children: ReactNode;
596
669
  /** Drives <OrgPill /> in the sidebar. */
@@ -632,6 +705,9 @@ interface ShellChromeProps {
632
705
  }>;
633
706
  /** Header right-side action buttons (rendered before the icon row). */
634
707
  headerActions?: ReactNode;
708
+ /** Avatar URL override for UserMenu. Pass a value computed from the app's
709
+ * profile.avatar_url / localStorage / default fallback chain. */
710
+ userAvatarUrl?: string;
635
711
  }
636
712
  /**
637
713
  * Drop-in chrome binding for apps where the org/linked-account/support data
@@ -645,7 +721,7 @@ interface ShellChromeProps {
645
721
  * Apps that have all the data available at the ShellProvider construction
646
722
  * site can pass the same props to <ShellProvider> directly instead.
647
723
  */
648
- declare function ShellChrome({ children, organization, linkedAccounts, support, devNotesMenu, myProfileHref, mode, navItems, navigationPreference, role, footer, brandLogoSrc, headerIconsSlot, organizationSettingsHref, showContinueOnboarding, onContinueOnboarding, pageTitle, breadcrumbs, headerActions, }: ShellChromeProps): react_jsx_runtime.JSX.Element;
724
+ declare function ShellChrome({ children, organization, linkedAccounts, support, devNotesMenu, myProfileHref, mode, navItems, navigationPreference, role, footer, brandLogoSrc, headerIconsSlot, organizationSettingsHref, showContinueOnboarding, onContinueOnboarding, pageTitle, breadcrumbs, headerActions, userAvatarUrl, }: ShellChromeProps): react_jsx_runtime.JSX.Element;
649
725
 
650
726
  /** Returns a normalized 7-char hex color, or null if the input isn't valid. */
651
727
  declare function normalizeHexColor(value?: string | null): string | null;
@@ -722,4 +798,4 @@ declare function registerShellPrecache(opts?: RegisterShellPrecacheOptions): Pro
722
798
  */
723
799
  declare function buildSpeculationRules(currentApp: string, registry: AppRegistryEntry[]): string | null;
724
800
 
725
- export { AppLayout, type AppRegistryEntry, BrandIcon, BrandLogo, BreadcrumbBar, Card, Footer, GlobalUiIdProvider, Header, HeaderTabBar, type HeaderTabBarItem, ModePill, NavItem, OrgPill, OrgPill as OrgSelector, PageContainer, PageHeader, type ShellActiveRoleConfig, type ShellAuthStatus, type ShellAuthValue, ShellChrome, ShellChromeContext, type ShellChromeProps, type ShellChromeValue, ShellFooterContext, type ShellFooterLink, type ShellFooterValue, type ShellLinkedAccount, ShellLinkedAccountsContext, type ShellLinkedAccountsValue, type ShellModeConfig, ShellModeContext, type ShellModeValue, type ShellNavItem, ShellNavItemsContext, type ShellNavItemsValue, ShellNavigationPreferenceContext, type ShellNavigationPreferenceValue, ShellOrgContext, type ShellOrganization, type ShellOrganizationValue, ShellProvider, type ShellProviderProps, ShellRoleContext, type ShellRoleValue, type ShellSlots, type ShellSupportContext, ShellSupportProviderContext, type ShellSupportValue, type ShellUser, Sidebar, SupportRequestButton, UserMenu, buildSpeculationRules, getOrganizationBadgeLetters, getOrganizationBrandColor, getUserDisplayName, hexToRgba, lightenHexColor, normalizeHexColor, politogyTheme, registerShellPrecache, useAppRegistry, useCurrentApp, useShellAuth, useShellChrome, useShellFooter, useShellLinkedAccounts, useShellMode, useShellNavItems, useShellNavigationPreference, useShellOrganization, useShellRole, useShellSupport };
801
+ export { AppLayout, type AppRegistryEntry, BrandIcon, BrandLogo, BreadcrumbBar, Card, CommitCopyButton, type CommitCopyButtonProps, Footer, GlobalUiIdProvider, Header, HeaderTabBar, type HeaderTabBarItem, ModePill, NavItem, OrgPill, OrgPill as OrgSelector, PageContainer, PageHeader, type ShellActiveRoleConfig, type ShellAuthStatus, type ShellAuthValue, ShellChrome, ShellChromeContext, type ShellChromeProps, type ShellChromeValue, ShellFooterContext, type ShellFooterLink, type ShellFooterValue, type ShellLinkedAccount, ShellLinkedAccountsContext, type ShellLinkedAccountsValue, type ShellModeConfig, ShellModeContext, type ShellModeValue, type ShellNavItem, ShellNavItemsContext, type ShellNavItemsValue, ShellNavigationPreferenceContext, type ShellNavigationPreferenceValue, ShellOrgContext, type ShellOrganization, type ShellOrganizationValue, ShellProvider, type ShellProviderProps, ShellRoleContext, type ShellRoleValue, type ShellSlots, type ShellSupportContext, ShellSupportProviderContext, type ShellSupportValue, type ShellUser, Sidebar, SupportRequestButton, UserMenu, buildSpeculationRules, getOrganizationBadgeLetters, getOrganizationBrandColor, getUserDisplayName, hexToRgba, lightenHexColor, normalizeHexColor, politogyTheme, registerShellPrecache, useAppRegistry, useCurrentApp, useShellAuth, useShellChrome, useShellFooter, useShellLinkedAccounts, useShellMode, useShellNavItems, useShellNavigationPreference, useShellOrganization, useShellRole, useShellSupport };