@planningcenter/topbar 12.2.5 → 12.2.6-rc.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.
@@ -27,7 +27,7 @@
27
27
  var people__namespace = /*#__PURE__*/_interopNamespaceDefault(people);
28
28
  var toolbar__namespace = /*#__PURE__*/_interopNamespaceDefault(toolbar);
29
29
 
30
- var styles$d = {"accessibility-toolbar":"accessibility-toolbar-jgjUG"};
30
+ var styles$e = {"accessibility-toolbar":"accessibility-toolbar-jgjUG"};
31
31
 
32
32
  const AccessibilityToolbar = ({
33
33
  children
@@ -39,7 +39,7 @@
39
39
  (_a = document.getElementById("main-content")) === null || _a === void 0 ? void 0 : _a.focus();
40
40
  };
41
41
  return /*#__PURE__*/React.createElement("div", {
42
- className: styles$d["accessibility-toolbar"]
42
+ className: styles$e["accessibility-toolbar"]
43
43
  }, /*#__PURE__*/React.createElement(tapestry.Link, {
44
44
  href: "#main-content",
45
45
  kind: "primary",
@@ -356,11 +356,11 @@
356
356
  fill: fill
357
357
  })));
358
358
 
359
- 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"};
359
+ 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"};
360
360
 
361
361
  function AnnouncementIcon() {
362
362
  return /*#__PURE__*/React.createElement("svg", {
363
- className: styles$c["announcement-icon"],
363
+ className: styles$d["announcement-icon"],
364
364
  width: "16",
365
365
  height: "16",
366
366
  viewBox: "0 0 16 16",
@@ -485,7 +485,7 @@
485
485
  } = this.props;
486
486
  const isPromo = variant === "promo";
487
487
  return /*#__PURE__*/React.createElement("div", {
488
- className: classnames(styles$c["announcement"], styles$c[`announcement--${variant !== null && variant !== void 0 ? variant : "platform"}`]),
488
+ className: classnames(styles$d["announcement"], styles$d[`announcement--${variant !== null && variant !== void 0 ? variant : "platform"}`]),
489
489
  "data-announcement-variant": variant !== null && variant !== void 0 ? variant : "platform",
490
490
  style: isPromo ? {
491
491
  backgroundImage: promoBackgroundUrl,
@@ -494,7 +494,7 @@
494
494
  backgroundSize: "cover"
495
495
  } : undefined
496
496
  }, !isPromo && /*#__PURE__*/React.createElement(AnnouncementIcon, null), /*#__PURE__*/React.createElement("div", {
497
- className: styles$c["announcement-content"],
497
+ className: styles$d["announcement-content"],
498
498
  style: style,
499
499
  ...platformProps
500
500
  }));
@@ -543,7 +543,7 @@
543
543
  const isPromo = variant === "promo";
544
544
  return /*#__PURE__*/React.createElement("button", {
545
545
  type: "button",
546
- className: classnames(styles$c.dismiss, isPromo && styles$c["dismiss--promo"]),
546
+ className: classnames(styles$d.dismiss, isPromo && styles$d["dismiss--promo"]),
547
547
  ...props
548
548
  }, /*#__PURE__*/React.createElement(X, {
549
549
  fill: isPromo ? "currentColor" : "white",
@@ -623,9 +623,9 @@
623
623
  ...platformProps
624
624
  } = this.props;
625
625
  return /*#__PURE__*/React.createElement("div", {
626
- className: styles$c["announcement"]
626
+ className: styles$d["announcement"]
627
627
  }, /*#__PURE__*/React.createElement(AnnouncementIcon, null), /*#__PURE__*/React.createElement("div", {
628
- className: styles$c["announcement-content"],
628
+ className: styles$d["announcement-content"],
629
629
  style: style,
630
630
  ...platformProps
631
631
  }));
@@ -636,7 +636,7 @@
636
636
  }) {
637
637
  return /*#__PURE__*/React.createElement("button", {
638
638
  type: "button",
639
- className: styles$c.dismiss,
639
+ className: styles$d.dismiss,
640
640
  ...props
641
641
  }, /*#__PURE__*/React.createElement(X, {
642
642
  fill: "white",
@@ -1883,7 +1883,7 @@
1883
1883
  })) : (/*#__PURE__*/React.createElement("div", null, "appName not supported"));
1884
1884
  }
1885
1885
 
1886
- var styles$b = {"unbutton":"unbutton-lEbTR"};
1886
+ var styles$c = {"unbutton":"unbutton-lEbTR"};
1887
1887
 
1888
1888
  function Unbutton({
1889
1889
  className,
@@ -1892,7 +1892,7 @@
1892
1892
  ...nativeProps
1893
1893
  }) {
1894
1894
  return /*#__PURE__*/React.createElement("button", {
1895
- className: classnames(styles$b.unbutton, className),
1895
+ className: classnames(styles$c.unbutton, className),
1896
1896
  style: {
1897
1897
  ...style
1898
1898
  },
@@ -1901,7 +1901,7 @@
1901
1901
  });
1902
1902
  }
1903
1903
 
1904
- var styles$a = {"button":"button-XMbeQ","button-accounts":"button-accounts-nNh-z","chevron":"chevron-RRg9k","is-expanded":"is-expanded-zD0A0"};
1904
+ var styles$b = {"button":"button-XMbeQ","button-accounts":"button-accounts-nNh-z","chevron":"chevron-RRg9k","is-expanded":"is-expanded-zD0A0"};
1905
1905
 
1906
1906
  const AppsButton = ({
1907
1907
  appName,
@@ -1916,8 +1916,8 @@
1916
1916
  "aria-haspopup": "true",
1917
1917
  "aria-label": `App switcher: ${appName}`,
1918
1918
  onClick: onClick,
1919
- className: classnames(styles$a.button, {
1920
- [styles$a["is-expanded"]]: expanded
1919
+ className: classnames(styles$b.button, {
1920
+ [styles$b["is-expanded"]]: expanded
1921
1921
  }),
1922
1922
  type: "button",
1923
1923
  style: style,
@@ -1926,7 +1926,7 @@
1926
1926
  appName: "Accounts",
1927
1927
  colors: colors
1928
1928
  }), /*#__PURE__*/React.createElement("div", {
1929
- className: styles$a["button-accounts"]
1929
+ className: styles$b["button-accounts"]
1930
1930
  }, "Account settings"))) : (/*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ColorAppIcon, {
1931
1931
  appName: appName.replace(/[\s-]/, "")
1932
1932
  }), /*#__PURE__*/React.createElement(MonoAppName, {
@@ -1934,7 +1934,7 @@
1934
1934
  key: "mono-app-name",
1935
1935
  size: 24
1936
1936
  }))), /*#__PURE__*/React.createElement(DisclosureChevronIcon, {
1937
- className: styles$a.chevron,
1937
+ className: styles$b.chevron,
1938
1938
  key: "disclosure-chevron-icon"
1939
1939
  }));
1940
1940
  };
@@ -2022,7 +2022,7 @@
2022
2022
  flex: "1 1 auto"
2023
2023
  };
2024
2024
 
2025
- var styles$9 = {"popup":"popup-sJ-Nv"};
2025
+ var styles$a = {"popup":"popup-sJ-Nv"};
2026
2026
 
2027
2027
  const HoverableListItem = ({
2028
2028
  active = false,
@@ -2079,7 +2079,7 @@
2079
2079
  }
2080
2080
  }
2081
2081
 
2082
- var styles$8 = {"popup-root":"popup-root-SeL5u","popup":"popup-nQXYW","is-visible":"is-visible-3DAUP"};
2082
+ var styles$9 = {"popup-root":"popup-root-SeL5u","popup":"popup-nQXYW","is-visible":"is-visible-3DAUP"};
2083
2083
 
2084
2084
  const Popup = ({
2085
2085
  className,
@@ -2087,8 +2087,8 @@
2087
2087
  isVisible,
2088
2088
  ...nativeProps
2089
2089
  }) => (/*#__PURE__*/React.createElement(C, {
2090
- className: classnames(styles$8.popup, {
2091
- [styles$8["is-visible"]]: isVisible
2090
+ className: classnames(styles$9.popup, {
2091
+ [styles$9["is-visible"]]: isVisible
2092
2092
  }, className),
2093
2093
  ...nativeProps
2094
2094
  }));
@@ -2096,7 +2096,7 @@
2096
2096
  const PopupRoot = ({
2097
2097
  ...nativeProps
2098
2098
  }) => (/*#__PURE__*/React.createElement("div", {
2099
- className: styles$8["popup-root"],
2099
+ className: styles$9["popup-root"],
2100
2100
  ...nativeProps
2101
2101
  }));
2102
2102
 
@@ -2136,7 +2136,7 @@
2136
2136
  cleanup: !visible,
2137
2137
  component: Outsider,
2138
2138
  onOutsideClick: toggle,
2139
- className: styles$9.popup,
2139
+ className: styles$a.popup,
2140
2140
  isVisible: visible
2141
2141
  }, /*#__PURE__*/React.createElement("menu", {
2142
2142
  ref: menuRef,
@@ -3032,9 +3032,9 @@ true;
3032
3032
  `), children);
3033
3033
  }
3034
3034
 
3035
- var styles$7 = {"route":"route--8BWe","is-active":"is-active-FsU9Y","apps-routes-separator":"apps-routes-separator-Nlm-N"};
3035
+ var styles$8 = {"route":"route--8BWe","is-active":"is-active-FsU9Y","apps-routes-separator":"apps-routes-separator-Nlm-N"};
3036
3036
 
3037
- 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"};
3037
+ 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"};
3038
3038
 
3039
3039
  const UserMenu = ({
3040
3040
  appName,
@@ -3053,7 +3053,7 @@ true;
3053
3053
  component: Outsider,
3054
3054
  onOutsideClick: () => setUserMenuVisible(false),
3055
3055
  cleanup: !userMenuVisible,
3056
- className: styles$6.popup,
3056
+ className: styles$7.popup,
3057
3057
  isVisible: userMenuVisible
3058
3058
  }, /*#__PURE__*/React.createElement("div", null, hasConnectedPeople ? (/*#__PURE__*/React.createElement("div", {
3059
3059
  style: {
@@ -3197,11 +3197,11 @@ true;
3197
3197
  userMenuVisible
3198
3198
  }) => {
3199
3199
  return /*#__PURE__*/React.createElement("div", {
3200
- className: styles$6["trigger-wrap"],
3200
+ className: styles$7["trigger-wrap"],
3201
3201
  "data-pendo": "topbar-org-switcher"
3202
3202
  }, /*#__PURE__*/React.createElement(Hoverable, {
3203
- className: classnames(styles$6["trigger"], {
3204
- [styles$6["is-visible"]]: userMenuVisible
3203
+ className: classnames(styles$7["trigger"], {
3204
+ [styles$7["is-visible"]]: userMenuVisible
3205
3205
  }),
3206
3206
  component: "button",
3207
3207
  type: "button",
@@ -3213,7 +3213,7 @@ true;
3213
3213
  requestConnectedPeopleFetch();
3214
3214
  }
3215
3215
  }, showOrgName && (/*#__PURE__*/React.createElement("span", {
3216
- className: styles$6["trigger-orgname"]
3216
+ className: styles$7["trigger-orgname"]
3217
3217
  }, orgName)), /*#__PURE__*/React.createElement(DisclosureChevronIcon, null)));
3218
3218
  };
3219
3219
 
@@ -3270,7 +3270,7 @@ true;
3270
3270
  },
3271
3271
  appName: props.appName
3272
3272
  }), /*#__PURE__*/React.createElement("div", {
3273
- className: styles$7["apps-routes-separator"]
3273
+ className: styles$8["apps-routes-separator"]
3274
3274
  }), routesVisible && props.routes, /*#__PURE__*/React.createElement("div", {
3275
3275
  style: {
3276
3276
  margin: "auto"
@@ -3308,12 +3308,12 @@ true;
3308
3308
  ...nativeProps
3309
3309
  }) => {
3310
3310
  return /*#__PURE__*/React.createElement("a", {
3311
- className: classnames(styles$7["route"], className, active && styles$7["is-active"]),
3311
+ className: classnames(styles$8["route"], className, active && styles$8["is-active"]),
3312
3312
  ...nativeProps
3313
3313
  });
3314
3314
  };
3315
3315
 
3316
- var styles$5 = {"avatar":"avatar-tW-wn"};
3316
+ var styles$6 = {"avatar":"avatar-tW-wn"};
3317
3317
 
3318
3318
  function Avatar({
3319
3319
  env,
@@ -3323,7 +3323,7 @@ true;
3323
3323
  }) {
3324
3324
  const url = incomingUrl || `${pcoUrl$1(env)("people")}/static/no_photo_thumbnail_gray.svg`;
3325
3325
  return /*#__PURE__*/React.createElement("div", {
3326
- className: styles$5.avatar,
3326
+ className: styles$6.avatar,
3327
3327
  style: {
3328
3328
  backgroundImage: `url(${url})`,
3329
3329
  ...style
@@ -3345,14 +3345,14 @@ true;
3345
3345
  method: "localStorage"
3346
3346
  };
3347
3347
 
3348
- 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"};
3348
+ 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"};
3349
3349
 
3350
3350
  function AccountSettingsLink({
3351
3351
  env
3352
3352
  }) {
3353
3353
  const accountsName = "accounts";
3354
3354
  return /*#__PURE__*/React.createElement("a", {
3355
- className: classnames(styles$4["appmenu-list-a"], styles$4["appmenu-list-a--bottom"]),
3355
+ className: classnames(styles$5["appmenu-list-a"], styles$5["appmenu-list-a--bottom"]),
3356
3356
  "data-pendo": `app-switcher--change-app--${accountsName}`,
3357
3357
  "data-turbolinks": false,
3358
3358
  href: pcoUrl$1(env)(accountsName) + getAppsSwitchProductPath(accountsName)
@@ -3375,7 +3375,7 @@ true;
3375
3375
  }) => (/*#__PURE__*/React.createElement("button", {
3376
3376
  "aria-label": "Close menu",
3377
3377
  type: "button",
3378
- className: styles$4["appmenu-close-button"],
3378
+ className: styles$5["appmenu-close-button"],
3379
3379
  style: style
3380
3380
  }, /*#__PURE__*/React.createElement(X, {
3381
3381
  fill: color,
@@ -3456,7 +3456,7 @@ true;
3456
3456
  "aria-haspopup": "true",
3457
3457
  "aria-label": `App switcher: ${props.appName}`,
3458
3458
  type: "button",
3459
- className: styles$4["appmenu-button"],
3459
+ className: styles$5["appmenu-button"],
3460
3460
  onClick: () => {
3461
3461
  props.requestAppsFetch();
3462
3462
  props.requestConnectedPeopleFetch();
@@ -3466,12 +3466,12 @@ true;
3466
3466
  }, /*#__PURE__*/React.createElement(ColorAppIcon, {
3467
3467
  appName: props.appName.replace(/[\s-]/, "")
3468
3468
  })), routesMenuVisible && (/*#__PURE__*/React.createElement("div", {
3469
- className: styles$4["routes"]
3469
+ className: styles$5["routes"]
3470
3470
  }, props.routes)), /*#__PURE__*/React.createElement(ClientStorage, {
3471
3471
  item: "Topbar:Small:Menus:Products:visibility",
3472
3472
  render: () => (/*#__PURE__*/React.createElement("div", {
3473
3473
  ref: appMenuRef,
3474
- className: styles$4["appmenu-layer"],
3474
+ className: styles$5["appmenu-layer"],
3475
3475
  style: {
3476
3476
  ...(productSwitcherVisible && {
3477
3477
  display: "block"
@@ -3490,44 +3490,44 @@ true;
3490
3490
  e.stopPropagation();
3491
3491
  }
3492
3492
  },
3493
- className: styles$4["appmenu-container"]
3493
+ className: styles$5["appmenu-container"]
3494
3494
  }, /*#__PURE__*/React.createElement("a", {
3495
3495
  "aria-current": props.appName === (homeProduct === null || homeProduct === void 0 ? void 0 : homeProduct.name) ? "page" : undefined,
3496
3496
  "aria-label": homeProduct ? homeProduct.name : props.appName,
3497
3497
  "data-pendo": `app-switcher--change-app--${homeProduct === null || homeProduct === void 0 ? void 0 : homeProduct.name}`,
3498
3498
  "data-turbolinks": false,
3499
- className: classnames(styles$4["appmenu-list-a"], styles$4["appmenu-list-a--top"]),
3499
+ className: classnames(styles$5["appmenu-list-a"], styles$5["appmenu-list-a--top"]),
3500
3500
  href: homeProduct ? pcoUrl$1(props.env)("accounts") + getAppsSwitchProductPath(homeProduct === null || homeProduct === void 0 ? void 0 : homeProduct.name) : undefined
3501
3501
  }, /*#__PURE__*/React.createElement(UserMenuAppLockup, {
3502
3502
  appName: homeProduct ? homeProduct.name : props.appName
3503
3503
  })), /*#__PURE__*/React.createElement("div", {
3504
- className: styles$4["appmenu-scroll"]
3504
+ className: styles$5["appmenu-scroll"]
3505
3505
  }, /*#__PURE__*/React.createElement("ul", {
3506
3506
  "data-pendo": "app-switcher",
3507
- className: styles$4["appmenu-list"]
3507
+ className: styles$5["appmenu-list"]
3508
3508
  }, appsMenuFormatter(restProducts).map(({
3509
3509
  name
3510
3510
  }) => (/*#__PURE__*/React.createElement("li", {
3511
3511
  key: name,
3512
- className: styles$4["appmenu-list-li"]
3512
+ className: styles$5["appmenu-list-li"]
3513
3513
  }, /*#__PURE__*/React.createElement("a", {
3514
3514
  "aria-current": name === props.appName ? "page" : undefined,
3515
3515
  "aria-label": name,
3516
3516
  "data-pendo": `app-switcher--change-app--${name}`,
3517
3517
  "data-turbolinks": false,
3518
- className: styles$4["appmenu-list-a"],
3518
+ className: styles$5["appmenu-list-a"],
3519
3519
  href: pcoUrl$1(props.env)("accounts") + getAppsSwitchProductPath(name)
3520
3520
  }, /*#__PURE__*/React.createElement(UserMenuAppLockup, {
3521
3521
  appName: name
3522
3522
  }))))), accountsProduct && (/*#__PURE__*/React.createElement("li", {
3523
- className: styles$4["appmenu-list-li"]
3523
+ className: styles$5["appmenu-list-li"]
3524
3524
  }, /*#__PURE__*/React.createElement(AccountSettingsLink, {
3525
3525
  env: props.env
3526
3526
  }))))))))
3527
3527
  }), /*#__PURE__*/React.createElement("button", {
3528
3528
  type: "button",
3529
- className: classnames(styles$4["current-route"], {
3530
- [styles$4["is-active"]]: routesMenuVisible
3529
+ className: classnames(styles$5["current-route"], {
3530
+ [styles$5["is-active"]]: routesMenuVisible
3531
3531
  }),
3532
3532
  onClick: props.routes.length > 0 ? () => {
3533
3533
  setProductSwitcherVisible(false);
@@ -3535,7 +3535,7 @@ true;
3535
3535
  } : null
3536
3536
  }, /*#__PURE__*/React.createElement(CurrentRouteComponent, null, capitalize(currentRouteText)), props.routes.length > 0 && /*#__PURE__*/React.createElement(DisclosureChevronIcon, null)), /*#__PURE__*/React.createElement("button", {
3537
3537
  type: "button",
3538
- className: styles$4["profile-button"],
3538
+ className: styles$5["profile-button"],
3539
3539
  onClick: () => {
3540
3540
  var _a, _b;
3541
3541
  props.requestConnectedPeopleFetch();
@@ -3551,7 +3551,7 @@ true;
3551
3551
  className,
3552
3552
  ...props
3553
3553
  }) => (/*#__PURE__*/React.createElement("a", {
3554
- className: classnames(styles$4["route"], className, active && styles$4["is-active"]),
3554
+ className: classnames(styles$5["route"], className, active && styles$5["is-active"]),
3555
3555
  ...props
3556
3556
  }));
3557
3557
 
@@ -3690,6 +3690,168 @@ true;
3690
3690
  id: "topbar"
3691
3691
  };
3692
3692
 
3693
+ function parseValue(element) {
3694
+ const datatype = element.getAttribute("datatype");
3695
+ switch (datatype) {
3696
+ case "boolean":
3697
+ return element.content === "true" || element.content === "1";
3698
+ default:
3699
+ return element.content;
3700
+ }
3701
+ }
3702
+ function getAllPcoMeta() {
3703
+ const elements = document.head.querySelectorAll(`meta[property^="pco:"]`);
3704
+ const meta = {};
3705
+ elements.forEach(e => {
3706
+ const property = e.getAttribute("property");
3707
+ meta[property.substring("pco:".length)] = parseValue(e);
3708
+ });
3709
+ return meta;
3710
+ }
3711
+ const store = createStore(getAllPcoMeta());
3712
+ const observer = new MutationObserver(() => {
3713
+ const prevState = store.getState();
3714
+ const nextState = getAllPcoMeta();
3715
+ if (!shallowCompare(prevState, nextState)) store.setState(nextState);
3716
+ });
3717
+ let hasTriggeredObserve = false;
3718
+ function observe() {
3719
+ if (hasTriggeredObserve) return;
3720
+ hasTriggeredObserve = true;
3721
+ // The module-load snapshot above can predate meta tags that appear later
3722
+ // in <head> (e.g. pco:resource, yielded right before </head>) if this
3723
+ // module's own script tag isn't deferred and runs mid-parse. Those tags
3724
+ // never mutate afterward, so the observer alone would never catch them.
3725
+ // Re-read once now, since observe() is only called once a consumer is
3726
+ // actually mounting, which is always after the document has fully parsed.
3727
+ const freshState = getAllPcoMeta();
3728
+ if (!shallowCompare(store.getState(), freshState)) {
3729
+ store.setState(freshState);
3730
+ }
3731
+ observer.observe(document.head, {
3732
+ attributes: true,
3733
+ childList: true,
3734
+ subtree: true
3735
+ });
3736
+ }
3737
+ function usePcoMeta() {
3738
+ observe();
3739
+ return shim.useSyncExternalStore(store.subscribe, () => store.getState());
3740
+ }
3741
+
3742
+ 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"};
3743
+
3744
+ function isPresent(value) {
3745
+ return value !== undefined && value.trim() !== "";
3746
+ }
3747
+ function describeTag(tagName, value) {
3748
+ if (value === undefined) return `No pco:${tagName} meta tag found on this page`;
3749
+ if (value.trim() === "") return `pco:${tagName} meta tag is present but malformed (empty)`;
3750
+ return value;
3751
+ }
3752
+ // A `pco:resource` value looks like `<product>/v2/<resource_type>/<id>`. The
3753
+ // product segment doubles as the API subdomain/path, so a lookup only needs it.
3754
+ function pcrlLookupUrl(resource, env) {
3755
+ const [product] = resource.split("/");
3756
+ if (!product) return null;
3757
+ const apiRoot = pcoUrl$1.pcoApiUrl(product, {
3758
+ env,
3759
+ squiggly: false
3760
+ });
3761
+ const params = new URLSearchParams({
3762
+ "where[pcrl]": resource
3763
+ });
3764
+ return `${apiRoot}/pcrl_lookup?${params.toString()}`;
3765
+ }
3766
+ function Field({
3767
+ label,
3768
+ value
3769
+ }) {
3770
+ return /*#__PURE__*/React.createElement("div", {
3771
+ className: styles$4["debug-pco-resource-field"]
3772
+ }, /*#__PURE__*/React.createElement("span", {
3773
+ className: styles$4["debug-pco-resource-field-label"]
3774
+ }, label), /*#__PURE__*/React.createElement("span", {
3775
+ className: styles$4["debug-pco-resource-field-value"]
3776
+ }, value));
3777
+ }
3778
+ function DebugPcoResource({
3779
+ env
3780
+ }) {
3781
+ const {
3782
+ recently_visitable: recentlyVisitable,
3783
+ resource
3784
+ } = usePcoMeta();
3785
+ const [lookup, setLookup] = React.useState({
3786
+ status: "idle"
3787
+ });
3788
+ const hasResource = isPresent(resource);
3789
+ const hasRecentlyVisitable = isPresent(recentlyVisitable);
3790
+ React.useEffect(() => {
3791
+ // pco:resource is the more specific signal, so it always wins when both
3792
+ // tags are present.
3793
+ const url = hasResource ? pcrlLookupUrl(resource, env) : null;
3794
+ if (!url) {
3795
+ setLookup({
3796
+ status: "idle"
3797
+ });
3798
+ return undefined;
3799
+ }
3800
+ let cancelled = false;
3801
+ setLookup({
3802
+ status: "loading"
3803
+ });
3804
+ apiRequest(defaultFetch, url).then(({
3805
+ json,
3806
+ ok,
3807
+ response
3808
+ }) => {
3809
+ if (cancelled) return;
3810
+ if (ok) {
3811
+ setLookup({
3812
+ json,
3813
+ status: "loaded"
3814
+ });
3815
+ } else {
3816
+ setLookup({
3817
+ message: `pcrl_lookup request failed${response ? ` (${response.status})` : ""}`,
3818
+ status: "error"
3819
+ });
3820
+ }
3821
+ });
3822
+ return () => {
3823
+ cancelled = true;
3824
+ };
3825
+ }, [resource, env, hasResource]);
3826
+ return /*#__PURE__*/React.createElement("div", {
3827
+ className: styles$4["debug-pco-resource"]
3828
+ }, /*#__PURE__*/React.createElement("div", {
3829
+ className: styles$4["debug-pco-resource-header"]
3830
+ }, /*#__PURE__*/React.createElement("span", {
3831
+ className: styles$4["debug-pco-resource-badge"]
3832
+ }, "Staff"), /*#__PURE__*/React.createElement("span", {
3833
+ className: styles$4["debug-pco-resource-title"]
3834
+ }, "Recently Visited debug")), /*#__PURE__*/React.createElement(Field, {
3835
+ label: "pco:resource",
3836
+ value: describeTag("resource", resource)
3837
+ }), /*#__PURE__*/React.createElement(Field, {
3838
+ label: "pco:recently_visitable",
3839
+ value: describeTag("recently_visitable", recentlyVisitable)
3840
+ }), !hasResource && !hasRecentlyVisitable && (/*#__PURE__*/React.createElement("p", {
3841
+ className: styles$4["debug-pco-resource-note"]
3842
+ }, "This page is not eligible for Recently Visited")), hasResource && hasRecentlyVisitable && (/*#__PURE__*/React.createElement("p", {
3843
+ className: styles$4["debug-pco-resource-note"]
3844
+ }, "Both tags are present \u2014 pco:resource takes precedence for the Recently Visited entry.")), hasResource && lookup.status === "loading" && (/*#__PURE__*/React.createElement("p", {
3845
+ className: styles$4["debug-pco-resource-note"]
3846
+ }, "Looking up resource\u2026")), hasResource && lookup.status === "error" && (/*#__PURE__*/React.createElement("p", {
3847
+ className: styles$4["debug-pco-resource-note"]
3848
+ }, lookup.message)), hasResource && lookup.status === "loaded" && (/*#__PURE__*/React.createElement("pre", {
3849
+ className: styles$4["debug-pco-resource-json"]
3850
+ }, JSON.stringify(lookup.json, null, 2))), !hasResource && hasRecentlyVisitable && (/*#__PURE__*/React.createElement("p", {
3851
+ className: styles$4["debug-pco-resource-note"]
3852
+ }, "Recently Visited title: ", recentlyVisitable)));
3853
+ }
3854
+
3693
3855
  var styles$3 = {"drawer-wrap":"drawer-wrap-J0rSL","is-visible":"is-visible-KTME8","drawer":"drawer-j7f4l"};
3694
3856
 
3695
3857
  function Drawer({
@@ -4090,7 +4252,9 @@ true;
4090
4252
  }, "Log out"), /*#__PURE__*/React.createElement(tapestryReact.Icon, {
4091
4253
  name: "general.intoBox",
4092
4254
  fill: "var(--t-icon-color-secondary)"
4093
- })))), hasConnectedPeople && (/*#__PURE__*/React.createElement(tapestryReact.StackView, {
4255
+ })))), env !== "production" && /*#__PURE__*/React.createElement(DebugPcoResource, {
4256
+ env: env
4257
+ }), hasConnectedPeople && (/*#__PURE__*/React.createElement(tapestryReact.StackView, {
4094
4258
  mediaQueries: {
4095
4259
  sm: {
4096
4260
  display: "none"
@@ -5310,45 +5474,6 @@ true;
5310
5474
  name: "Notifications"
5311
5475
  };
5312
5476
 
5313
- function parseValue(element) {
5314
- const datatype = element.getAttribute("datatype");
5315
- switch (datatype) {
5316
- case "boolean":
5317
- return element.content === "true" || element.content === "1";
5318
- default:
5319
- return element.content;
5320
- }
5321
- }
5322
- function getAllPcoMeta() {
5323
- const elements = document.head.querySelectorAll(`meta[property^="pco:"]`);
5324
- const meta = {};
5325
- elements.forEach(e => {
5326
- const property = e.getAttribute("property");
5327
- meta[property.substring("pco:".length)] = parseValue(e);
5328
- });
5329
- return meta;
5330
- }
5331
- const store = createStore(getAllPcoMeta());
5332
- const observer = new MutationObserver(() => {
5333
- const prevState = store.getState();
5334
- const nextState = getAllPcoMeta();
5335
- if (!shallowCompare(prevState, nextState)) store.setState(nextState);
5336
- });
5337
- let hasTriggeredObserve = false;
5338
- function observe() {
5339
- if (hasTriggeredObserve) return;
5340
- hasTriggeredObserve = true;
5341
- observer.observe(document.head, {
5342
- attributes: true,
5343
- childList: true,
5344
- subtree: true
5345
- });
5346
- }
5347
- function usePcoMeta() {
5348
- observe();
5349
- return shim.useSyncExternalStore(store.subscribe, () => store.getState());
5350
- }
5351
-
5352
5477
  const {
5353
5478
  LoadingIndicator,
5354
5479
  StackView