@planningcenter/topbar 12.2.5 → 12.2.6

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.
@@ -1,7 +1,7 @@
1
1
  import { Link } from '@planningcenter/tapestry';
2
2
  import * as React from 'react';
3
3
  import React__default, { useState, useEffect, useMemo, useLayoutEffect, useContext, createContext, useCallback, useRef } from 'react';
4
- import pcoUrl$1 from '@planningcenter/url';
4
+ import pcoUrl$1, { pcoApiUrl } from '@planningcenter/url';
5
5
  import * as general from '@planningcenter/icons/paths/general';
6
6
  import Jolt from '@planningcenter/jolt-client';
7
7
  import { useSyncExternalStore } from 'use-sync-external-store/shim';
@@ -17,7 +17,7 @@ import { useSearchBox, useHits, InstantSearch, Configure } from 'react-instantse
17
17
  import { TransitionGroup, Transition } from 'react-transition-group';
18
18
  import datetimeFmt from '@planningcenter/datetime-fmt';
19
19
 
20
- var styles$d = {"accessibility-toolbar":"accessibility-toolbar-jgjUG"};
20
+ var styles$e = {"accessibility-toolbar":"accessibility-toolbar-jgjUG"};
21
21
 
22
22
  const AccessibilityToolbar = ({
23
23
  children
@@ -29,7 +29,7 @@ const AccessibilityToolbar = ({
29
29
  (_a = document.getElementById("main-content")) === null || _a === void 0 ? void 0 : _a.focus();
30
30
  };
31
31
  return /*#__PURE__*/React__default.createElement("div", {
32
- className: styles$d["accessibility-toolbar"]
32
+ className: styles$e["accessibility-toolbar"]
33
33
  }, /*#__PURE__*/React__default.createElement(Link, {
34
34
  href: "#main-content",
35
35
  kind: "primary",
@@ -346,11 +346,11 @@ const X = ({
346
346
  fill: fill
347
347
  })));
348
348
 
349
- var styles$c = {"announcement":"announcement-pI5tM","announcement--platform":"announcement--platform-EcUn2","announcement--promo":"announcement--promo-FarUk","announcement-icon":"announcement-icon-Ov39-","announcement-content":"announcement-content-q2ad6","dismiss":"dismiss-wUAoU","dismiss--promo":"dismiss--promo-7zvO4"};
349
+ var styles$d = {"announcement":"announcement-pI5tM","announcement--platform":"announcement--platform-EcUn2","announcement--promo":"announcement--promo-FarUk","announcement-icon":"announcement-icon-Ov39-","announcement-content":"announcement-content-q2ad6","dismiss":"dismiss-wUAoU","dismiss--promo":"dismiss--promo-7zvO4"};
350
350
 
351
351
  function AnnouncementIcon() {
352
352
  return /*#__PURE__*/React__default.createElement("svg", {
353
- className: styles$c["announcement-icon"],
353
+ className: styles$d["announcement-icon"],
354
354
  width: "16",
355
355
  height: "16",
356
356
  viewBox: "0 0 16 16",
@@ -475,7 +475,7 @@ let StyledAnnouncement$1 = class StyledAnnouncement extends React__default.Compo
475
475
  } = this.props;
476
476
  const isPromo = variant === "promo";
477
477
  return /*#__PURE__*/React__default.createElement("div", {
478
- className: classnames(styles$c["announcement"], styles$c[`announcement--${variant !== null && variant !== void 0 ? variant : "platform"}`]),
478
+ className: classnames(styles$d["announcement"], styles$d[`announcement--${variant !== null && variant !== void 0 ? variant : "platform"}`]),
479
479
  "data-announcement-variant": variant !== null && variant !== void 0 ? variant : "platform",
480
480
  style: isPromo ? {
481
481
  backgroundImage: promoBackgroundUrl,
@@ -484,7 +484,7 @@ let StyledAnnouncement$1 = class StyledAnnouncement extends React__default.Compo
484
484
  backgroundSize: "cover"
485
485
  } : undefined
486
486
  }, !isPromo && /*#__PURE__*/React__default.createElement(AnnouncementIcon, null), /*#__PURE__*/React__default.createElement("div", {
487
- className: styles$c["announcement-content"],
487
+ className: styles$d["announcement-content"],
488
488
  style: style,
489
489
  ...platformProps
490
490
  }));
@@ -533,7 +533,7 @@ function StyledDismissButton$1({
533
533
  const isPromo = variant === "promo";
534
534
  return /*#__PURE__*/React__default.createElement("button", {
535
535
  type: "button",
536
- className: classnames(styles$c.dismiss, isPromo && styles$c["dismiss--promo"]),
536
+ className: classnames(styles$d.dismiss, isPromo && styles$d["dismiss--promo"]),
537
537
  ...props
538
538
  }, /*#__PURE__*/React__default.createElement(X, {
539
539
  fill: isPromo ? "currentColor" : "white",
@@ -613,9 +613,9 @@ class StyledAnnouncement extends React__default.Component {
613
613
  ...platformProps
614
614
  } = this.props;
615
615
  return /*#__PURE__*/React__default.createElement("div", {
616
- className: styles$c["announcement"]
616
+ className: styles$d["announcement"]
617
617
  }, /*#__PURE__*/React__default.createElement(AnnouncementIcon, null), /*#__PURE__*/React__default.createElement("div", {
618
- className: styles$c["announcement-content"],
618
+ className: styles$d["announcement-content"],
619
619
  style: style,
620
620
  ...platformProps
621
621
  }));
@@ -626,7 +626,7 @@ function StyledDismissButton({
626
626
  }) {
627
627
  return /*#__PURE__*/React__default.createElement("button", {
628
628
  type: "button",
629
- className: styles$c.dismiss,
629
+ className: styles$d.dismiss,
630
630
  ...props
631
631
  }, /*#__PURE__*/React__default.createElement(X, {
632
632
  fill: "white",
@@ -1873,7 +1873,7 @@ function MonoAppName({
1873
1873
  })) : (/*#__PURE__*/React__default.createElement("div", null, "appName not supported"));
1874
1874
  }
1875
1875
 
1876
- var styles$b = {"unbutton":"unbutton-lEbTR"};
1876
+ var styles$c = {"unbutton":"unbutton-lEbTR"};
1877
1877
 
1878
1878
  function Unbutton({
1879
1879
  className,
@@ -1882,7 +1882,7 @@ function Unbutton({
1882
1882
  ...nativeProps
1883
1883
  }) {
1884
1884
  return /*#__PURE__*/React__default.createElement("button", {
1885
- className: classnames(styles$b.unbutton, className),
1885
+ className: classnames(styles$c.unbutton, className),
1886
1886
  style: {
1887
1887
  ...style
1888
1888
  },
@@ -1891,7 +1891,7 @@ function Unbutton({
1891
1891
  });
1892
1892
  }
1893
1893
 
1894
- var styles$a = {"button":"button-XMbeQ","button-accounts":"button-accounts-nNh-z","chevron":"chevron-RRg9k","is-expanded":"is-expanded-zD0A0"};
1894
+ var styles$b = {"button":"button-XMbeQ","button-accounts":"button-accounts-nNh-z","chevron":"chevron-RRg9k","is-expanded":"is-expanded-zD0A0"};
1895
1895
 
1896
1896
  const AppsButton = ({
1897
1897
  appName,
@@ -1906,8 +1906,8 @@ const AppsButton = ({
1906
1906
  "aria-haspopup": "true",
1907
1907
  "aria-label": `App switcher: ${appName}`,
1908
1908
  onClick: onClick,
1909
- className: classnames(styles$a.button, {
1910
- [styles$a["is-expanded"]]: expanded
1909
+ className: classnames(styles$b.button, {
1910
+ [styles$b["is-expanded"]]: expanded
1911
1911
  }),
1912
1912
  type: "button",
1913
1913
  style: style,
@@ -1916,7 +1916,7 @@ const AppsButton = ({
1916
1916
  appName: "Accounts",
1917
1917
  colors: colors
1918
1918
  }), /*#__PURE__*/React__default.createElement("div", {
1919
- className: styles$a["button-accounts"]
1919
+ className: styles$b["button-accounts"]
1920
1920
  }, "Account settings"))) : (/*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(ColorAppIcon, {
1921
1921
  appName: appName.replace(/[\s-]/, "")
1922
1922
  }), /*#__PURE__*/React__default.createElement(MonoAppName, {
@@ -1924,7 +1924,7 @@ const AppsButton = ({
1924
1924
  key: "mono-app-name",
1925
1925
  size: 24
1926
1926
  }))), /*#__PURE__*/React__default.createElement(DisclosureChevronIcon, {
1927
- className: styles$a.chevron,
1927
+ className: styles$b.chevron,
1928
1928
  key: "disclosure-chevron-icon"
1929
1929
  }));
1930
1930
  };
@@ -2012,7 +2012,7 @@ const IEFlex1 = {
2012
2012
  flex: "1 1 auto"
2013
2013
  };
2014
2014
 
2015
- var styles$9 = {"popup":"popup-sJ-Nv"};
2015
+ var styles$a = {"popup":"popup-sJ-Nv"};
2016
2016
 
2017
2017
  const HoverableListItem = ({
2018
2018
  active = false,
@@ -2069,7 +2069,7 @@ class Outsider extends React__default.Component {
2069
2069
  }
2070
2070
  }
2071
2071
 
2072
- var styles$8 = {"popup-root":"popup-root-SeL5u","popup":"popup-nQXYW","is-visible":"is-visible-3DAUP"};
2072
+ var styles$9 = {"popup-root":"popup-root-SeL5u","popup":"popup-nQXYW","is-visible":"is-visible-3DAUP"};
2073
2073
 
2074
2074
  const Popup = ({
2075
2075
  className,
@@ -2077,8 +2077,8 @@ const Popup = ({
2077
2077
  isVisible,
2078
2078
  ...nativeProps
2079
2079
  }) => (/*#__PURE__*/React__default.createElement(C, {
2080
- className: classnames(styles$8.popup, {
2081
- [styles$8["is-visible"]]: isVisible
2080
+ className: classnames(styles$9.popup, {
2081
+ [styles$9["is-visible"]]: isVisible
2082
2082
  }, className),
2083
2083
  ...nativeProps
2084
2084
  }));
@@ -2086,7 +2086,7 @@ const Popup = ({
2086
2086
  const PopupRoot = ({
2087
2087
  ...nativeProps
2088
2088
  }) => (/*#__PURE__*/React__default.createElement("div", {
2089
- className: styles$8["popup-root"],
2089
+ className: styles$9["popup-root"],
2090
2090
  ...nativeProps
2091
2091
  }));
2092
2092
 
@@ -2126,7 +2126,7 @@ const AppsMenu = ({
2126
2126
  cleanup: !visible,
2127
2127
  component: Outsider,
2128
2128
  onOutsideClick: toggle,
2129
- className: styles$9.popup,
2129
+ className: styles$a.popup,
2130
2130
  isVisible: visible
2131
2131
  }, /*#__PURE__*/React__default.createElement("menu", {
2132
2132
  ref: menuRef,
@@ -3022,9 +3022,9 @@ function StyledRoot({
3022
3022
  `), children);
3023
3023
  }
3024
3024
 
3025
- var styles$7 = {"route":"route--8BWe","is-active":"is-active-FsU9Y","apps-routes-separator":"apps-routes-separator-Nlm-N"};
3025
+ var styles$8 = {"route":"route--8BWe","is-active":"is-active-FsU9Y","apps-routes-separator":"apps-routes-separator-Nlm-N"};
3026
3026
 
3027
- var styles$6 = {"popup":"popup-mDNKn","trigger-wrap":"trigger-wrap-Jd-KR","trigger":"trigger-WgRT5","is-visible":"is-visible-GZC0-","trigger-orgname":"trigger-orgname-TDHCc"};
3027
+ var styles$7 = {"popup":"popup-mDNKn","trigger-wrap":"trigger-wrap-Jd-KR","trigger":"trigger-WgRT5","is-visible":"is-visible-GZC0-","trigger-orgname":"trigger-orgname-TDHCc"};
3028
3028
 
3029
3029
  const UserMenu = ({
3030
3030
  appName,
@@ -3043,7 +3043,7 @@ const UserMenu = ({
3043
3043
  component: Outsider,
3044
3044
  onOutsideClick: () => setUserMenuVisible(false),
3045
3045
  cleanup: !userMenuVisible,
3046
- className: styles$6.popup,
3046
+ className: styles$7.popup,
3047
3047
  isVisible: userMenuVisible
3048
3048
  }, /*#__PURE__*/React__default.createElement("div", null, hasConnectedPeople ? (/*#__PURE__*/React__default.createElement("div", {
3049
3049
  style: {
@@ -3187,11 +3187,11 @@ const UserMenuTrigger = ({
3187
3187
  userMenuVisible
3188
3188
  }) => {
3189
3189
  return /*#__PURE__*/React__default.createElement("div", {
3190
- className: styles$6["trigger-wrap"],
3190
+ className: styles$7["trigger-wrap"],
3191
3191
  "data-pendo": "topbar-org-switcher"
3192
3192
  }, /*#__PURE__*/React__default.createElement(Hoverable, {
3193
- className: classnames(styles$6["trigger"], {
3194
- [styles$6["is-visible"]]: userMenuVisible
3193
+ className: classnames(styles$7["trigger"], {
3194
+ [styles$7["is-visible"]]: userMenuVisible
3195
3195
  }),
3196
3196
  component: "button",
3197
3197
  type: "button",
@@ -3203,7 +3203,7 @@ const UserMenuTrigger = ({
3203
3203
  requestConnectedPeopleFetch();
3204
3204
  }
3205
3205
  }, showOrgName && (/*#__PURE__*/React__default.createElement("span", {
3206
- className: styles$6["trigger-orgname"]
3206
+ className: styles$7["trigger-orgname"]
3207
3207
  }, orgName)), /*#__PURE__*/React__default.createElement(DisclosureChevronIcon, null)));
3208
3208
  };
3209
3209
 
@@ -3260,7 +3260,7 @@ const NotSmallTopbar = ({
3260
3260
  },
3261
3261
  appName: props.appName
3262
3262
  }), /*#__PURE__*/React__default.createElement("div", {
3263
- className: styles$7["apps-routes-separator"]
3263
+ className: styles$8["apps-routes-separator"]
3264
3264
  }), routesVisible && props.routes, /*#__PURE__*/React__default.createElement("div", {
3265
3265
  style: {
3266
3266
  margin: "auto"
@@ -3298,12 +3298,12 @@ const NotSmallRoute = ({
3298
3298
  ...nativeProps
3299
3299
  }) => {
3300
3300
  return /*#__PURE__*/React__default.createElement("a", {
3301
- className: classnames(styles$7["route"], className, active && styles$7["is-active"]),
3301
+ className: classnames(styles$8["route"], className, active && styles$8["is-active"]),
3302
3302
  ...nativeProps
3303
3303
  });
3304
3304
  };
3305
3305
 
3306
- var styles$5 = {"avatar":"avatar-tW-wn"};
3306
+ var styles$6 = {"avatar":"avatar-tW-wn"};
3307
3307
 
3308
3308
  function Avatar({
3309
3309
  env,
@@ -3313,7 +3313,7 @@ function Avatar({
3313
3313
  }) {
3314
3314
  const url = incomingUrl || `${pcoUrl$1(env)("people")}/static/no_photo_thumbnail_gray.svg`;
3315
3315
  return /*#__PURE__*/React__default.createElement("div", {
3316
- className: styles$5.avatar,
3316
+ className: styles$6.avatar,
3317
3317
  style: {
3318
3318
  backgroundImage: `url(${url})`,
3319
3319
  ...style
@@ -3335,14 +3335,14 @@ ClientStorage.defaultProps = {
3335
3335
  method: "localStorage"
3336
3336
  };
3337
3337
 
3338
- var styles$4 = {"appmenu-button":"appmenu-button-b0UvT","appmenu-layer":"appmenu-layer-0IQpN","appmenu-container":"appmenu-container-gackd","appmenu-scroll":"appmenu-scroll-mPSx0","appmenu-list":"appmenu-list-h7clX","appmenu-list-a":"appmenu-list-a-rGIQN","appmenu-list-a--top":"appmenu-list-a--top-RT-2F","appmenu-list-a--bottom":"appmenu-list-a--bottom-YDeBC","appmenu-close-button":"appmenu-close-button-vv9bV","current-route":"current-route-wpJgz","is-active":"is-active-wy8Bg","routes":"routes-Nmt1S","route":"route-kkknQ","profile-button":"profile-button-a2WO2"};
3338
+ var styles$5 = {"appmenu-button":"appmenu-button-b0UvT","appmenu-layer":"appmenu-layer-0IQpN","appmenu-container":"appmenu-container-gackd","appmenu-scroll":"appmenu-scroll-mPSx0","appmenu-list":"appmenu-list-h7clX","appmenu-list-a":"appmenu-list-a-rGIQN","appmenu-list-a--top":"appmenu-list-a--top-RT-2F","appmenu-list-a--bottom":"appmenu-list-a--bottom-YDeBC","appmenu-close-button":"appmenu-close-button-vv9bV","current-route":"current-route-wpJgz","is-active":"is-active-wy8Bg","routes":"routes-Nmt1S","route":"route-kkknQ","profile-button":"profile-button-a2WO2"};
3339
3339
 
3340
3340
  function AccountSettingsLink({
3341
3341
  env
3342
3342
  }) {
3343
3343
  const accountsName = "accounts";
3344
3344
  return /*#__PURE__*/React__default.createElement("a", {
3345
- className: classnames(styles$4["appmenu-list-a"], styles$4["appmenu-list-a--bottom"]),
3345
+ className: classnames(styles$5["appmenu-list-a"], styles$5["appmenu-list-a--bottom"]),
3346
3346
  "data-pendo": `app-switcher--change-app--${accountsName}`,
3347
3347
  "data-turbolinks": false,
3348
3348
  href: pcoUrl$1(env)(accountsName) + getAppsSwitchProductPath(accountsName)
@@ -3365,7 +3365,7 @@ const CloseMenuButton = ({
3365
3365
  }) => (/*#__PURE__*/React__default.createElement("button", {
3366
3366
  "aria-label": "Close menu",
3367
3367
  type: "button",
3368
- className: styles$4["appmenu-close-button"],
3368
+ className: styles$5["appmenu-close-button"],
3369
3369
  style: style
3370
3370
  }, /*#__PURE__*/React__default.createElement(X, {
3371
3371
  fill: color,
@@ -3446,7 +3446,7 @@ const SmallTopbar = ({
3446
3446
  "aria-haspopup": "true",
3447
3447
  "aria-label": `App switcher: ${props.appName}`,
3448
3448
  type: "button",
3449
- className: styles$4["appmenu-button"],
3449
+ className: styles$5["appmenu-button"],
3450
3450
  onClick: () => {
3451
3451
  props.requestAppsFetch();
3452
3452
  props.requestConnectedPeopleFetch();
@@ -3456,12 +3456,12 @@ const SmallTopbar = ({
3456
3456
  }, /*#__PURE__*/React__default.createElement(ColorAppIcon, {
3457
3457
  appName: props.appName.replace(/[\s-]/, "")
3458
3458
  })), routesMenuVisible && (/*#__PURE__*/React__default.createElement("div", {
3459
- className: styles$4["routes"]
3459
+ className: styles$5["routes"]
3460
3460
  }, props.routes)), /*#__PURE__*/React__default.createElement(ClientStorage, {
3461
3461
  item: "Topbar:Small:Menus:Products:visibility",
3462
3462
  render: () => (/*#__PURE__*/React__default.createElement("div", {
3463
3463
  ref: appMenuRef,
3464
- className: styles$4["appmenu-layer"],
3464
+ className: styles$5["appmenu-layer"],
3465
3465
  style: {
3466
3466
  ...(productSwitcherVisible && {
3467
3467
  display: "block"
@@ -3480,44 +3480,44 @@ const SmallTopbar = ({
3480
3480
  e.stopPropagation();
3481
3481
  }
3482
3482
  },
3483
- className: styles$4["appmenu-container"]
3483
+ className: styles$5["appmenu-container"]
3484
3484
  }, /*#__PURE__*/React__default.createElement("a", {
3485
3485
  "aria-current": props.appName === (homeProduct === null || homeProduct === void 0 ? void 0 : homeProduct.name) ? "page" : undefined,
3486
3486
  "aria-label": homeProduct ? homeProduct.name : props.appName,
3487
3487
  "data-pendo": `app-switcher--change-app--${homeProduct === null || homeProduct === void 0 ? void 0 : homeProduct.name}`,
3488
3488
  "data-turbolinks": false,
3489
- className: classnames(styles$4["appmenu-list-a"], styles$4["appmenu-list-a--top"]),
3489
+ className: classnames(styles$5["appmenu-list-a"], styles$5["appmenu-list-a--top"]),
3490
3490
  href: homeProduct ? pcoUrl$1(props.env)("accounts") + getAppsSwitchProductPath(homeProduct === null || homeProduct === void 0 ? void 0 : homeProduct.name) : undefined
3491
3491
  }, /*#__PURE__*/React__default.createElement(UserMenuAppLockup, {
3492
3492
  appName: homeProduct ? homeProduct.name : props.appName
3493
3493
  })), /*#__PURE__*/React__default.createElement("div", {
3494
- className: styles$4["appmenu-scroll"]
3494
+ className: styles$5["appmenu-scroll"]
3495
3495
  }, /*#__PURE__*/React__default.createElement("ul", {
3496
3496
  "data-pendo": "app-switcher",
3497
- className: styles$4["appmenu-list"]
3497
+ className: styles$5["appmenu-list"]
3498
3498
  }, appsMenuFormatter(restProducts).map(({
3499
3499
  name
3500
3500
  }) => (/*#__PURE__*/React__default.createElement("li", {
3501
3501
  key: name,
3502
- className: styles$4["appmenu-list-li"]
3502
+ className: styles$5["appmenu-list-li"]
3503
3503
  }, /*#__PURE__*/React__default.createElement("a", {
3504
3504
  "aria-current": name === props.appName ? "page" : undefined,
3505
3505
  "aria-label": name,
3506
3506
  "data-pendo": `app-switcher--change-app--${name}`,
3507
3507
  "data-turbolinks": false,
3508
- className: styles$4["appmenu-list-a"],
3508
+ className: styles$5["appmenu-list-a"],
3509
3509
  href: pcoUrl$1(props.env)("accounts") + getAppsSwitchProductPath(name)
3510
3510
  }, /*#__PURE__*/React__default.createElement(UserMenuAppLockup, {
3511
3511
  appName: name
3512
3512
  }))))), accountsProduct && (/*#__PURE__*/React__default.createElement("li", {
3513
- className: styles$4["appmenu-list-li"]
3513
+ className: styles$5["appmenu-list-li"]
3514
3514
  }, /*#__PURE__*/React__default.createElement(AccountSettingsLink, {
3515
3515
  env: props.env
3516
3516
  }))))))))
3517
3517
  }), /*#__PURE__*/React__default.createElement("button", {
3518
3518
  type: "button",
3519
- className: classnames(styles$4["current-route"], {
3520
- [styles$4["is-active"]]: routesMenuVisible
3519
+ className: classnames(styles$5["current-route"], {
3520
+ [styles$5["is-active"]]: routesMenuVisible
3521
3521
  }),
3522
3522
  onClick: props.routes.length > 0 ? () => {
3523
3523
  setProductSwitcherVisible(false);
@@ -3525,7 +3525,7 @@ const SmallTopbar = ({
3525
3525
  } : null
3526
3526
  }, /*#__PURE__*/React__default.createElement(CurrentRouteComponent, null, capitalize(currentRouteText)), props.routes.length > 0 && /*#__PURE__*/React__default.createElement(DisclosureChevronIcon, null)), /*#__PURE__*/React__default.createElement("button", {
3527
3527
  type: "button",
3528
- className: styles$4["profile-button"],
3528
+ className: styles$5["profile-button"],
3529
3529
  onClick: () => {
3530
3530
  var _a, _b;
3531
3531
  props.requestConnectedPeopleFetch();
@@ -3541,7 +3541,7 @@ const SmallRoute = ({
3541
3541
  className,
3542
3542
  ...props
3543
3543
  }) => (/*#__PURE__*/React__default.createElement("a", {
3544
- className: classnames(styles$4["route"], className, active && styles$4["is-active"]),
3544
+ className: classnames(styles$5["route"], className, active && styles$5["is-active"]),
3545
3545
  ...props
3546
3546
  }));
3547
3547
 
@@ -3680,6 +3680,168 @@ const topbarTheme = {
3680
3680
  id: "topbar"
3681
3681
  };
3682
3682
 
3683
+ function parseValue(element) {
3684
+ const datatype = element.getAttribute("datatype");
3685
+ switch (datatype) {
3686
+ case "boolean":
3687
+ return element.content === "true" || element.content === "1";
3688
+ default:
3689
+ return element.content;
3690
+ }
3691
+ }
3692
+ function getAllPcoMeta() {
3693
+ const elements = document.head.querySelectorAll(`meta[property^="pco:"]`);
3694
+ const meta = {};
3695
+ elements.forEach(e => {
3696
+ const property = e.getAttribute("property");
3697
+ meta[property.substring("pco:".length)] = parseValue(e);
3698
+ });
3699
+ return meta;
3700
+ }
3701
+ const store = createStore(getAllPcoMeta());
3702
+ const observer = new MutationObserver(() => {
3703
+ const prevState = store.getState();
3704
+ const nextState = getAllPcoMeta();
3705
+ if (!shallowCompare(prevState, nextState)) store.setState(nextState);
3706
+ });
3707
+ let hasTriggeredObserve = false;
3708
+ function observe() {
3709
+ if (hasTriggeredObserve) return;
3710
+ hasTriggeredObserve = true;
3711
+ // The module-load snapshot above can predate meta tags that appear later
3712
+ // in <head> (e.g. pco:resource, yielded right before </head>) if this
3713
+ // module's own script tag isn't deferred and runs mid-parse. Those tags
3714
+ // never mutate afterward, so the observer alone would never catch them.
3715
+ // Re-read once now, since observe() is only called once a consumer is
3716
+ // actually mounting, which is always after the document has fully parsed.
3717
+ const freshState = getAllPcoMeta();
3718
+ if (!shallowCompare(store.getState(), freshState)) {
3719
+ store.setState(freshState);
3720
+ }
3721
+ observer.observe(document.head, {
3722
+ attributes: true,
3723
+ childList: true,
3724
+ subtree: true
3725
+ });
3726
+ }
3727
+ function usePcoMeta() {
3728
+ observe();
3729
+ return useSyncExternalStore(store.subscribe, () => store.getState());
3730
+ }
3731
+
3732
+ var styles$4 = {"debug-pco-resource":"debug-pco-resource-sLteM","debug-pco-resource-header":"debug-pco-resource-header-5fEbe","debug-pco-resource-badge":"debug-pco-resource-badge-J9v1F","debug-pco-resource-title":"debug-pco-resource-title-volWV","debug-pco-resource-field":"debug-pco-resource-field-7Gitp","debug-pco-resource-field-label":"debug-pco-resource-field-label--f1xX","debug-pco-resource-field-value":"debug-pco-resource-field-value-YoX-C","debug-pco-resource-note":"debug-pco-resource-note-N5xyf","debug-pco-resource-json":"debug-pco-resource-json-Rx-JI"};
3733
+
3734
+ function isPresent(value) {
3735
+ return value !== undefined && value.trim() !== "";
3736
+ }
3737
+ function describeTag(tagName, value) {
3738
+ if (value === undefined) return `No pco:${tagName} meta tag found on this page`;
3739
+ if (value.trim() === "") return `pco:${tagName} meta tag is present but malformed (empty)`;
3740
+ return value;
3741
+ }
3742
+ // A `pco:resource` value looks like `<product>/v2/<resource_type>/<id>`. The
3743
+ // product segment doubles as the API subdomain/path, so a lookup only needs it.
3744
+ function pcrlLookupUrl(resource, env) {
3745
+ const [product] = resource.split("/");
3746
+ if (!product) return null;
3747
+ const apiRoot = pcoApiUrl(product, {
3748
+ env,
3749
+ squiggly: false
3750
+ });
3751
+ const params = new URLSearchParams({
3752
+ "where[pcrl]": resource
3753
+ });
3754
+ return `${apiRoot}/pcrl_lookup?${params.toString()}`;
3755
+ }
3756
+ function Field({
3757
+ label,
3758
+ value
3759
+ }) {
3760
+ return /*#__PURE__*/React__default.createElement("div", {
3761
+ className: styles$4["debug-pco-resource-field"]
3762
+ }, /*#__PURE__*/React__default.createElement("span", {
3763
+ className: styles$4["debug-pco-resource-field-label"]
3764
+ }, label), /*#__PURE__*/React__default.createElement("span", {
3765
+ className: styles$4["debug-pco-resource-field-value"]
3766
+ }, value));
3767
+ }
3768
+ function DebugPcoResource({
3769
+ env
3770
+ }) {
3771
+ const {
3772
+ recently_visitable: recentlyVisitable,
3773
+ resource
3774
+ } = usePcoMeta();
3775
+ const [lookup, setLookup] = useState({
3776
+ status: "idle"
3777
+ });
3778
+ const hasResource = isPresent(resource);
3779
+ const hasRecentlyVisitable = isPresent(recentlyVisitable);
3780
+ useEffect(() => {
3781
+ // pco:resource is the more specific signal, so it always wins when both
3782
+ // tags are present.
3783
+ const url = hasResource ? pcrlLookupUrl(resource, env) : null;
3784
+ if (!url) {
3785
+ setLookup({
3786
+ status: "idle"
3787
+ });
3788
+ return undefined;
3789
+ }
3790
+ let cancelled = false;
3791
+ setLookup({
3792
+ status: "loading"
3793
+ });
3794
+ apiRequest(defaultFetch, url).then(({
3795
+ json,
3796
+ ok,
3797
+ response
3798
+ }) => {
3799
+ if (cancelled) return;
3800
+ if (ok) {
3801
+ setLookup({
3802
+ json,
3803
+ status: "loaded"
3804
+ });
3805
+ } else {
3806
+ setLookup({
3807
+ message: `pcrl_lookup request failed${response ? ` (${response.status})` : ""}`,
3808
+ status: "error"
3809
+ });
3810
+ }
3811
+ });
3812
+ return () => {
3813
+ cancelled = true;
3814
+ };
3815
+ }, [resource, env, hasResource]);
3816
+ return /*#__PURE__*/React__default.createElement("div", {
3817
+ className: styles$4["debug-pco-resource"]
3818
+ }, /*#__PURE__*/React__default.createElement("div", {
3819
+ className: styles$4["debug-pco-resource-header"]
3820
+ }, /*#__PURE__*/React__default.createElement("span", {
3821
+ className: styles$4["debug-pco-resource-badge"]
3822
+ }, "Staff"), /*#__PURE__*/React__default.createElement("span", {
3823
+ className: styles$4["debug-pco-resource-title"]
3824
+ }, "Recently Visited debug")), /*#__PURE__*/React__default.createElement(Field, {
3825
+ label: "pco:resource",
3826
+ value: describeTag("resource", resource)
3827
+ }), /*#__PURE__*/React__default.createElement(Field, {
3828
+ label: "pco:recently_visitable",
3829
+ value: describeTag("recently_visitable", recentlyVisitable)
3830
+ }), !hasResource && !hasRecentlyVisitable && (/*#__PURE__*/React__default.createElement("p", {
3831
+ className: styles$4["debug-pco-resource-note"]
3832
+ }, "This page is not eligible for Recently Visited")), hasResource && hasRecentlyVisitable && (/*#__PURE__*/React__default.createElement("p", {
3833
+ className: styles$4["debug-pco-resource-note"]
3834
+ }, "Both tags are present \u2014 pco:resource takes precedence for the Recently Visited entry.")), hasResource && lookup.status === "loading" && (/*#__PURE__*/React__default.createElement("p", {
3835
+ className: styles$4["debug-pco-resource-note"]
3836
+ }, "Looking up resource\u2026")), hasResource && lookup.status === "error" && (/*#__PURE__*/React__default.createElement("p", {
3837
+ className: styles$4["debug-pco-resource-note"]
3838
+ }, lookup.message)), hasResource && lookup.status === "loaded" && (/*#__PURE__*/React__default.createElement("pre", {
3839
+ className: styles$4["debug-pco-resource-json"]
3840
+ }, JSON.stringify(lookup.json, null, 2))), !hasResource && hasRecentlyVisitable && (/*#__PURE__*/React__default.createElement("p", {
3841
+ className: styles$4["debug-pco-resource-note"]
3842
+ }, "Recently Visited title: ", recentlyVisitable)));
3843
+ }
3844
+
3683
3845
  var styles$3 = {"drawer-wrap":"drawer-wrap-J0rSL","is-visible":"is-visible-KTME8","drawer":"drawer-j7f4l"};
3684
3846
 
3685
3847
  function Drawer({
@@ -4080,7 +4242,9 @@ function UserProfile({
4080
4242
  }, "Log out"), /*#__PURE__*/React__default.createElement(Icon, {
4081
4243
  name: "general.intoBox",
4082
4244
  fill: "var(--t-icon-color-secondary)"
4083
- })))), hasConnectedPeople && (/*#__PURE__*/React__default.createElement(StackView$2, {
4245
+ })))), env !== "production" && /*#__PURE__*/React__default.createElement(DebugPcoResource, {
4246
+ env: env
4247
+ }), hasConnectedPeople && (/*#__PURE__*/React__default.createElement(StackView$2, {
4084
4248
  mediaQueries: {
4085
4249
  sm: {
4086
4250
  display: "none"
@@ -5300,45 +5464,6 @@ const Notifications = {
5300
5464
  name: "Notifications"
5301
5465
  };
5302
5466
 
5303
- function parseValue(element) {
5304
- const datatype = element.getAttribute("datatype");
5305
- switch (datatype) {
5306
- case "boolean":
5307
- return element.content === "true" || element.content === "1";
5308
- default:
5309
- return element.content;
5310
- }
5311
- }
5312
- function getAllPcoMeta() {
5313
- const elements = document.head.querySelectorAll(`meta[property^="pco:"]`);
5314
- const meta = {};
5315
- elements.forEach(e => {
5316
- const property = e.getAttribute("property");
5317
- meta[property.substring("pco:".length)] = parseValue(e);
5318
- });
5319
- return meta;
5320
- }
5321
- const store = createStore(getAllPcoMeta());
5322
- const observer = new MutationObserver(() => {
5323
- const prevState = store.getState();
5324
- const nextState = getAllPcoMeta();
5325
- if (!shallowCompare(prevState, nextState)) store.setState(nextState);
5326
- });
5327
- let hasTriggeredObserve = false;
5328
- function observe() {
5329
- if (hasTriggeredObserve) return;
5330
- hasTriggeredObserve = true;
5331
- observer.observe(document.head, {
5332
- attributes: true,
5333
- childList: true,
5334
- subtree: true
5335
- });
5336
- }
5337
- function usePcoMeta() {
5338
- observe();
5339
- return useSyncExternalStore(store.subscribe, () => store.getState());
5340
- }
5341
-
5342
5467
  const {
5343
5468
  LoadingIndicator,
5344
5469
  StackView