@planningcenter/topbar 12.1.1 → 12.2.0-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.
@@ -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$c = {"accessibility-toolbar":"accessibility-toolbar-jgjUG"};
20
+ var styles$d = {"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$c["accessibility-toolbar"]
32
+ className: styles$d["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$b = {"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$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"};
350
350
 
351
351
  function AnnouncementIcon() {
352
352
  return /*#__PURE__*/React__default.createElement("svg", {
353
- className: styles$b["announcement-icon"],
353
+ className: styles$c["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$b["announcement"], styles$b[`announcement--${variant !== null && variant !== void 0 ? variant : "platform"}`]),
478
+ className: classnames(styles$c["announcement"], styles$c[`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$b["announcement-content"],
487
+ className: styles$c["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$b.dismiss, isPromo && styles$b["dismiss--promo"]),
536
+ className: classnames(styles$c.dismiss, isPromo && styles$c["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$b["announcement"]
616
+ className: styles$c["announcement"]
617
617
  }, /*#__PURE__*/React__default.createElement(AnnouncementIcon, null), /*#__PURE__*/React__default.createElement("div", {
618
- className: styles$b["announcement-content"],
618
+ className: styles$c["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$b.dismiss,
629
+ className: styles$c.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$a = {"unbutton":"unbutton-lEbTR"};
1876
+ var styles$b = {"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$a.unbutton, className),
1885
+ className: classnames(styles$b.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$9 = {"button":"button-XMbeQ","button-accounts":"button-accounts-nNh-z","chevron":"chevron-RRg9k","is-expanded":"is-expanded-zD0A0"};
1894
+ var styles$a = {"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$9.button, {
1910
- [styles$9["is-expanded"]]: expanded
1909
+ className: classnames(styles$a.button, {
1910
+ [styles$a["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$9["button-accounts"]
1919
+ className: styles$a["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$9.chevron,
1927
+ className: styles$a.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$8 = {"popup":"popup-sJ-Nv"};
2015
+ var styles$9 = {"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$7 = {"popup-root":"popup-root-SeL5u","popup":"popup-nQXYW","is-visible":"is-visible-3DAUP"};
2072
+ var styles$8 = {"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$7.popup, {
2081
- [styles$7["is-visible"]]: isVisible
2080
+ className: classnames(styles$8.popup, {
2081
+ [styles$8["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$7["popup-root"],
2089
+ className: styles$8["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$8.popup,
2129
+ className: styles$9.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$6 = {"route":"route--8BWe","is-active":"is-active-FsU9Y","apps-routes-separator":"apps-routes-separator-Nlm-N"};
3025
+ var styles$7 = {"route":"route--8BWe","is-active":"is-active-FsU9Y","apps-routes-separator":"apps-routes-separator-Nlm-N"};
3026
3026
 
3027
- var styles$5 = {"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$6 = {"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$5.popup,
3046
+ className: styles$6.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$5["trigger-wrap"],
3190
+ className: styles$6["trigger-wrap"],
3191
3191
  "data-pendo": "topbar-org-switcher"
3192
3192
  }, /*#__PURE__*/React__default.createElement(Hoverable, {
3193
- className: classnames(styles$5["trigger"], {
3194
- [styles$5["is-visible"]]: userMenuVisible
3193
+ className: classnames(styles$6["trigger"], {
3194
+ [styles$6["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$5["trigger-orgname"]
3206
+ className: styles$6["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$6["apps-routes-separator"]
3263
+ className: styles$7["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$6["route"], className, active && styles$6["is-active"]),
3301
+ className: classnames(styles$7["route"], className, active && styles$7["is-active"]),
3302
3302
  ...nativeProps
3303
3303
  });
3304
3304
  };
3305
3305
 
3306
- var styles$4 = {"avatar":"avatar-tW-wn"};
3306
+ var styles$5 = {"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$4.avatar,
3316
+ className: styles$5.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$3 = {"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$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"};
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$3["appmenu-list-a"], styles$3["appmenu-list-a--bottom"]),
3345
+ className: classnames(styles$4["appmenu-list-a"], styles$4["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$3["appmenu-close-button"],
3368
+ className: styles$4["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$3["appmenu-button"],
3449
+ className: styles$4["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$3["routes"]
3459
+ className: styles$4["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$3["appmenu-layer"],
3464
+ className: styles$4["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$3["appmenu-container"]
3483
+ className: styles$4["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$3["appmenu-list-a"], styles$3["appmenu-list-a--top"]),
3489
+ className: classnames(styles$4["appmenu-list-a"], styles$4["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$3["appmenu-scroll"]
3494
+ className: styles$4["appmenu-scroll"]
3495
3495
  }, /*#__PURE__*/React__default.createElement("ul", {
3496
3496
  "data-pendo": "app-switcher",
3497
- className: styles$3["appmenu-list"]
3497
+ className: styles$4["appmenu-list"]
3498
3498
  }, appsMenuFormatter(restProducts).map(({
3499
3499
  name
3500
3500
  }) => (/*#__PURE__*/React__default.createElement("li", {
3501
3501
  key: name,
3502
- className: styles$3["appmenu-list-li"]
3502
+ className: styles$4["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$3["appmenu-list-a"],
3508
+ className: styles$4["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$3["appmenu-list-li"]
3513
+ className: styles$4["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$3["current-route"], {
3520
- [styles$3["is-active"]]: routesMenuVisible
3519
+ className: classnames(styles$4["current-route"], {
3520
+ [styles$4["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$3["profile-button"],
3528
+ className: styles$4["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$3["route"], className, active && styles$3["is-active"]),
3544
+ className: classnames(styles$4["route"], className, active && styles$4["is-active"]),
3545
3545
  ...props
3546
3546
  }));
3547
3547
 
@@ -3680,7 +3680,7 @@ const topbarTheme = {
3680
3680
  id: "topbar"
3681
3681
  };
3682
3682
 
3683
- var styles$2 = {"drawer-wrap":"drawer-wrap-J0rSL","is-visible":"is-visible-KTME8","drawer":"drawer-j7f4l"};
3683
+ var styles$3 = {"drawer-wrap":"drawer-wrap-J0rSL","is-visible":"is-visible-KTME8","drawer":"drawer-j7f4l"};
3684
3684
 
3685
3685
  function Drawer({
3686
3686
  children,
@@ -3688,7 +3688,7 @@ function Drawer({
3688
3688
  }) {
3689
3689
  return /*#__PURE__*/React__default.createElement("div", {
3690
3690
  id: id,
3691
- className: styles$2["drawer"]
3691
+ className: styles$3["drawer"]
3692
3692
  }, children);
3693
3693
  }
3694
3694
  function DrawerWrap({
@@ -3698,7 +3698,7 @@ function DrawerWrap({
3698
3698
  ...props
3699
3699
  }) {
3700
3700
  return /*#__PURE__*/React__default.createElement("div", {
3701
- className: classnames(styles$2["drawer-wrap"], className, isVisible && styles$2["is-visible"]),
3701
+ className: classnames(styles$3["drawer-wrap"], className, isVisible && styles$3["is-visible"]),
3702
3702
  ...props
3703
3703
  }, children);
3704
3704
  }
@@ -3882,7 +3882,7 @@ const SwitchView = ({
3882
3882
  }));
3883
3883
  };
3884
3884
 
3885
- var styles$1 = {"color-mode-switcher":"color-mode-switcher-JpczO","color-mode-switcher-label":"color-mode-switcher-label-3jPM2","color-mode-switcher-modes":"color-mode-switcher-modes-u-bic"};
3885
+ var styles$2 = {"color-mode-switcher":"color-mode-switcher-JpczO","color-mode-switcher-label":"color-mode-switcher-label-3jPM2","color-mode-switcher-modes":"color-mode-switcher-modes-u-bic"};
3886
3886
 
3887
3887
  const COLOR_MODES = [{
3888
3888
  label: "Light",
@@ -3902,11 +3902,11 @@ function ColorModeSwitcher() {
3902
3902
  const updateStore = useUpdateStore();
3903
3903
  const [counter] = useState(() => COLOR_MODE_INSTANCE_COUNTER++);
3904
3904
  return /*#__PURE__*/React__default.createElement("fieldset", {
3905
- className: styles$1["color-mode-switcher"]
3905
+ className: styles$2["color-mode-switcher"]
3906
3906
  }, /*#__PURE__*/React__default.createElement("legend", {
3907
- className: styles$1["color-mode-switcher-label"]
3907
+ className: styles$2["color-mode-switcher-label"]
3908
3908
  }, "Appearance", " "), /*#__PURE__*/React__default.createElement("div", {
3909
- className: styles$1["color-mode-switcher-modes"]
3909
+ className: styles$2["color-mode-switcher-modes"]
3910
3910
  }, COLOR_MODES.map(({
3911
3911
  value,
3912
3912
  label
@@ -4177,20 +4177,67 @@ const useToolbarReducer = overrides => React.useReducer(reducer, {
4177
4177
  ...overrides
4178
4178
  });
4179
4179
 
4180
- var styles = {"toolbar":"toolbar-KHJR5","toolbar-button":"toolbar-button-Ye4h5","is-current":"is-current-DZK47","toolbar-button--avatar":"toolbar-button--avatar-5FUik","toolbar-button--home":"toolbar-button--home-Pthd0"};
4180
+ var styles$1 = {"toolbar":"toolbar-KHJR5","toolbar-button":"toolbar-button-Ye4h5","is-current":"is-current-DZK47","toolbar-button--avatar":"toolbar-button--avatar-5FUik","toolbar-button--home":"toolbar-button--home-Pthd0"};
4181
4181
 
4182
4182
  const pcoUrl = pcoUrl$1;
4183
4183
 
4184
- // The route rides in the iframe URL fragment (`…/topbar#conversations/abc`),
4185
- // not the path, so updating it is a same-document navigation that doesn't
4186
- // reload the iframe, but also lets the route survive a forced reload (e.g.
4187
- // Turbo re-parenting the topbar).
4188
- function buildPicobotSrc(origin, path) {
4189
- const [rawPath, queryPart] = path.replace(/^\/+/, "").split("?", 2);
4190
- const safePath = rawPath.split("/").filter(segment => segment && segment !== "." && segment !== "..").join("/");
4191
- const fragment = queryPart !== undefined ? `${safePath}?${queryPart}` : safePath;
4192
- const base = new URL("topbar", origin).toString();
4193
- return fragment ? `${base}#${fragment}` : base;
4184
+ var styles = {"banner":"banner-YfQ37","content":"content-lNjWf","icon":"icon-abz7q","iconShape":"iconShape-6uyot","iconWand":"iconWand-yEhh4","text":"text--Vlhl","title":"title-zOEOR","subtitle":"subtitle-ufLnk","chevron":"chevron-oOUA-"};
4185
+
4186
+ function AskAIBanner({
4187
+ onClick
4188
+ }) {
4189
+ return /*#__PURE__*/React__default.createElement("button", {
4190
+ className: styles.banner,
4191
+ onClick: () => onClick(),
4192
+ type: "button"
4193
+ }, /*#__PURE__*/React__default.createElement("span", {
4194
+ className: styles.content
4195
+ }, /*#__PURE__*/React__default.createElement(AskAIIcon, null), /*#__PURE__*/React__default.createElement("span", {
4196
+ className: styles.text
4197
+ }, /*#__PURE__*/React__default.createElement("span", {
4198
+ className: styles.title
4199
+ }, "Ask AI"), /*#__PURE__*/React__default.createElement("span", {
4200
+ className: styles.subtitle
4201
+ }, "Support answers tailored to you"))), /*#__PURE__*/React__default.createElement(Icon, {
4202
+ className: styles.chevron,
4203
+ name: "general.rightChevron",
4204
+ size: "16px"
4205
+ }));
4206
+ }
4207
+ const GRADIENT_ID = "ask-ai-banner-icon-gradient";
4208
+ function AskAIIcon() {
4209
+ return /*#__PURE__*/React__default.createElement("span", {
4210
+ className: styles.icon
4211
+ }, /*#__PURE__*/React__default.createElement("svg", {
4212
+ className: styles.iconShape,
4213
+ viewBox: "0 0 32 32",
4214
+ "aria-hidden": "true"
4215
+ }, /*#__PURE__*/React__default.createElement("path", {
4216
+ d: "M15.9994 0C3.19766 0 0 3.20025 0 16C0 28.7998 3.19766 32 15.9994 32C28.8011 32 32 28.8022 32 16C32 3.19779 28.7999 0 15.9994 0Z",
4217
+ fill: `url(#${GRADIENT_ID})`
4218
+ }), /*#__PURE__*/React__default.createElement("defs", null, /*#__PURE__*/React__default.createElement("linearGradient", {
4219
+ id: GRADIENT_ID,
4220
+ x1: "0",
4221
+ y1: "0",
4222
+ x2: "38.0356",
4223
+ y2: "21.1413",
4224
+ gradientUnits: "userSpaceOnUse"
4225
+ }, /*#__PURE__*/React__default.createElement("stop", {
4226
+ stopColor: "#49D4BB"
4227
+ }), /*#__PURE__*/React__default.createElement("stop", {
4228
+ offset: "0.352694",
4229
+ stopColor: "#7CA8FE"
4230
+ }), /*#__PURE__*/React__default.createElement("stop", {
4231
+ offset: "0.656242",
4232
+ stopColor: "#B883E2"
4233
+ }), /*#__PURE__*/React__default.createElement("stop", {
4234
+ offset: "1",
4235
+ stopColor: "#F28B54"
4236
+ })))), /*#__PURE__*/React__default.createElement(Icon, {
4237
+ className: styles.iconWand,
4238
+ name: "general.magicWand",
4239
+ size: "18px"
4240
+ }));
4194
4241
  }
4195
4242
 
4196
4243
  // The article heading lives in the deepest populated hierarchy level (lvl0 is
@@ -4344,6 +4391,74 @@ const DocumentationSearch = ({
4344
4391
  }));
4345
4392
  };
4346
4393
 
4394
+ // The route rides in the iframe URL fragment (`…/topbar#conversations/abc`),
4395
+ // not the path, so updating it is a same-document navigation that doesn't
4396
+ // reload the iframe, but also lets the route survive a forced reload (e.g.
4397
+ // Turbo re-parenting the topbar).
4398
+ function buildPicobotSrc(origin, path) {
4399
+ const [rawPath, queryPart] = path.replace(/^\/+/, "").split("?", 2);
4400
+ const safePath = rawPath.split("/").filter(segment => segment && segment !== "." && segment !== "..").join("/");
4401
+ const fragment = queryPart !== undefined ? `${safePath}?${queryPart}` : safePath;
4402
+ const base = new URL("topbar", origin).toString();
4403
+ return fragment ? `${base}#${fragment}` : base;
4404
+ }
4405
+
4406
+ function createPicobotIframe(picobotOrigin) {
4407
+ return /*#__PURE__*/React__default.forwardRef(function PicobotIframe({
4408
+ currentPath: iframePath,
4409
+ onChangePath: onIframeChangePath,
4410
+ onMessage
4411
+ }, ref) {
4412
+ const iframeRef = React__default.useRef(null);
4413
+ // Keep the fragment in sync in both directions—external opens (deeplink /
4414
+ // Contact support) and picobot's own NEW_ROUTE_RENDERED reports—so it
4415
+ // always reflects the live conversation. See buildPicobotSrc.
4416
+ const [loadedPath, setLoadedPath] = React__default.useState(iframePath || "");
4417
+ React__default.useEffect(function subscribeToGuestMessages() {
4418
+ if (!onIframeChangePath && !onMessage) return undefined;
4419
+ function handleGuestMessage(e) {
4420
+ var _a, _b;
4421
+ if (e.origin !== picobotOrigin) return;
4422
+ if (!e.source || !iframeRef.current) return;
4423
+ if (e.source !== iframeRef.current.contentWindow) return;
4424
+ if (((_a = e.data) === null || _a === void 0 ? void 0 : _a.type) === "NEW_ROUTE_RENDERED" && onIframeChangePath) {
4425
+ const reportedPath = String((_b = e.data.payload) !== null && _b !== void 0 ? _b : "");
4426
+ setLoadedPath(reportedPath);
4427
+ onIframeChangePath(reportedPath);
4428
+ }
4429
+ if (onMessage) onMessage(e.data);
4430
+ }
4431
+ window.addEventListener("message", handleGuestMessage);
4432
+ return () => window.removeEventListener("message", handleGuestMessage);
4433
+ }, [onIframeChangePath, onMessage]);
4434
+ React__default.useEffect(function syncLoadedPathFromProp() {
4435
+ setLoadedPath(iframePath || "");
4436
+ }, [iframePath]);
4437
+ // A one-way channel for sending messages to picobot. Topbar just
4438
+ // forwards the envelope to the iframe and holds no message semantics of
4439
+ // its own—the consumer decides what to send and when.
4440
+ React__default.useImperativeHandle(ref, () => ({
4441
+ postMessage(message) {
4442
+ var _a, _b;
4443
+ (_b = (_a = iframeRef.current) === null || _a === void 0 ? void 0 : _a.contentWindow) === null || _b === void 0 ? void 0 : _b.postMessage(message, picobotOrigin);
4444
+ }
4445
+ }), []);
4446
+ const iframeSrc = buildPicobotSrc(picobotOrigin, loadedPath);
4447
+ return /*#__PURE__*/React__default.createElement("iframe", {
4448
+ ref: iframeRef,
4449
+ src: iframeSrc,
4450
+ allow: "clipboard-write",
4451
+ style: {
4452
+ border: 0,
4453
+ flex: 1,
4454
+ height: "100%",
4455
+ width: "100%"
4456
+ },
4457
+ title: "Picobot"
4458
+ });
4459
+ });
4460
+ }
4461
+
4347
4462
  const {
4348
4463
  LoadingIndicator: LoadingIndicator$1,
4349
4464
  StackView: StackView$1
@@ -4369,52 +4484,7 @@ function HelpdeskComponent({
4369
4484
  helpdeskConfig,
4370
4485
  onChangePath
4371
4486
  }) {
4372
- const PicobotIframe = React__default.useMemo(() => {
4373
- const picobotOrigin = pcoUrl(env)("picobot");
4374
- return function PicobotIframe({
4375
- currentPath: iframePath,
4376
- onChangePath: onIframeChangePath,
4377
- onMessage
4378
- }) {
4379
- const ref = React__default.useRef(null);
4380
- // Keep the fragment in sync in both directions—external opens (deeplink /
4381
- // Contact support) and picobot's own NEW_ROUTE_RENDERED reports—so it
4382
- // always reflects the live conversation. See buildPicobotSrc.
4383
- const [loadedPath, setLoadedPath] = React__default.useState(iframePath || "");
4384
- React__default.useEffect(() => {
4385
- if (!onIframeChangePath && !onMessage) return undefined;
4386
- const handler = e => {
4387
- var _a, _b;
4388
- if (e.origin !== picobotOrigin) return;
4389
- if (!e.source || !ref.current) return;
4390
- if (e.source !== ref.current.contentWindow) return;
4391
- if (((_a = e.data) === null || _a === void 0 ? void 0 : _a.type) === "NEW_ROUTE_RENDERED" && onIframeChangePath) {
4392
- const reportedPath = String((_b = e.data.payload) !== null && _b !== void 0 ? _b : "");
4393
- setLoadedPath(reportedPath);
4394
- onIframeChangePath(reportedPath);
4395
- }
4396
- if (onMessage) onMessage(e.data);
4397
- };
4398
- window.addEventListener("message", handler);
4399
- return () => window.removeEventListener("message", handler);
4400
- }, [onIframeChangePath, onMessage]);
4401
- React__default.useEffect(() => {
4402
- setLoadedPath(iframePath || "");
4403
- }, [iframePath]);
4404
- const iframeSrc = buildPicobotSrc(picobotOrigin, loadedPath);
4405
- return /*#__PURE__*/React__default.createElement("iframe", {
4406
- ref: ref,
4407
- src: iframeSrc,
4408
- style: {
4409
- border: 0,
4410
- flex: 1,
4411
- height: "100%",
4412
- width: "100%"
4413
- },
4414
- title: "Picobot"
4415
- });
4416
- };
4417
- }, [env]);
4487
+ const PicobotIframe = React__default.useMemo(() => createPicobotIframe(pcoUrl(env)("picobot")), [env]);
4418
4488
  return /*#__PURE__*/React__default.createElement(UiExtensionFirstPartyComponent, {
4419
4489
  grow: 1,
4420
4490
  display: "flex",
@@ -4429,6 +4499,15 @@ function HelpdeskComponent({
4429
4499
  spacing: 1
4430
4500
  }, /*#__PURE__*/React__default.createElement(DrawerHeading, null, "Help and support"), /*#__PURE__*/React__default.createElement(LoadingIndicator$1, null)))),
4431
4501
  additionalComponents: {
4502
+ AskAIBanner: {
4503
+ component: AskAIBanner,
4504
+ properties: {
4505
+ onClick: {
4506
+ event: false,
4507
+ type: Function
4508
+ }
4509
+ }
4510
+ },
4432
4511
  CalendlyWidget: {
4433
4512
  component: CalendlyWidget,
4434
4513
  properties: {
@@ -4465,6 +4544,7 @@ function HelpdeskComponent({
4465
4544
  DrawerHeading,
4466
4545
  PicobotIframe: {
4467
4546
  component: PicobotIframe,
4547
+ methods: ["postMessage"],
4468
4548
  properties: {
4469
4549
  currentPath: {
4470
4550
  attribute: false
@@ -5709,18 +5789,18 @@ function Toolbar({
5709
5789
  return /*#__PURE__*/React__default.createElement(ThemeProvider, {
5710
5790
  theme: topbarTheme
5711
5791
  }, /*#__PURE__*/React__default.createElement(UiExtensionDataContext, null, /*#__PURE__*/React__default.createElement("div", {
5712
- className: styles["toolbar"],
5792
+ className: styles$1["toolbar"],
5713
5793
  "data-pendo": "toolbar-profile-support-wrapper"
5714
5794
  }, /*#__PURE__*/React__default.createElement(ToolbarButton, {
5715
5795
  "aria-label": `Open ${userName}’s profile drawer`,
5716
5796
  onClick: () => toggleDrawer(Profile),
5717
5797
  "data-pendo": "toolbar-profile",
5718
- className: styles["toolbar-button--avatar"]
5798
+ className: styles$1["toolbar-button--avatar"]
5719
5799
  }, /*#__PURE__*/React__default.createElement(Avatar, {
5720
5800
  env: env,
5721
5801
  url: userAvatarPath
5722
5802
  })), /*#__PURE__*/React__default.createElement(ToolbarButton, {
5723
- className: styles["toolbar-button--home"],
5803
+ className: styles$1["toolbar-button--home"],
5724
5804
  onClick: () => closeDrawer()
5725
5805
  }, /*#__PURE__*/React__default.createElement(Icon, {
5726
5806
  name: "toolbar.planningCenter",
@@ -5758,7 +5838,7 @@ const ToolbarButton = ({
5758
5838
  }) => {
5759
5839
  return /*#__PURE__*/React__default.createElement("button", {
5760
5840
  type: "button",
5761
- className: classnames(styles["toolbar-button"], className, current && styles["is-current"]),
5841
+ className: classnames(styles$1["toolbar-button"], className, current && styles$1["is-current"]),
5762
5842
  onClick: onClick,
5763
5843
  "data-toolbar-link": "true",
5764
5844
  ...restProps