@planningcenter/topbar 12.1.2 → 12.2.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$c = {"accessibility-toolbar":"accessibility-toolbar-jgjUG"};
30
+ var styles$d = {"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$c["accessibility-toolbar"]
42
+ className: styles$d["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$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"};
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"};
360
360
 
361
361
  function AnnouncementIcon() {
362
362
  return /*#__PURE__*/React.createElement("svg", {
363
- className: styles$b["announcement-icon"],
363
+ className: styles$c["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$b["announcement"], styles$b[`announcement--${variant !== null && variant !== void 0 ? variant : "platform"}`]),
488
+ className: classnames(styles$c["announcement"], styles$c[`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$b["announcement-content"],
497
+ className: styles$c["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$b.dismiss, isPromo && styles$b["dismiss--promo"]),
546
+ className: classnames(styles$c.dismiss, isPromo && styles$c["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$b["announcement"]
626
+ className: styles$c["announcement"]
627
627
  }, /*#__PURE__*/React.createElement(AnnouncementIcon, null), /*#__PURE__*/React.createElement("div", {
628
- className: styles$b["announcement-content"],
628
+ className: styles$c["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$b.dismiss,
639
+ className: styles$c.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$a = {"unbutton":"unbutton-lEbTR"};
1886
+ var styles$b = {"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$a.unbutton, className),
1895
+ className: classnames(styles$b.unbutton, className),
1896
1896
  style: {
1897
1897
  ...style
1898
1898
  },
@@ -1901,7 +1901,7 @@
1901
1901
  });
1902
1902
  }
1903
1903
 
1904
- var styles$9 = {"button":"button-XMbeQ","button-accounts":"button-accounts-nNh-z","chevron":"chevron-RRg9k","is-expanded":"is-expanded-zD0A0"};
1904
+ var styles$a = {"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$9.button, {
1920
- [styles$9["is-expanded"]]: expanded
1919
+ className: classnames(styles$a.button, {
1920
+ [styles$a["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$9["button-accounts"]
1929
+ className: styles$a["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$9.chevron,
1937
+ className: styles$a.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$8 = {"popup":"popup-sJ-Nv"};
2025
+ var styles$9 = {"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$7 = {"popup-root":"popup-root-SeL5u","popup":"popup-nQXYW","is-visible":"is-visible-3DAUP"};
2082
+ var styles$8 = {"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$7.popup, {
2091
- [styles$7["is-visible"]]: isVisible
2090
+ className: classnames(styles$8.popup, {
2091
+ [styles$8["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$7["popup-root"],
2099
+ className: styles$8["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$8.popup,
2139
+ className: styles$9.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$6 = {"route":"route--8BWe","is-active":"is-active-FsU9Y","apps-routes-separator":"apps-routes-separator-Nlm-N"};
3035
+ var styles$7 = {"route":"route--8BWe","is-active":"is-active-FsU9Y","apps-routes-separator":"apps-routes-separator-Nlm-N"};
3036
3036
 
3037
- 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"};
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"};
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$5.popup,
3056
+ className: styles$6.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$5["trigger-wrap"],
3200
+ className: styles$6["trigger-wrap"],
3201
3201
  "data-pendo": "topbar-org-switcher"
3202
3202
  }, /*#__PURE__*/React.createElement(Hoverable, {
3203
- className: classnames(styles$5["trigger"], {
3204
- [styles$5["is-visible"]]: userMenuVisible
3203
+ className: classnames(styles$6["trigger"], {
3204
+ [styles$6["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$5["trigger-orgname"]
3216
+ className: styles$6["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$6["apps-routes-separator"]
3273
+ className: styles$7["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$6["route"], className, active && styles$6["is-active"]),
3311
+ className: classnames(styles$7["route"], className, active && styles$7["is-active"]),
3312
3312
  ...nativeProps
3313
3313
  });
3314
3314
  };
3315
3315
 
3316
- var styles$4 = {"avatar":"avatar-tW-wn"};
3316
+ var styles$5 = {"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$4.avatar,
3326
+ className: styles$5.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$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"};
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"};
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$3["appmenu-list-a"], styles$3["appmenu-list-a--bottom"]),
3355
+ className: classnames(styles$4["appmenu-list-a"], styles$4["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$3["appmenu-close-button"],
3378
+ className: styles$4["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$3["appmenu-button"],
3459
+ className: styles$4["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$3["routes"]
3469
+ className: styles$4["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$3["appmenu-layer"],
3474
+ className: styles$4["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$3["appmenu-container"]
3493
+ className: styles$4["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$3["appmenu-list-a"], styles$3["appmenu-list-a--top"]),
3499
+ className: classnames(styles$4["appmenu-list-a"], styles$4["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$3["appmenu-scroll"]
3504
+ className: styles$4["appmenu-scroll"]
3505
3505
  }, /*#__PURE__*/React.createElement("ul", {
3506
3506
  "data-pendo": "app-switcher",
3507
- className: styles$3["appmenu-list"]
3507
+ className: styles$4["appmenu-list"]
3508
3508
  }, appsMenuFormatter(restProducts).map(({
3509
3509
  name
3510
3510
  }) => (/*#__PURE__*/React.createElement("li", {
3511
3511
  key: name,
3512
- className: styles$3["appmenu-list-li"]
3512
+ className: styles$4["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$3["appmenu-list-a"],
3518
+ className: styles$4["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$3["appmenu-list-li"]
3523
+ className: styles$4["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$3["current-route"], {
3530
- [styles$3["is-active"]]: routesMenuVisible
3529
+ className: classnames(styles$4["current-route"], {
3530
+ [styles$4["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$3["profile-button"],
3538
+ className: styles$4["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$3["route"], className, active && styles$3["is-active"]),
3554
+ className: classnames(styles$4["route"], className, active && styles$4["is-active"]),
3555
3555
  ...props
3556
3556
  }));
3557
3557
 
@@ -3690,7 +3690,7 @@ true;
3690
3690
  id: "topbar"
3691
3691
  };
3692
3692
 
3693
- var styles$2 = {"drawer-wrap":"drawer-wrap-J0rSL","is-visible":"is-visible-KTME8","drawer":"drawer-j7f4l"};
3693
+ var styles$3 = {"drawer-wrap":"drawer-wrap-J0rSL","is-visible":"is-visible-KTME8","drawer":"drawer-j7f4l"};
3694
3694
 
3695
3695
  function Drawer({
3696
3696
  children,
@@ -3698,7 +3698,7 @@ true;
3698
3698
  }) {
3699
3699
  return /*#__PURE__*/React.createElement("div", {
3700
3700
  id: id,
3701
- className: styles$2["drawer"]
3701
+ className: styles$3["drawer"]
3702
3702
  }, children);
3703
3703
  }
3704
3704
  function DrawerWrap({
@@ -3708,7 +3708,7 @@ true;
3708
3708
  ...props
3709
3709
  }) {
3710
3710
  return /*#__PURE__*/React.createElement("div", {
3711
- className: classnames(styles$2["drawer-wrap"], className, isVisible && styles$2["is-visible"]),
3711
+ className: classnames(styles$3["drawer-wrap"], className, isVisible && styles$3["is-visible"]),
3712
3712
  ...props
3713
3713
  }, children);
3714
3714
  }
@@ -3892,7 +3892,7 @@ true;
3892
3892
  }));
3893
3893
  };
3894
3894
 
3895
- 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"};
3895
+ 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"};
3896
3896
 
3897
3897
  const COLOR_MODES = [{
3898
3898
  label: "Light",
@@ -3912,11 +3912,11 @@ true;
3912
3912
  const updateStore = useUpdateStore();
3913
3913
  const [counter] = React.useState(() => COLOR_MODE_INSTANCE_COUNTER++);
3914
3914
  return /*#__PURE__*/React.createElement("fieldset", {
3915
- className: styles$1["color-mode-switcher"]
3915
+ className: styles$2["color-mode-switcher"]
3916
3916
  }, /*#__PURE__*/React.createElement("legend", {
3917
- className: styles$1["color-mode-switcher-label"]
3917
+ className: styles$2["color-mode-switcher-label"]
3918
3918
  }, "Appearance", " "), /*#__PURE__*/React.createElement("div", {
3919
- className: styles$1["color-mode-switcher-modes"]
3919
+ className: styles$2["color-mode-switcher-modes"]
3920
3920
  }, COLOR_MODES.map(({
3921
3921
  value,
3922
3922
  label
@@ -4187,20 +4187,67 @@ true;
4187
4187
  ...overrides
4188
4188
  });
4189
4189
 
4190
- 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"};
4190
+ 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"};
4191
4191
 
4192
4192
  const pcoUrl = pcoUrl$1;
4193
4193
 
4194
- // The route rides in the iframe URL fragment (`…/topbar#conversations/abc`),
4195
- // not the path, so updating it is a same-document navigation that doesn't
4196
- // reload the iframe, but also lets the route survive a forced reload (e.g.
4197
- // Turbo re-parenting the topbar).
4198
- function buildPicobotSrc(origin, path) {
4199
- const [rawPath, queryPart] = path.replace(/^\/+/, "").split("?", 2);
4200
- const safePath = rawPath.split("/").filter(segment => segment && segment !== "." && segment !== "..").join("/");
4201
- const fragment = queryPart !== undefined ? `${safePath}?${queryPart}` : safePath;
4202
- const base = new URL("topbar", origin).toString();
4203
- return fragment ? `${base}#${fragment}` : base;
4194
+ 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-"};
4195
+
4196
+ function AskAIBanner({
4197
+ onClick
4198
+ }) {
4199
+ return /*#__PURE__*/React.createElement("button", {
4200
+ className: styles.banner,
4201
+ onClick: () => onClick(),
4202
+ type: "button"
4203
+ }, /*#__PURE__*/React.createElement("span", {
4204
+ className: styles.content
4205
+ }, /*#__PURE__*/React.createElement(AskAIIcon, null), /*#__PURE__*/React.createElement("span", {
4206
+ className: styles.text
4207
+ }, /*#__PURE__*/React.createElement("span", {
4208
+ className: styles.title
4209
+ }, "Ask AI"), /*#__PURE__*/React.createElement("span", {
4210
+ className: styles.subtitle
4211
+ }, "Support answers tailored to you"))), /*#__PURE__*/React.createElement(tapestryReact.Icon, {
4212
+ className: styles.chevron,
4213
+ name: "general.rightChevron",
4214
+ size: "16px"
4215
+ }));
4216
+ }
4217
+ const GRADIENT_ID = "ask-ai-banner-icon-gradient";
4218
+ function AskAIIcon() {
4219
+ return /*#__PURE__*/React.createElement("span", {
4220
+ className: styles.icon
4221
+ }, /*#__PURE__*/React.createElement("svg", {
4222
+ className: styles.iconShape,
4223
+ viewBox: "0 0 32 32",
4224
+ "aria-hidden": "true"
4225
+ }, /*#__PURE__*/React.createElement("path", {
4226
+ 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",
4227
+ fill: `url(#${GRADIENT_ID})`
4228
+ }), /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement("linearGradient", {
4229
+ id: GRADIENT_ID,
4230
+ x1: "0",
4231
+ y1: "0",
4232
+ x2: "38.0356",
4233
+ y2: "21.1413",
4234
+ gradientUnits: "userSpaceOnUse"
4235
+ }, /*#__PURE__*/React.createElement("stop", {
4236
+ stopColor: "#49D4BB"
4237
+ }), /*#__PURE__*/React.createElement("stop", {
4238
+ offset: "0.352694",
4239
+ stopColor: "#7CA8FE"
4240
+ }), /*#__PURE__*/React.createElement("stop", {
4241
+ offset: "0.656242",
4242
+ stopColor: "#B883E2"
4243
+ }), /*#__PURE__*/React.createElement("stop", {
4244
+ offset: "1",
4245
+ stopColor: "#F28B54"
4246
+ })))), /*#__PURE__*/React.createElement(tapestryReact.Icon, {
4247
+ className: styles.iconWand,
4248
+ name: "general.magicWand",
4249
+ size: "18px"
4250
+ }));
4204
4251
  }
4205
4252
 
4206
4253
  // The article heading lives in the deepest populated hierarchy level (lvl0 is
@@ -4354,6 +4401,74 @@ true;
4354
4401
  }));
4355
4402
  };
4356
4403
 
4404
+ // The route rides in the iframe URL fragment (`…/topbar#conversations/abc`),
4405
+ // not the path, so updating it is a same-document navigation that doesn't
4406
+ // reload the iframe, but also lets the route survive a forced reload (e.g.
4407
+ // Turbo re-parenting the topbar).
4408
+ function buildPicobotSrc(origin, path) {
4409
+ const [rawPath, queryPart] = path.replace(/^\/+/, "").split("?", 2);
4410
+ const safePath = rawPath.split("/").filter(segment => segment && segment !== "." && segment !== "..").join("/");
4411
+ const fragment = queryPart !== undefined ? `${safePath}?${queryPart}` : safePath;
4412
+ const base = new URL("topbar", origin).toString();
4413
+ return fragment ? `${base}#${fragment}` : base;
4414
+ }
4415
+
4416
+ function createPicobotIframe(picobotOrigin) {
4417
+ return /*#__PURE__*/React.forwardRef(function PicobotIframe({
4418
+ currentPath: iframePath,
4419
+ onChangePath: onIframeChangePath,
4420
+ onMessage
4421
+ }, ref) {
4422
+ const iframeRef = React.useRef(null);
4423
+ // Keep the fragment in sync in both directions—external opens (deeplink /
4424
+ // Contact support) and picobot's own NEW_ROUTE_RENDERED reports—so it
4425
+ // always reflects the live conversation. See buildPicobotSrc.
4426
+ const [loadedPath, setLoadedPath] = React.useState(iframePath || "");
4427
+ React.useEffect(function subscribeToGuestMessages() {
4428
+ if (!onIframeChangePath && !onMessage) return undefined;
4429
+ function handleGuestMessage(e) {
4430
+ var _a, _b;
4431
+ if (e.origin !== picobotOrigin) return;
4432
+ if (!e.source || !iframeRef.current) return;
4433
+ if (e.source !== iframeRef.current.contentWindow) return;
4434
+ if (((_a = e.data) === null || _a === void 0 ? void 0 : _a.type) === "NEW_ROUTE_RENDERED" && onIframeChangePath) {
4435
+ const reportedPath = String((_b = e.data.payload) !== null && _b !== void 0 ? _b : "");
4436
+ setLoadedPath(reportedPath);
4437
+ onIframeChangePath(reportedPath);
4438
+ }
4439
+ if (onMessage) onMessage(e.data);
4440
+ }
4441
+ window.addEventListener("message", handleGuestMessage);
4442
+ return () => window.removeEventListener("message", handleGuestMessage);
4443
+ }, [onIframeChangePath, onMessage]);
4444
+ React.useEffect(function syncLoadedPathFromProp() {
4445
+ setLoadedPath(iframePath || "");
4446
+ }, [iframePath]);
4447
+ // A one-way channel for sending messages to picobot. Topbar just
4448
+ // forwards the envelope to the iframe and holds no message semantics of
4449
+ // its own—the consumer decides what to send and when.
4450
+ React.useImperativeHandle(ref, () => ({
4451
+ postMessage(message) {
4452
+ var _a, _b;
4453
+ (_b = (_a = iframeRef.current) === null || _a === void 0 ? void 0 : _a.contentWindow) === null || _b === void 0 ? void 0 : _b.postMessage(message, picobotOrigin);
4454
+ }
4455
+ }), []);
4456
+ const iframeSrc = buildPicobotSrc(picobotOrigin, loadedPath);
4457
+ return /*#__PURE__*/React.createElement("iframe", {
4458
+ ref: iframeRef,
4459
+ src: iframeSrc,
4460
+ allow: "clipboard-write",
4461
+ style: {
4462
+ border: 0,
4463
+ flex: 1,
4464
+ height: "100%",
4465
+ width: "100%"
4466
+ },
4467
+ title: "Picobot"
4468
+ });
4469
+ });
4470
+ }
4471
+
4357
4472
  const {
4358
4473
  LoadingIndicator: LoadingIndicator$1,
4359
4474
  StackView: StackView$1
@@ -4379,52 +4494,7 @@ true;
4379
4494
  helpdeskConfig,
4380
4495
  onChangePath
4381
4496
  }) {
4382
- const PicobotIframe = React.useMemo(() => {
4383
- const picobotOrigin = pcoUrl(env)("picobot");
4384
- return function PicobotIframe({
4385
- currentPath: iframePath,
4386
- onChangePath: onIframeChangePath,
4387
- onMessage
4388
- }) {
4389
- const ref = React.useRef(null);
4390
- // Keep the fragment in sync in both directions—external opens (deeplink /
4391
- // Contact support) and picobot's own NEW_ROUTE_RENDERED reports—so it
4392
- // always reflects the live conversation. See buildPicobotSrc.
4393
- const [loadedPath, setLoadedPath] = React.useState(iframePath || "");
4394
- React.useEffect(() => {
4395
- if (!onIframeChangePath && !onMessage) return undefined;
4396
- const handler = e => {
4397
- var _a, _b;
4398
- if (e.origin !== picobotOrigin) return;
4399
- if (!e.source || !ref.current) return;
4400
- if (e.source !== ref.current.contentWindow) return;
4401
- if (((_a = e.data) === null || _a === void 0 ? void 0 : _a.type) === "NEW_ROUTE_RENDERED" && onIframeChangePath) {
4402
- const reportedPath = String((_b = e.data.payload) !== null && _b !== void 0 ? _b : "");
4403
- setLoadedPath(reportedPath);
4404
- onIframeChangePath(reportedPath);
4405
- }
4406
- if (onMessage) onMessage(e.data);
4407
- };
4408
- window.addEventListener("message", handler);
4409
- return () => window.removeEventListener("message", handler);
4410
- }, [onIframeChangePath, onMessage]);
4411
- React.useEffect(() => {
4412
- setLoadedPath(iframePath || "");
4413
- }, [iframePath]);
4414
- const iframeSrc = buildPicobotSrc(picobotOrigin, loadedPath);
4415
- return /*#__PURE__*/React.createElement("iframe", {
4416
- ref: ref,
4417
- src: iframeSrc,
4418
- style: {
4419
- border: 0,
4420
- flex: 1,
4421
- height: "100%",
4422
- width: "100%"
4423
- },
4424
- title: "Picobot"
4425
- });
4426
- };
4427
- }, [env]);
4497
+ const PicobotIframe = React.useMemo(() => createPicobotIframe(pcoUrl(env)("picobot")), [env]);
4428
4498
  return /*#__PURE__*/React.createElement(addOns.UiExtensionFirstPartyComponent, {
4429
4499
  grow: 1,
4430
4500
  display: "flex",
@@ -4439,6 +4509,15 @@ true;
4439
4509
  spacing: 1
4440
4510
  }, /*#__PURE__*/React.createElement(DrawerHeading, null, "Help and support"), /*#__PURE__*/React.createElement(LoadingIndicator$1, null)))),
4441
4511
  additionalComponents: {
4512
+ AskAIBanner: {
4513
+ component: AskAIBanner,
4514
+ properties: {
4515
+ onClick: {
4516
+ event: false,
4517
+ type: Function
4518
+ }
4519
+ }
4520
+ },
4442
4521
  CalendlyWidget: {
4443
4522
  component: CalendlyWidget,
4444
4523
  properties: {
@@ -4475,6 +4554,7 @@ true;
4475
4554
  DrawerHeading,
4476
4555
  PicobotIframe: {
4477
4556
  component: PicobotIframe,
4557
+ methods: ["postMessage"],
4478
4558
  properties: {
4479
4559
  currentPath: {
4480
4560
  attribute: false
@@ -5719,18 +5799,18 @@ true;
5719
5799
  return /*#__PURE__*/React.createElement(tapestryReact.ThemeProvider, {
5720
5800
  theme: topbarTheme
5721
5801
  }, /*#__PURE__*/React.createElement(addOns.UiExtensionDataContext, null, /*#__PURE__*/React.createElement("div", {
5722
- className: styles["toolbar"],
5802
+ className: styles$1["toolbar"],
5723
5803
  "data-pendo": "toolbar-profile-support-wrapper"
5724
5804
  }, /*#__PURE__*/React.createElement(ToolbarButton, {
5725
5805
  "aria-label": `Open ${userName}’s profile drawer`,
5726
5806
  onClick: () => toggleDrawer(Profile),
5727
5807
  "data-pendo": "toolbar-profile",
5728
- className: styles["toolbar-button--avatar"]
5808
+ className: styles$1["toolbar-button--avatar"]
5729
5809
  }, /*#__PURE__*/React.createElement(Avatar, {
5730
5810
  env: env,
5731
5811
  url: userAvatarPath
5732
5812
  })), /*#__PURE__*/React.createElement(ToolbarButton, {
5733
- className: styles["toolbar-button--home"],
5813
+ className: styles$1["toolbar-button--home"],
5734
5814
  onClick: () => closeDrawer()
5735
5815
  }, /*#__PURE__*/React.createElement(tapestryReact.Icon, {
5736
5816
  name: "toolbar.planningCenter",
@@ -5768,7 +5848,7 @@ true;
5768
5848
  }) => {
5769
5849
  return /*#__PURE__*/React.createElement("button", {
5770
5850
  type: "button",
5771
- className: classnames(styles["toolbar-button"], className, current && styles["is-current"]),
5851
+ className: classnames(styles$1["toolbar-button"], className, current && styles$1["is-current"]),
5772
5852
  onClick: onClick,
5773
5853
  "data-toolbar-link": "true",
5774
5854
  ...restProps