@planningcenter/topbar 12.4.1 → 12.5.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.
@@ -1,8 +1,8 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@planningcenter/tapestry'), require('react'), require('@planningcenter/url'), require('@planningcenter/icons/paths/general'), require('@planningcenter/jolt-client'), require('use-sync-external-store/shim'), require('react/jsx-runtime'), require('@planningcenter/tapestry-react'), require('@planningcenter/add-ons'), require('@planningcenter/icons/paths/church-center'), require('@planningcenter/icons/paths/people'), require('@planningcenter/icons/paths/toolbar'), require('react-calendly'), require('algoliasearch'), require('react-instantsearch-core'), require('react-transition-group'), require('@planningcenter/datetime-fmt')) :
3
- typeof define === 'function' && define.amd ? define(['exports', '@planningcenter/tapestry', 'react', '@planningcenter/url', '@planningcenter/icons/paths/general', '@planningcenter/jolt-client', 'use-sync-external-store/shim', 'react/jsx-runtime', '@planningcenter/tapestry-react', '@planningcenter/add-ons', '@planningcenter/icons/paths/church-center', '@planningcenter/icons/paths/people', '@planningcenter/icons/paths/toolbar', 'react-calendly', 'algoliasearch', 'react-instantsearch-core', 'react-transition-group', '@planningcenter/datetime-fmt'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.PLANNINGCENTER = global.PLANNINGCENTER || {}, global.PLANNINGCENTER.Topbar = {}), global.tapestry, global.react, global.pcoUrl, global.general, global.Jolt, global.shim, null, global.tapestryReact, global.addOns, global.churchCenter, global.people, global.toolbar, global.reactCalendly, global.algoliasearch, global.reactInstantsearchCore, global.reactTransitionGroup, global.datetimeFmt));
5
- })(this, (function (exports, tapestry, React, pcoUrl$1, general, Jolt, shim, jsxRuntime, tapestryReact, addOns, churchCenter, people, toolbar, reactCalendly, algoliasearch, reactInstantsearchCore, reactTransitionGroup, datetimeFmt) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@planningcenter/tapestry'), require('react'), require('@planningcenter/url'), require('@planningcenter/icons/paths/general'), require('@planningcenter/jolt-client'), require('use-sync-external-store/shim'), require('react/jsx-runtime'), require('@planningcenter/icons/paths/toolbar'), require('@planningcenter/datetime-fmt'), require('pluralize'), require('@planningcenter/icons/paths/logomark'), require('@planningcenter/tapestry-react'), require('@planningcenter/add-ons'), require('@planningcenter/icons/paths/church-center'), require('@planningcenter/icons/paths/people'), require('react-calendly'), require('algoliasearch'), require('react-instantsearch-core'), require('react-transition-group')) :
3
+ typeof define === 'function' && define.amd ? define(['exports', '@planningcenter/tapestry', 'react', '@planningcenter/url', '@planningcenter/icons/paths/general', '@planningcenter/jolt-client', 'use-sync-external-store/shim', 'react/jsx-runtime', '@planningcenter/icons/paths/toolbar', '@planningcenter/datetime-fmt', 'pluralize', '@planningcenter/icons/paths/logomark', '@planningcenter/tapestry-react', '@planningcenter/add-ons', '@planningcenter/icons/paths/church-center', '@planningcenter/icons/paths/people', 'react-calendly', 'algoliasearch', 'react-instantsearch-core', 'react-transition-group'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.PLANNINGCENTER = global.PLANNINGCENTER || {}, global.PLANNINGCENTER.Topbar = {}), global.tapestry, global.react, global.pcoUrl, global.general, global.Jolt, global.shim, null, global.toolbar, global.datetimeFmt, global.pluralize, global.logomark, global.tapestryReact, global.addOns, global.churchCenter, global.people, global.reactCalendly, global.algoliasearch, global.reactInstantsearchCore, global.reactTransitionGroup));
5
+ })(this, (function (exports, tapestry, React, pcoUrl$1, general, Jolt, shim, jsxRuntime, toolbar, datetimeFmt, pluralize, logomarks, tapestryReact, addOns, churchCenter, people, reactCalendly, algoliasearch, reactInstantsearchCore, reactTransitionGroup) { 'use strict';
6
6
 
7
7
  function _interopNamespaceDefault(e) {
8
8
  var n = Object.create(null);
@@ -23,11 +23,12 @@
23
23
 
24
24
  var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
25
25
  var general__namespace = /*#__PURE__*/_interopNamespaceDefault(general);
26
+ var toolbar__namespace = /*#__PURE__*/_interopNamespaceDefault(toolbar);
27
+ var logomarks__namespace = /*#__PURE__*/_interopNamespaceDefault(logomarks);
26
28
  var churchCenter__namespace = /*#__PURE__*/_interopNamespaceDefault(churchCenter);
27
29
  var people__namespace = /*#__PURE__*/_interopNamespaceDefault(people);
28
- var toolbar__namespace = /*#__PURE__*/_interopNamespaceDefault(toolbar);
29
30
 
30
- var styles$m = {"accessibility-toolbar":"accessibility-toolbar-jgjUG"};
31
+ var styles$u = {"accessibility-toolbar":"accessibility-toolbar-jgjUG"};
31
32
 
32
33
  const AccessibilityToolbar = ({
33
34
  children
@@ -39,7 +40,7 @@
39
40
  (_a = document.getElementById("main-content")) === null || _a === void 0 ? void 0 : _a.focus();
40
41
  };
41
42
  return /*#__PURE__*/React.createElement("div", {
42
- className: styles$m["accessibility-toolbar"]
43
+ className: styles$u["accessibility-toolbar"]
43
44
  }, /*#__PURE__*/React.createElement(tapestry.Link, {
44
45
  href: "#main-content",
45
46
  kind: "primary",
@@ -358,11 +359,11 @@
358
359
  fill: fill
359
360
  })));
360
361
 
361
- var styles$l = {"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"};
362
+ var styles$t = {"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"};
362
363
 
363
364
  function AnnouncementIcon() {
364
365
  return /*#__PURE__*/React.createElement("svg", {
365
- className: styles$l["announcement-icon"],
366
+ className: styles$t["announcement-icon"],
366
367
  width: "16",
367
368
  height: "16",
368
369
  viewBox: "0 0 16 16",
@@ -487,7 +488,7 @@
487
488
  } = this.props;
488
489
  const isPromo = variant === "promo";
489
490
  return /*#__PURE__*/React.createElement("div", {
490
- className: classnames(styles$l["announcement"], styles$l[`announcement--${variant !== null && variant !== void 0 ? variant : "platform"}`]),
491
+ className: classnames(styles$t["announcement"], styles$t[`announcement--${variant !== null && variant !== void 0 ? variant : "platform"}`]),
491
492
  "data-announcement-variant": variant !== null && variant !== void 0 ? variant : "platform",
492
493
  style: isPromo ? {
493
494
  backgroundImage: promoBackgroundUrl,
@@ -496,7 +497,7 @@
496
497
  backgroundSize: "cover"
497
498
  } : undefined
498
499
  }, !isPromo && /*#__PURE__*/React.createElement(AnnouncementIcon, null), /*#__PURE__*/React.createElement("div", {
499
- className: styles$l["announcement-content"],
500
+ className: styles$t["announcement-content"],
500
501
  style: style,
501
502
  ...platformProps
502
503
  }));
@@ -545,7 +546,7 @@
545
546
  const isPromo = variant === "promo";
546
547
  return /*#__PURE__*/React.createElement("button", {
547
548
  type: "button",
548
- className: classnames(styles$l.dismiss, isPromo && styles$l["dismiss--promo"]),
549
+ className: classnames(styles$t.dismiss, isPromo && styles$t["dismiss--promo"]),
549
550
  ...props
550
551
  }, /*#__PURE__*/React.createElement(X, {
551
552
  fill: isPromo ? "currentColor" : "white",
@@ -625,9 +626,9 @@
625
626
  ...platformProps
626
627
  } = this.props;
627
628
  return /*#__PURE__*/React.createElement("div", {
628
- className: styles$l["announcement"]
629
+ className: styles$t["announcement"]
629
630
  }, /*#__PURE__*/React.createElement(AnnouncementIcon, null), /*#__PURE__*/React.createElement("div", {
630
- className: styles$l["announcement-content"],
631
+ className: styles$t["announcement-content"],
631
632
  style: style,
632
633
  ...platformProps
633
634
  }));
@@ -638,7 +639,7 @@
638
639
  }) {
639
640
  return /*#__PURE__*/React.createElement("button", {
640
641
  type: "button",
641
- className: styles$l.dismiss,
642
+ className: styles$t.dismiss,
642
643
  ...props
643
644
  }, /*#__PURE__*/React.createElement(X, {
644
645
  fill: "white",
@@ -1760,7 +1761,7 @@
1760
1761
  })) : (/*#__PURE__*/React.createElement("div", null, "appName not supported")));
1761
1762
  }
1762
1763
 
1763
- var styles$k = {"icon-slot":"icon-slot-m3ZIk","name":"name-UNqbW"};
1764
+ var styles$s = {"icon-slot":"icon-slot-m3ZIk","name":"name-UNqbW"};
1764
1765
 
1765
1766
  const AppRow = ({
1766
1767
  appName,
@@ -1769,24 +1770,24 @@
1769
1770
  }) => {
1770
1771
  if (appName === "Accounts") {
1771
1772
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("span", {
1772
- className: styles$k["icon-slot"]
1773
+ className: styles$s["icon-slot"]
1773
1774
  }, /*#__PURE__*/React.createElement(MonoAppIcon, {
1774
1775
  appName: "Accounts",
1775
1776
  colors: colors,
1776
1777
  size: iconSize
1777
1778
  })), /*#__PURE__*/React.createElement("span", {
1778
- className: styles$k.name
1779
+ className: styles$s.name
1779
1780
  }, "Account settings"));
1780
1781
  }
1781
1782
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ColorAppIcon, {
1782
1783
  appName: appName.replace(/[\s-]/, ""),
1783
1784
  size: iconSize
1784
1785
  }), /*#__PURE__*/React.createElement("span", {
1785
- className: styles$k.name
1786
+ className: styles$s.name
1786
1787
  }, appName));
1787
1788
  };
1788
1789
 
1789
- var styles$j = {"button":"button-XMbeQ","label":"label-884of","chevron":"chevron-RRg9k"};
1790
+ var styles$r = {"button":"button-XMbeQ","label":"label-884of","chevron":"chevron-RRg9k"};
1790
1791
 
1791
1792
  const AppsButton = /*#__PURE__*/React.forwardRef(({
1792
1793
  appName,
@@ -1798,10 +1799,10 @@
1798
1799
  ...restProps,
1799
1800
  ref: ref,
1800
1801
  "aria-label": `App switcher: ${appName}`,
1801
- className: styles$j.button,
1802
+ className: styles$r.button,
1802
1803
  kind: "neutral-inline",
1803
1804
  label: /*#__PURE__*/React.createElement("span", {
1804
- className: styles$j.label
1805
+ className: styles$r.label
1805
1806
  }, isAccounts ? "Account settings" : appName),
1806
1807
  prefix: isAccounts ? (/*#__PURE__*/React.createElement(MonoAppIcon, {
1807
1808
  appName: "Accounts",
@@ -1812,13 +1813,13 @@
1812
1813
  size: 22
1813
1814
  })),
1814
1815
  suffix: /*#__PURE__*/React.createElement(DisclosureChevronIcon, {
1815
- className: `${styles$j.chevron} symbol`
1816
+ className: `${styles$r.chevron} symbol`
1816
1817
  })
1817
1818
  });
1818
1819
  });
1819
1820
  AppsButton.displayName = "AppsButton";
1820
1821
 
1821
- var styles$i = {"nav":"nav-y-6ML","popover-content":"popover-content-jOAAY","list":"list-jUxvp","link":"link-LMp2h","current":"current-4U4VL","accounts-item":"accounts-item-erJW0","accounts-link":"accounts-link-4jwPW"};
1822
+ var styles$q = {"nav":"nav-y-6ML","popover-content":"popover-content-jOAAY","list":"list-jUxvp","link":"link-LMp2h","current":"current-4U4VL","accounts-item":"accounts-item-erJW0","accounts-link":"accounts-link-4jwPW"};
1822
1823
 
1823
1824
  const AppsMenu = ({
1824
1825
  appName,
@@ -1839,8 +1840,8 @@
1839
1840
  }, /*#__PURE__*/React.createElement("a", {
1840
1841
  "aria-current": isCurrent ? "page" : undefined,
1841
1842
  "aria-label": name,
1842
- className: classnames(styles$i.link, {
1843
- [styles$i.current]: isCurrent
1843
+ className: classnames(styles$q.link, {
1844
+ [styles$q.current]: isCurrent
1844
1845
  }),
1845
1846
  "data-pendo": `app-switcher--change-app--${name}`,
1846
1847
  "data-turbolinks": false,
@@ -1856,22 +1857,22 @@
1856
1857
  colors: colors
1857
1858
  })), /*#__PURE__*/React.createElement(tapestry.PopoverContent, {
1858
1859
  "aria-label": "Switch app",
1859
- className: styles$i["popover-content"],
1860
+ className: styles$q["popover-content"],
1860
1861
  placement: "bottom start"
1861
1862
  }, /*#__PURE__*/React.createElement("nav", {
1862
- className: styles$i.nav,
1863
+ className: styles$q.nav,
1863
1864
  "data-pendo": "app-switcher"
1864
1865
  }, /*#__PURE__*/React.createElement("ul", {
1865
- className: styles$i.list,
1866
+ className: styles$q.list,
1866
1867
  role: "list"
1867
1868
  }, homeProduct && renderProductLink(homeProduct.name), restProducts.map(({
1868
1869
  name
1869
1870
  }) => renderProductLink(name)), accountsProduct && (/*#__PURE__*/React.createElement("li", {
1870
- className: styles$i["accounts-item"]
1871
+ className: styles$q["accounts-item"]
1871
1872
  }, /*#__PURE__*/React.createElement("a", {
1872
1873
  "aria-current": appName === accountsProduct.name ? "page" : undefined,
1873
1874
  "aria-label": "Account settings",
1874
- className: classnames(styles$i.link, styles$i["accounts-link"]),
1875
+ className: classnames(styles$q.link, styles$q["accounts-link"]),
1875
1876
  "data-pendo": "app-switcher--change-app--Accounts",
1876
1877
  "data-turbolinks": false,
1877
1878
  href: pcoUrl$1(env)("accounts") + getAppsSwitchProductPath(accountsProduct.name)
@@ -2079,7 +2080,7 @@
2079
2080
  })) : (/*#__PURE__*/React.createElement("div", null, "appName not supported"));
2080
2081
  }
2081
2082
 
2082
- var styles$h = {"unbutton":"unbutton-lEbTR"};
2083
+ var styles$p = {"unbutton":"unbutton-lEbTR"};
2083
2084
 
2084
2085
  function Unbutton({
2085
2086
  className,
@@ -2088,7 +2089,7 @@
2088
2089
  ...nativeProps
2089
2090
  }) {
2090
2091
  return /*#__PURE__*/React.createElement("button", {
2091
- className: classnames(styles$h.unbutton, className),
2092
+ className: classnames(styles$p.unbutton, className),
2092
2093
  style: {
2093
2094
  ...style
2094
2095
  },
@@ -2097,7 +2098,7 @@
2097
2098
  });
2098
2099
  }
2099
2100
 
2100
- var styles$g = {"button":"button-wsipc","button-accounts":"button-accounts-zQmBM","chevron":"chevron-obyBF","is-expanded":"is-expanded-PoCQ9"};
2101
+ var styles$o = {"button":"button-wsipc","button-accounts":"button-accounts-zQmBM","chevron":"chevron-obyBF","is-expanded":"is-expanded-PoCQ9"};
2101
2102
 
2102
2103
  const LegacyAppsButton = ({
2103
2104
  appName,
@@ -2112,8 +2113,8 @@
2112
2113
  "aria-haspopup": "true",
2113
2114
  "aria-label": `App switcher: ${appName}`,
2114
2115
  onClick: onClick,
2115
- className: classnames(styles$g.button, {
2116
- [styles$g["is-expanded"]]: expanded
2116
+ className: classnames(styles$o.button, {
2117
+ [styles$o["is-expanded"]]: expanded
2117
2118
  }),
2118
2119
  type: "button",
2119
2120
  style: style,
@@ -2122,7 +2123,7 @@
2122
2123
  appName: "Accounts",
2123
2124
  colors: colors
2124
2125
  }), /*#__PURE__*/React.createElement("div", {
2125
- className: styles$g["button-accounts"]
2126
+ className: styles$o["button-accounts"]
2126
2127
  }, "Account settings"))) : (/*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ColorAppIcon, {
2127
2128
  appName: appName.replace(/[\s-]/, "")
2128
2129
  }), /*#__PURE__*/React.createElement(MonoAppName, {
@@ -2130,7 +2131,7 @@
2130
2131
  key: "mono-app-name",
2131
2132
  size: 24
2132
2133
  }))), /*#__PURE__*/React.createElement(DisclosureChevronIcon, {
2133
- className: styles$g.chevron,
2134
+ className: styles$o.chevron,
2134
2135
  key: "disclosure-chevron-icon"
2135
2136
  }));
2136
2137
  };
@@ -2263,7 +2264,7 @@
2263
2264
  }
2264
2265
  }
2265
2266
 
2266
- var styles$f = {"popup-root":"popup-root-SeL5u","popup":"popup-nQXYW","is-visible":"is-visible-3DAUP"};
2267
+ var styles$n = {"popup-root":"popup-root-SeL5u","popup":"popup-nQXYW","is-visible":"is-visible-3DAUP"};
2267
2268
 
2268
2269
  const Popup = ({
2269
2270
  className,
@@ -2271,8 +2272,8 @@
2271
2272
  isVisible,
2272
2273
  ...nativeProps
2273
2274
  }) => (/*#__PURE__*/React.createElement(C, {
2274
- className: classnames(styles$f.popup, {
2275
- [styles$f["is-visible"]]: isVisible
2275
+ className: classnames(styles$n.popup, {
2276
+ [styles$n["is-visible"]]: isVisible
2276
2277
  }, className),
2277
2278
  ...nativeProps
2278
2279
  }));
@@ -2280,11 +2281,11 @@
2280
2281
  const PopupRoot = ({
2281
2282
  ...nativeProps
2282
2283
  }) => (/*#__PURE__*/React.createElement("div", {
2283
- className: styles$f["popup-root"],
2284
+ className: styles$n["popup-root"],
2284
2285
  ...nativeProps
2285
2286
  }));
2286
2287
 
2287
- var styles$e = {"popup":"popup-bVhSa"};
2288
+ var styles$m = {"popup":"popup-bVhSa"};
2288
2289
 
2289
2290
  const LegacyAppsMenu = ({
2290
2291
  appName,
@@ -2322,7 +2323,7 @@
2322
2323
  cleanup: !visible,
2323
2324
  component: Outsider,
2324
2325
  onOutsideClick: toggle,
2325
- className: styles$e.popup,
2326
+ className: styles$m.popup,
2326
2327
  isVisible: visible
2327
2328
  }, /*#__PURE__*/React.createElement("menu", {
2328
2329
  ref: menuRef,
@@ -3232,34 +3233,117 @@ true;
3232
3233
  });
3233
3234
  }, []);
3234
3235
 
3236
+ const collections = {
3237
+ general: general__namespace,
3238
+ toolbar: toolbar__namespace
3239
+ };
3240
+ const paths = collections;
3241
+ function Icon({
3242
+ name,
3243
+ size = 16,
3244
+ style,
3245
+ theme,
3246
+ title,
3247
+ ...props
3248
+ }) {
3249
+ const [collection, symbol] = name.split(".");
3250
+ return /*#__PURE__*/React.createElement("svg", {
3251
+ "aria-hidden": title ? undefined : true,
3252
+ fill: "currentColor",
3253
+ height: size,
3254
+ role: title ? "img" : undefined,
3255
+ style: {
3256
+ color: theme && `var(${theme})`,
3257
+ flexShrink: 0,
3258
+ ...style
3259
+ },
3260
+ viewBox: "0 0 16 16",
3261
+ width: size,
3262
+ ...props
3263
+ }, title && /*#__PURE__*/React.createElement("title", null, title), /*#__PURE__*/React.createElement("path", {
3264
+ d: paths[collection][symbol]
3265
+ }));
3266
+ }
3267
+
3268
+ const SEARCHABLE_PRODUCTS = [{
3269
+ appName: "Calendar",
3270
+ slug: "calendar"
3271
+ }, {
3272
+ appName: "Check-Ins",
3273
+ slug: "check-ins"
3274
+ }, {
3275
+ appName: "Giving",
3276
+ slug: "giving"
3277
+ }, {
3278
+ appName: "Groups",
3279
+ slug: "groups"
3280
+ }, {
3281
+ appName: "People",
3282
+ slug: "people"
3283
+ }, {
3284
+ appName: "Publishing",
3285
+ slug: "publishing"
3286
+ }, {
3287
+ appName: "Registrations",
3288
+ slug: "registrations"
3289
+ }, {
3290
+ appName: "Services",
3291
+ slug: "services"
3292
+ }];
3293
+ const KEYBOARD_SHORTCUTS = {
3294
+ copyLink: {
3295
+ key: "c",
3296
+ label: "Copy link",
3297
+ modifierKey: true
3298
+ },
3299
+ openInNewTab: {
3300
+ label: "Open in new tab"},
3301
+ openSearch: {
3302
+ key: "k",
3303
+ label: "Open search",
3304
+ modifierKey: true
3305
+ },
3306
+ select: {
3307
+ label: "Select",
3308
+ modifierKey: false,
3309
+ next: "ArrowDown",
3310
+ previous: "ArrowUp"
3311
+ }
3312
+ };
3313
+
3235
3314
  const isMac = () => /Mac|iPhone|iPad|iPod/.test(navigator.platform);
3236
3315
  const hasCommandKey = event => isMac() ? event.metaKey : event.ctrlKey;
3237
- const commandKeyLabel = () => isMac() ? "⌘" : "Ctrl+";
3238
- const isSearchShortcut = event => event.key.toLowerCase() === "k" && !event.altKey && !event.shiftKey && hasCommandKey(event);
3316
+ const matchesShortcut = (shortcut, event) => event.key.toLowerCase() === shortcut.key && !event.altKey && !event.shiftKey && hasCommandKey(event) === shortcut.modifierKey;
3317
+ const isSearchShortcut = event => matchesShortcut(KEYBOARD_SHORTCUTS.openSearch, event);
3239
3318
  // Products opened their own search with `/` before this one replaced it.
3240
3319
  const isLegacySearchShortcut = event => event.key === "/" && !event.altKey && !event.ctrlKey && !event.metaKey && !isTypingIn(event.target);
3241
- const isCopyShortcut = event => event.key.toLowerCase() === "c" && !event.altKey && !event.shiftKey && hasCommandKey(event);
3320
+ const isCopyShortcut = event => matchesShortcut(KEYBOARD_SHORTCUTS.copyLink, event);
3242
3321
  const isTypingIn = target => target instanceof Element && target.closest('input, select, textarea, [contenteditable]:not([contenteditable="false"])') !== null;
3243
3322
  const isTypingKey = event => event.key.length === 1 && event.key !== " " && !event.altKey && !event.ctrlKey && !event.metaKey;
3244
3323
  const verticalStep = key => ({
3245
- ArrowDown: 1,
3246
- ArrowUp: -1
3324
+ [KEYBOARD_SHORTCUTS.select.next]: 1,
3325
+ [KEYBOARD_SHORTCUTS.select.previous]: -1
3247
3326
  })[key];
3248
3327
  const horizontalStep = key => ({
3249
3328
  ArrowLeft: -1,
3250
3329
  ArrowRight: 1
3251
3330
  })[key];
3252
3331
 
3332
+ var styles$l = {"searchButton":"searchButton-fYa5-"};
3333
+
3253
3334
  function SearchButton({
3335
+ mobile = false,
3254
3336
  onClick
3255
3337
  }) {
3256
3338
  return /*#__PURE__*/React.createElement("button", {
3257
- "aria-keyshortcuts": `${isMac() ? "Meta+K" : "Control+K"} /`,
3339
+ "aria-keyshortcuts": mobile ? undefined : `${isMac() ? "Meta" : "Control"}+${KEYBOARD_SHORTCUTS.openSearch.key.toUpperCase()} /`,
3258
3340
  "aria-label": "Search",
3341
+ className: styles$l.searchButton,
3259
3342
  onClick: onClick,
3260
3343
  type: "button"
3261
- }, /*#__PURE__*/React.createElement(Spyglass, {
3262
- fill: "currentColor"
3344
+ }, /*#__PURE__*/React.createElement(Icon, {
3345
+ name: "general.search",
3346
+ size: mobile ? 18 : 14
3263
3347
  }));
3264
3348
  }
3265
3349
 
@@ -3574,16 +3658,16 @@ true;
3574
3658
  const ENTRY_VERSION = 3;
3575
3659
  const MAX_ENTRIES = 50;
3576
3660
  const MAX_TEXT_LENGTH = 200;
3577
- const PRODUCTS = ["accounts", "calendar", "check-ins", "giving", "groups", "home", "login", "people", "publishing", "registrations", "services"];
3661
+ const PRODUCTS$1 = ["accounts", "calendar", "check-ins", "giving", "groups", "home", "login", "people", "publishing", "registrations", "services"];
3578
3662
  // Login has no pages worth returning to.
3579
- const APPS = PRODUCTS.filter(product => product !== "login");
3663
+ const APPS = PRODUCTS$1.filter(product => product !== "login");
3580
3664
  function isId(value) {
3581
3665
  return value !== "" && Array.from(value).every(character => character >= "0" && character <= "9");
3582
3666
  }
3583
3667
  // A PCRL looks like `<product>/v2/<resource_type>/<id>`.
3584
3668
  function isPcrl(value) {
3585
3669
  const segments = value.split("/");
3586
- return segments.length === 4 && PRODUCTS.some(product => product === segments[0]) && isId(segments[3]);
3670
+ return segments.length === 4 && PRODUCTS$1.some(product => product === segments[0]) && isId(segments[3]);
3587
3671
  }
3588
3672
  function isApp(value) {
3589
3673
  return APPS.some(app => app === value);
@@ -3982,7 +4066,13 @@ true;
3982
4066
  return selectedInField || ((_b = (_a = window.getSelection()) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : "") !== "";
3983
4067
  }
3984
4068
 
3985
- const COPIED_FEEDBACK_MS = 1500;
4069
+ // eslint-disable-next-line sort-keys-fix/sort-keys-fix
4070
+ const COPIED_TIMING = {
4071
+ enter: 240,
4072
+ active: 1000,
4073
+ exit: 240
4074
+ };
4075
+ const COPIED_FEEDBACK_MS = COPIED_TIMING.enter + COPIED_TIMING.active + COPIED_TIMING.exit;
3986
4076
  // `copiedUrl` stays set briefly after a copy so the UI can confirm it.
3987
4077
  function useCopyLink() {
3988
4078
  const [copiedUrl, setCopiedUrl] = React.useState(null);
@@ -4006,22 +4096,27 @@ true;
4006
4096
  // Remembering which list the index belongs to puts the highlight back on the
4007
4097
  // first item whenever a new list replaces it, without an effect to reset it.
4008
4098
  // A list that grows or fills in under the same `list` keeps its highlight.
4009
- function useResultNavigation(items, list) {
4099
+ // Disabled, nothing is highlighted and the keys and pointer leave it alone.
4100
+ function useResultNavigation(items, list, enabled = true) {
4010
4101
  const [highlight, setHighlight] = React.useState({
4011
4102
  index: 0,
4012
4103
  list
4013
4104
  });
4014
4105
  const highlightedIndex = highlight.list === list ? highlight.index : 0;
4015
- const highlighted = items[highlightedIndex];
4106
+ const highlighted = enabled ? items[highlightedIndex] : undefined;
4016
4107
  const {
4017
4108
  copiedUrl,
4018
4109
  copy
4019
4110
  } = useCopyLink();
4020
- const highlightIndex = React.useCallback(index => setHighlight(current => current.list === list && current.index === index ? current : {
4021
- index,
4022
- list
4023
- }), [list]);
4111
+ const highlightIndex = React.useCallback(index => {
4112
+ if (!enabled) return;
4113
+ setHighlight(current => current.list === list && current.index === index ? current : {
4114
+ index,
4115
+ list
4116
+ });
4117
+ }, [enabled, list]);
4024
4118
  const handleKeyDown = event => {
4119
+ if (!enabled) return;
4025
4120
  const step = verticalStep(event.key);
4026
4121
  if (step && items.length > 0) {
4027
4122
  event.preventDefault();
@@ -4045,41 +4140,89 @@ true;
4045
4140
  };
4046
4141
  }
4047
4142
 
4048
- function groupSections(groups = []) {
4143
+ var styles$k = {"modal":"modal-NR3TO","visuallyHidden":"visuallyHidden-C28ju","panel":"panel-HlF7S"};
4144
+
4145
+ const FALLBACK_SLUGS = ["people", "services"];
4146
+ function defaultProduct(products, appName) {
4147
+ var _a;
4148
+ const current = products.find(product => product.appName === appName);
4149
+ const fallback = FALLBACK_SLUGS.map(slug => products.find(product => product.slug === slug)).find(Boolean);
4150
+ return (_a = current !== null && current !== void 0 ? current : fallback) !== null && _a !== void 0 ? _a : products[0];
4151
+ }
4152
+
4153
+ function groupSections(groups = [], timeZone) {
4049
4154
  return groups.map(({
4050
4155
  results,
4051
4156
  type
4052
4157
  }) => ({
4053
4158
  heading: type,
4054
- items: results.map(resultItem),
4159
+ items: results.map(result => resultItem(result, timeZone)),
4055
4160
  key: type
4056
4161
  }));
4057
4162
  }
4058
4163
  function resultItem({
4059
4164
  attributes,
4060
4165
  id
4061
- }) {
4166
+ }, timeZone) {
4062
4167
  return {
4168
+ category: attributes.category,
4169
+ imageUrl: attributes.image_url,
4063
4170
  key: id,
4064
- subtitle: summarize(attributes.metadata),
4171
+ product: attributes.product,
4172
+ subtitle: summarize(attributes, timeZone),
4065
4173
  title: attributes.title,
4066
4174
  url: attributes.url
4067
4175
  };
4068
4176
  }
4069
- function visitItem(visit) {
4177
+ function visitItem(visit, timeZone) {
4070
4178
  return {
4071
4179
  key: entryKey(visit.entry),
4072
- ...describeVisit(visit)
4180
+ ...describeVisit(visit, timeZone)
4073
4181
  };
4074
4182
  }
4075
- function summarize(metadata) {
4076
- return Object.values(metadata !== null && metadata !== void 0 ? metadata : {}).filter(value => typeof value === "string" && value !== "").join(" · ");
4183
+ const joinParts = (...parts) => parts.filter(Boolean).join(" · ");
4184
+ // Matches home-mobile's search subtitles, so a result reads the same in both.
4185
+ function summarize({
4186
+ category,
4187
+ metadata
4188
+ }, timeZone) {
4189
+ const text = key => {
4190
+ const value = metadata === null || metadata === void 0 ? void 0 : metadata[key];
4191
+ return typeof value === "string" ? value : "";
4192
+ };
4193
+ if (category === "profile") {
4194
+ return joinParts(text("phone"), text("email"));
4195
+ } else if (category === "event") {
4196
+ return eventTime(text("starts_at"), text("ends_at"), {
4197
+ recurring: (metadata === null || metadata === void 0 ? void 0 : metadata.recurring) === true,
4198
+ timeZone
4199
+ });
4200
+ } else {
4201
+ return text("details");
4202
+ }
4203
+ }
4204
+ // "Oct 25, 9–10:30am", in the organization's time zone like the rest
4205
+ // of Planning Center.
4206
+ function eventTime(startsAt, endsAt, {
4207
+ recurring,
4208
+ timeZone
4209
+ }) {
4210
+ if (startsAt === "") {
4211
+ return "";
4212
+ } else {
4213
+ const time = datetimeFmt.datetime(startsAt, endsAt || null, {
4214
+ style: "abbreviated",
4215
+ ...(timeZone && {
4216
+ timeZone
4217
+ })
4218
+ });
4219
+ return recurring ? joinParts(time, "Repeating") : time;
4220
+ }
4077
4221
  }
4078
4222
  // Unlike search results, recents come from every product, so each one names
4079
- // its product and type.
4080
- function describeVisit(visit) {
4223
+ // its type. The row's product icon says which product it came from.
4224
+ function describeVisit(visit, timeZone) {
4081
4225
  var _a, _b;
4082
- const subtitle = (...parts) => parts.filter(Boolean).join(" · ");
4083
4226
  if (visit.status === "page") {
4084
4227
  const {
4085
4228
  app,
@@ -4087,65 +4230,312 @@ true;
4087
4230
  title
4088
4231
  } = visit.entry;
4089
4232
  return {
4090
- subtitle: subtitle(productName(app), (_a = metadata === null || metadata === void 0 ? void 0 : metadata.type) !== null && _a !== void 0 ? _a : "", (_b = metadata === null || metadata === void 0 ? void 0 : metadata.details) !== null && _b !== void 0 ? _b : ""),
4233
+ category: "generic",
4234
+ imageUrl: null,
4235
+ product: app,
4236
+ subtitle: joinParts(capitalize((_a = metadata === null || metadata === void 0 ? void 0 : metadata.type) !== null && _a !== void 0 ? _a : ""), (_b = metadata === null || metadata === void 0 ? void 0 : metadata.details) !== null && _b !== void 0 ? _b : ""),
4091
4237
  title,
4092
4238
  url: visit.url
4093
4239
  };
4094
4240
  } else {
4095
4241
  const {
4096
- metadata,
4242
+ attributes
4243
+ } = visit.result;
4244
+ const {
4245
+ category,
4246
+ image_url,
4097
4247
  product,
4098
4248
  title,
4099
4249
  type
4100
- } = visit.result.attributes;
4250
+ } = attributes;
4251
+ // Profiles and events say what they are with a phone number or a date.
4252
+ const kind = category === "generic" ? capitalize(pluralize.singular(type)) : "";
4101
4253
  return {
4102
- subtitle: subtitle(productName(product), type, summarize(metadata)),
4254
+ category,
4255
+ imageUrl: image_url,
4256
+ product,
4257
+ subtitle: joinParts(kind, summarize(attributes, timeZone)),
4103
4258
  title,
4104
4259
  url: visit.url
4105
4260
  };
4106
4261
  }
4107
4262
  }
4108
- // check-ins → Check-Ins
4109
- function productName(slug) {
4110
- return slug.split("-").map(capitalize).join("-");
4111
- }
4112
4263
  function capitalize(word) {
4113
4264
  return word.charAt(0).toUpperCase() + word.slice(1);
4114
4265
  }
4115
4266
 
4116
- const STORAGE_KEY = "topbar.product_search.last_product";
4117
- function readLastProduct() {
4118
- try {
4119
- return localStorage.getItem(STORAGE_KEY);
4120
- } catch {
4121
- return null;
4122
- }
4123
- }
4124
- function saveLastProduct(slug) {
4125
- try {
4126
- localStorage.setItem(STORAGE_KEY, slug);
4127
- } catch {
4128
- // Storage can be full or blocked; search still works without it.
4267
+ var styles$j = {"container":"container-YDdM1","hint":"hint-017Rd","keycap":"keycap-ENJM2","labels":"labels-GHPqL","copied":"copied-DUFa1"};
4268
+
4269
+ const SYMBOLS = {
4270
+ command: {
4271
+ label: "⌘",
4272
+ paths: ["M7 9a2 2 0 1 1 2 -2v10a2 2 0 1 1 -2 -2h10a2 2 0 1 1 -2 2v-10a2 2 0 1 1 2 2h-10"]
4273
+ },
4274
+ down: {
4275
+ label: "↓",
4276
+ paths: ["M12 6l0 12", "M16 14l-4 4", "M8 14l4 4"]
4277
+ },
4278
+ return: {
4279
+ label: "↵",
4280
+ paths: ["M18 6v6a3 3 0 0 1 -3 3h-10l4 -4m0 8l-4 -4"]
4281
+ },
4282
+ up: {
4283
+ label: "↑",
4284
+ paths: ["M12 6l0 12", "M16 10l-4 -4", "M8 10l4 -4"]
4129
4285
  }
4286
+ };
4287
+ function Keycap(props) {
4288
+ return /*#__PURE__*/React.createElement("kbd", {
4289
+ className: styles$j.keycap
4290
+ }, "symbol" in props ? (/*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("svg", {
4291
+ "aria-hidden": true,
4292
+ fill: "none",
4293
+ stroke: "currentColor",
4294
+ strokeLinecap: "round",
4295
+ strokeLinejoin: "round",
4296
+ viewBox: "0 0 24 24"
4297
+ }, SYMBOLS[props.symbol].paths.map(d => (/*#__PURE__*/React.createElement("path", {
4298
+ d: d,
4299
+ key: d
4300
+ })))), /*#__PURE__*/React.createElement("span", {
4301
+ className: styles$k.visuallyHidden
4302
+ }, SYMBOLS[props.symbol].label))) : props.label);
4303
+ }
4304
+ function CommandKey() {
4305
+ return isMac() ? /*#__PURE__*/React.createElement(Keycap, {
4306
+ symbol: "command"
4307
+ }) : /*#__PURE__*/React.createElement(Keycap, {
4308
+ label: "Ctrl"
4309
+ });
4130
4310
  }
4131
- function initialProduct(products) {
4132
- var _a, _b, _c;
4133
- const lastProduct = readLastProduct();
4134
- const bySlug = slug => products.find(product => product.slug === slug);
4135
- return (_c = (_b = (_a = bySlug(lastProduct)) !== null && _a !== void 0 ? _a : bySlug("people")) !== null && _b !== void 0 ? _b : bySlug("services")) !== null && _c !== void 0 ? _c : products[0];
4311
+ function EnterKey() {
4312
+ return isMac() ? /*#__PURE__*/React.createElement(Keycap, {
4313
+ symbol: "return"
4314
+ }) : /*#__PURE__*/React.createElement(Keycap, {
4315
+ label: "Enter"
4316
+ });
4136
4317
  }
4137
-
4318
+ const {
4319
+ copyLink,
4320
+ openInNewTab,
4321
+ openSearch,
4322
+ select
4323
+ } = KEYBOARD_SHORTCUTS;
4138
4324
  function KeyboardHints({
4139
4325
  copied
4140
4326
  }) {
4141
- const command = commandKeyLabel();
4142
- return /*#__PURE__*/React.createElement("p", null, "\u2191\u2193 Select \u00B7 \u21B5 Open \u00B7 ", command, "\u21B5 Open in new tab \u00B7 ", command, "C", " ", /*#__PURE__*/React.createElement("span", {
4327
+ return /*#__PURE__*/React.createElement("ul", {
4328
+ "aria-label": "Keyboard shortcuts",
4329
+ className: styles$j.container
4330
+ }, /*#__PURE__*/React.createElement("li", {
4331
+ className: styles$j.hint
4332
+ }, /*#__PURE__*/React.createElement(tapestry.Flex, {
4333
+ gap: 0.5
4334
+ }, select.modifierKey, /*#__PURE__*/React.createElement(Keycap, {
4335
+ symbol: "up"
4336
+ }), /*#__PURE__*/React.createElement(Keycap, {
4337
+ symbol: "down"
4338
+ })), select.label), /*#__PURE__*/React.createElement("li", {
4339
+ className: styles$j.hint
4340
+ }, /*#__PURE__*/React.createElement(tapestry.Flex, {
4341
+ gap: 0.5
4342
+ }, /*#__PURE__*/React.createElement(CommandKey, null), /*#__PURE__*/React.createElement(EnterKey, null)), openInNewTab.label), /*#__PURE__*/React.createElement("li", {
4343
+ className: classnames(styles$j.hint, copied && styles$j.copied),
4344
+ style: {
4345
+ "--copied-active": `${COPIED_TIMING.active}ms`,
4346
+ "--copied-enter": `${COPIED_TIMING.enter}ms`,
4347
+ "--copied-exit": `${COPIED_TIMING.exit}ms`
4348
+ }
4349
+ }, /*#__PURE__*/React.createElement(tapestry.Flex, {
4350
+ gap: 0.5
4351
+ }, /*#__PURE__*/React.createElement(CommandKey, null), /*#__PURE__*/React.createElement(Keycap, {
4352
+ label: copyLink.key.toUpperCase()
4353
+ })), /*#__PURE__*/React.createElement("span", {
4354
+ className: styles$j.labels
4355
+ }, /*#__PURE__*/React.createElement("span", {
4356
+ "aria-hidden": copied
4357
+ }, copyLink.label), /*#__PURE__*/React.createElement("span", {
4143
4358
  role: "status"
4144
- }, copied ? "Copied!" : "Copy link"), " \u00B7 ", command, "K Open search");
4359
+ }, copied && "Copied!"))), /*#__PURE__*/React.createElement("li", {
4360
+ className: styles$j.hint
4361
+ }, /*#__PURE__*/React.createElement(tapestry.Flex, {
4362
+ gap: 0.5
4363
+ }, /*#__PURE__*/React.createElement(CommandKey, null), /*#__PURE__*/React.createElement(Keycap, {
4364
+ label: openSearch.key.toUpperCase()
4365
+ })), openSearch.label));
4366
+ }
4367
+
4368
+ var styles$i = {"icon":"icon-XKLvN","squircle":"squircle-JCHr6"};
4369
+
4370
+ const PRODUCTS = {
4371
+ accounts: {
4372
+ gradient: "--t-fill-color-product-accounts-gradient-brand",
4373
+ path: logomarks__namespace.accounts
4374
+ },
4375
+ api: {
4376
+ gradient: "--t-fill-color-product-api-gradient-brand",
4377
+ path: logomarks__namespace.api
4378
+ },
4379
+ calendar: {
4380
+ gradient: "--t-fill-color-product-calendar-gradient-brand",
4381
+ path: logomarks__namespace.calendar
4382
+ },
4383
+ "check-ins": {
4384
+ gradient: "--t-fill-color-product-checkins-gradient-brand",
4385
+ path: logomarks__namespace.checkIns
4386
+ },
4387
+ "church-center": {
4388
+ gradient: "--t-fill-color-product-cc-gradient-brand",
4389
+ path: logomarks__namespace.churchCenter
4390
+ },
4391
+ giving: {
4392
+ gradient: "--t-fill-color-product-giving-gradient-brand",
4393
+ path: logomarks__namespace.giving
4394
+ },
4395
+ groups: {
4396
+ gradient: "--t-fill-color-product-groups-gradient-brand",
4397
+ path: logomarks__namespace.groups
4398
+ },
4399
+ home: {
4400
+ gradient: "--t-fill-color-product-home-gradient-brand",
4401
+ path: logomarks__namespace.home
4402
+ },
4403
+ "music-stand": {
4404
+ gradient: "--t-fill-color-product-musicstand-gradient-brand",
4405
+ path: logomarks__namespace.musicStand
4406
+ },
4407
+ people: {
4408
+ gradient: "--t-fill-color-product-people-gradient-brand",
4409
+ path: logomarks__namespace.people
4410
+ },
4411
+ publishing: {
4412
+ gradient: "--t-fill-color-product-publishing-gradient-brand",
4413
+ path: logomarks__namespace.publishing
4414
+ },
4415
+ registrations: {
4416
+ gradient: "--t-fill-color-product-registrations-gradient-brand",
4417
+ path: logomarks__namespace.registrations
4418
+ },
4419
+ services: {
4420
+ gradient: "--t-fill-color-product-services-gradient-brand",
4421
+ path: logomarks__namespace.services
4422
+ }
4423
+ };
4424
+ const isProductIconSlug = slug => Object.prototype.hasOwnProperty.call(PRODUCTS, slug);
4425
+ const maskFor = path => `url("data:image/svg+xml,${encodeURIComponent(`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="${path}"/></svg>`)}")`;
4426
+ function ProductIcon({
4427
+ size = 16,
4428
+ slug
4429
+ }) {
4430
+ const {
4431
+ gradient,
4432
+ path
4433
+ } = PRODUCTS[slug];
4434
+ const mask = maskFor(path);
4435
+ return /*#__PURE__*/React.createElement("span", {
4436
+ "aria-hidden": true,
4437
+ className: styles$i.icon,
4438
+ style: {
4439
+ height: size,
4440
+ width: size
4441
+ }
4442
+ }, /*#__PURE__*/React.createElement("span", {
4443
+ className: styles$i.squircle,
4444
+ style: {
4445
+ WebkitMaskImage: mask,
4446
+ background: `var(${gradient})`,
4447
+ maskImage: mask
4448
+ }
4449
+ }));
4450
+ }
4451
+
4452
+ var styles$h = {"picker":"picker-iuzzj","option":"option--7LXg"};
4453
+
4454
+ // Phones have no room for a tab per product, so they pick from a dropdown.
4455
+ // Complex mode renders each option's logomark, in the list and the trigger.
4456
+ function ProductSelect({
4457
+ children,
4458
+ onSelect,
4459
+ products,
4460
+ selected
4461
+ }) {
4462
+ const options = products.map(({
4463
+ appName,
4464
+ slug
4465
+ }) => ({
4466
+ label: (/*#__PURE__*/React.createElement("span", {
4467
+ className: styles$h.option
4468
+ }, /*#__PURE__*/React.createElement(ProductIcon, {
4469
+ slug: slug
4470
+ }), appName)),
4471
+ textValue: appName,
4472
+ value: slug
4473
+ }));
4474
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
4475
+ className: styles$h.picker
4476
+ }, /*#__PURE__*/React.createElement(tapestry.Select, {
4477
+ "aria-label": "Product",
4478
+ complex: true,
4479
+ onChange: event => onSelect(event.target.value),
4480
+ options: options,
4481
+ value: selected.slug
4482
+ })), /*#__PURE__*/React.createElement("div", {
4483
+ className: styles$k.panel
4484
+ }, children));
4485
+ }
4486
+
4487
+ // Browsers match :focus-visible on every focused text field, keyboard or not,
4488
+ // since typing follows either way. So this remembers what last moved focus,
4489
+ // shared by every field and listened for once, in the capture phase so it's
4490
+ // known before focus moves.
4491
+ let lastInteraction = "pointer";
4492
+ let listening = false;
4493
+ function listen() {
4494
+ if (listening) return;
4495
+ listening = true;
4496
+ document.addEventListener("keydown", event => {
4497
+ // Shortcuts like ⌘C don't move focus.
4498
+ if (!event.metaKey && !event.ctrlKey && !event.altKey) {
4499
+ lastInteraction = "keyboard";
4500
+ }
4501
+ }, true);
4502
+ document.addEventListener("pointerdown", () => {
4503
+ lastInteraction = "pointer";
4504
+ }, true);
4505
+ }
4506
+ /**
4507
+ * Whether a field was focused from the keyboard, as by Tab, rather than by a
4508
+ * click or tap. Spread `focusProps` onto the field, and style it by
4509
+ * `data-focus-visible`.
4510
+ */
4511
+ function useKeyboardFocus({
4512
+ onBlur,
4513
+ onFocus
4514
+ } = {}) {
4515
+ const [focusVisible, setFocusVisible] = React.useState(false);
4516
+ React.useEffect(listen, []);
4517
+ return {
4518
+ focusProps: {
4519
+ "data-focus-visible": focusVisible || undefined,
4520
+ onBlur: event => {
4521
+ setFocusVisible(false);
4522
+ onBlur === null || onBlur === void 0 ? void 0 : onBlur(event);
4523
+ },
4524
+ onFocus: event => {
4525
+ const keyboard = lastInteraction === "keyboard";
4526
+ setFocusVisible(keyboard);
4527
+ onFocus === null || onFocus === void 0 ? void 0 : onFocus(event, keyboard);
4528
+ }
4529
+ },
4530
+ focusVisible
4531
+ };
4145
4532
  }
4146
4533
 
4147
- var styles$d = {"tab":"tab-dz8ki"};
4534
+ var styles$g = {"tablist":"tablist-7ASvc","tab":"tab-dz8ki"};
4148
4535
 
4536
+ // With this many tabs or more, only the selected tab shows its name, so they
4537
+ // all fit. Fewer always fit with their names.
4538
+ const ICON_ONLY_TAB_COUNT = 5;
4149
4539
  function ProductTabs({
4150
4540
  children,
4151
4541
  onKeyDown,
@@ -4156,6 +4546,7 @@ true;
4156
4546
  const id = useInstanceId("product-tabs");
4157
4547
  const tabId = slug => `${id}-tab-${slug}`;
4158
4548
  const tabRefs = React.useRef(new Map());
4549
+ const showAllNames = products.length < ICON_ONLY_TAB_COUNT;
4159
4550
  const handleKeyDown = event => {
4160
4551
  var _a;
4161
4552
  const offset = horizontalStep(event.key);
@@ -4170,13 +4561,14 @@ true;
4170
4561
  }
4171
4562
  };
4172
4563
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
4173
- "aria-label": "Product",
4564
+ "aria-label": "Search in",
4565
+ className: styles$g.tablist,
4174
4566
  onKeyDown: handleKeyDown,
4175
4567
  role: "tablist"
4176
- }, products.map(product => (/*#__PURE__*/React.createElement("button", {
4568
+ }, products.map(product => (/*#__PURE__*/React.createElement(Tab, {
4177
4569
  "aria-controls": `${id}-panel`,
4570
+ "aria-describedby": `${tabId(product.slug)}-description`,
4178
4571
  "aria-selected": product === selected,
4179
- className: styles$d.tab,
4180
4572
  id: tabId(product.slug),
4181
4573
  key: product.slug,
4182
4574
  onClick: () => onSelect(product.slug),
@@ -4187,15 +4579,397 @@ true;
4187
4579
  tabRefs.current.delete(product.slug);
4188
4580
  }
4189
4581
  },
4190
- role: "tab",
4191
- tabIndex: product === selected ? 0 : -1,
4192
- type: "button"
4193
- }, product.appName)))), /*#__PURE__*/React.createElement("div", {
4582
+ tabIndex: product === selected ? 0 : -1
4583
+ }, /*#__PURE__*/React.createElement(ProductIcon, {
4584
+ slug: product.slug
4585
+ }), showAllNames || product === selected ? product.appName : (/*#__PURE__*/React.createElement("span", {
4586
+ className: styles$k.visuallyHidden
4587
+ }, product.appName)))))), /*#__PURE__*/React.createElement("div", {
4588
+ className: styles$k.visuallyHidden
4589
+ }, products.map(product => (/*#__PURE__*/React.createElement("span", {
4590
+ id: `${tabId(product.slug)}-description`,
4591
+ key: product.slug
4592
+ }, "Planning Center ", product.appName)))), /*#__PURE__*/React.createElement("div", {
4194
4593
  "aria-labelledby": tabId(selected.slug),
4594
+ className: styles$k.panel,
4195
4595
  id: `${id}-panel`,
4196
4596
  role: "tabpanel"
4197
4597
  }, children));
4198
4598
  }
4599
+ // The modal's focus scope moves focus here by script when Tab is pressed, and
4600
+ // Safari doesn't match :focus-visible on focus moved by script. So the tab
4601
+ // remembers whether the keyboard brought focus, and the ring keys off that.
4602
+ const Tab = /*#__PURE__*/React.forwardRef(function Tab(props, ref) {
4603
+ const {
4604
+ focusProps
4605
+ } = useKeyboardFocus();
4606
+ return /*#__PURE__*/React.createElement("button", {
4607
+ className: styles$g.tab,
4608
+ ref: ref,
4609
+ role: "tab",
4610
+ type: "button",
4611
+ ...props,
4612
+ ...focusProps
4613
+ });
4614
+ });
4615
+
4616
+ function BlankStateRecentlyVisited(props) {
4617
+ const id = useInstanceId("blank-state-initial");
4618
+ return /*#__PURE__*/React.createElement("svg", {
4619
+ viewBox: "0 0 197 174",
4620
+ fill: "none",
4621
+ "aria-hidden": "true",
4622
+ focusable: "false",
4623
+ ...props
4624
+ }, /*#__PURE__*/React.createElement("path", {
4625
+ d: "M139.863 32.119c10.938 10.028 21.777 20.154 32.912 30.084 8.376 7.373 21.975 15.828 23.157 28.02.592 6.095-2.167 11.993-5.321 17.204-24.635 40.8-81.098 67.148-127.412 48.862-30.646-12.093-76.172-47.387-59.716-85.041 15.865-36.377 64.84-55.056 83.957-57.71 21.876-4.621 34.883 2.457 52.423 18.58Z",
4626
+ fill: "currentColor"
4627
+ }), /*#__PURE__*/React.createElement("g", {
4628
+ clipPath: `url(#${id}-a)`
4629
+ }, /*#__PURE__*/React.createElement("path", {
4630
+ d: "M115.885 109.31c-.478-.686-.01-1.845 1.046-2.589s2.3-.791 2.778-.105c.478.686.009 1.845-1.047 2.589-1.056.744-2.299.791-2.777.105Z",
4631
+ fill: "#333"
4632
+ }), /*#__PURE__*/React.createElement("path", {
4633
+ d: "M123.403 113.599c-3.456 0-6.259-2.817-6.259-6.293 0-3.475 2.803-6.293 6.259-6.293 3.457 0 6.259 2.818 6.259 6.293 0 3.476-2.802 6.293-6.259 6.293Z",
4634
+ fill: "#333"
4635
+ }), /*#__PURE__*/React.createElement("path", {
4636
+ d: "M118.853 100.968a2.85 2.85 0 0 0 2.832-2.484 2.89 2.89 0 0 0-.071-1.115c-2.638-9.955-9.668-9.687-9.964-9.665l.311 5.716h-.104c.119 0 2.853.134 4.254 5.421a2.874 2.874 0 0 0 1.013 1.53 2.846 2.846 0 0 0 1.729.597Z",
4637
+ fill: "#4D4D4D"
4638
+ }), /*#__PURE__*/React.createElement("path", {
4639
+ d: "M114.96 100.503c-.462-5.894 2.796-10.96 7.279-11.315 4.482-.356 8.491 4.134 8.953 10.027.462 5.894-2.796 10.96-7.279 11.315-4.482.356-8.491-4.134-8.953-10.027Z",
4640
+ fill: "#F2F2F2"
4641
+ }), /*#__PURE__*/React.createElement("path", {
4642
+ d: "M125.964 107.738c-4.48.354-8.489-4.135-8.953-10.026a12.893 12.893 0 0 1 1.223-6.707c-2.249 2.046-3.591 5.59-3.283 9.505.463 5.895 4.469 10.384 8.953 10.027 2.594-.205 4.765-1.986 6.055-4.591a6.682 6.682 0 0 1-3.995 1.792Z",
4643
+ fill: "#E6E6E6"
4644
+ }), /*#__PURE__*/React.createElement("path", {
4645
+ d: "M115.885 109.31c-.478-.686-.01-1.845 1.046-2.589s2.3-.791 2.778-.105c.478.686.009 1.845-1.047 2.589-1.056.744-2.299.791-2.777.105Z",
4646
+ fill: "#333"
4647
+ }), /*#__PURE__*/React.createElement("path", {
4648
+ d: "M123.403 113.599c-3.456 0-6.259-2.817-6.259-6.293 0-3.475 2.803-6.293 6.259-6.293 3.457 0 6.259 2.818 6.259 6.293 0 3.476-2.802 6.293-6.259 6.293Z",
4649
+ fill: "#333"
4650
+ }), /*#__PURE__*/React.createElement("path", {
4651
+ d: "M118.853 100.968a2.85 2.85 0 0 0 2.832-2.484 2.89 2.89 0 0 0-.071-1.115c-2.638-9.955-9.668-9.687-9.964-9.665l.311 5.716h-.104c.119 0 2.853.134 4.254 5.421a2.874 2.874 0 0 0 1.013 1.53 2.846 2.846 0 0 0 1.729.597Z",
4652
+ fill: "#4D4D4D"
4653
+ }), /*#__PURE__*/React.createElement("path", {
4654
+ d: "M114.96 100.503c-.462-5.894 2.796-10.96 7.279-11.315 4.482-.356 8.491 4.134 8.953 10.027.462 5.894-2.796 10.96-7.279 11.315-4.482.356-8.491-4.134-8.953-10.027Z",
4655
+ fill: "#F2F2F2"
4656
+ }), /*#__PURE__*/React.createElement("path", {
4657
+ d: "M125.964 107.738c-4.48.354-8.489-4.135-8.953-10.026a12.893 12.893 0 0 1 1.223-6.707c-2.249 2.046-3.591 5.59-3.283 9.505.463 5.895 4.469 10.384 8.953 10.027 2.594-.205 4.765-1.986 6.055-4.591a6.682 6.682 0 0 1-3.995 1.792Z",
4658
+ fill: "#E6E6E6"
4659
+ }), /*#__PURE__*/React.createElement("path", {
4660
+ d: "M89.317 121.331a2.836 2.836 0 0 1-1.92-.752 2.869 2.869 0 0 1-.911-1.857c-.534-5.726 3.527-13.808 3.99-14.713a2.849 2.849 0 0 1 1.666-1.413 2.835 2.835 0 0 1 2.172.185 2.86 2.86 0 0 1 1.405 1.675 2.876 2.876 0 0 1-.184 2.183c-1.46 2.843-3.669 8.492-3.383 11.551a2.868 2.868 0 0 1-1.504 2.797 2.84 2.84 0 0 1-1.064.318 1.378 1.378 0 0 1-.267.026Z",
4661
+ fill: "#4D4D4D"
4662
+ }), /*#__PURE__*/React.createElement("path", {
4663
+ d: "M92.155 112.314c3.308 0 5.989-2.696 5.989-6.021 0-3.326-2.681-6.021-5.989-6.021-3.307 0-5.988 2.695-5.988 6.021 0 3.325 2.681 6.021 5.988 6.021Z",
4664
+ fill: "gray"
4665
+ }), /*#__PURE__*/React.createElement("path", {
4666
+ d: "M80.597 128.771h11.769v3.726a1.118 1.118 0 0 1-1.112 1.118H78.57a1.118 1.118 0 0 1-1.112-1.118v-.566c0-.841.332-1.648.924-2.242a3.144 3.144 0 0 1 2.23-.929l-.015.011Z",
4667
+ fill: "#333"
4668
+ }), /*#__PURE__*/React.createElement("path", {
4669
+ d: "M89.572 132.084s8.075.119 6.3-8.268c-1.775-8.387-12.188-15.351-15.234-6.066-3.046 9.285-1.386 15.232 8.934 14.334Z",
4670
+ fill: "#F2F2F2"
4671
+ }), /*#__PURE__*/React.createElement("path", {
4672
+ d: "M106.67 121.334h-.27a2.84 2.84 0 0 1-1.925-1.025 2.872 2.872 0 0 1-.639-2.093c.285-3.059-1.92-8.708-3.38-11.551a2.873 2.873 0 0 1 1.296-3.721 2.832 2.832 0 0 1 2.102-.199 2.848 2.848 0 0 1 1.66 1.312c.463.906 4.521 8.991 3.988 14.714a2.874 2.874 0 0 1-.926 1.828 2.832 2.832 0 0 1-1.906.735Z",
4673
+ fill: "#4D4D4D"
4674
+ }), /*#__PURE__*/React.createElement("path", {
4675
+ d: "M103.835 112.314c3.307 0 5.988-2.696 5.988-6.021 0-3.326-2.681-6.021-5.988-6.021-3.307 0-5.988 2.695-5.988 6.021 0 3.325 2.681 6.021 5.988 6.021Z",
4676
+ fill: "gray"
4677
+ }), /*#__PURE__*/React.createElement("path", {
4678
+ d: "m117.408 133.652-12.674-.002c-.295 0-.577-.118-.786-.328a1.121 1.121 0 0 1-.325-.79v-3.726l11.773.002c.837 0 1.639.334 2.23.929s.923 1.401.923 2.242v.567a1.116 1.116 0 0 1-1.141 1.106Z",
4679
+ fill: "#333"
4680
+ }), /*#__PURE__*/React.createElement("path", {
4681
+ d: "M106.414 132.084s-8.075.119-6.318-8.268c1.756-8.387 12.195-15.343 15.237-6.062 3.043 9.281 1.405 15.235-8.919 14.33Z",
4682
+ fill: "#F2F2F2"
4683
+ }), /*#__PURE__*/React.createElement("path", {
4684
+ d: "M109.107 94.58a2.305 2.305 0 0 0 2.191 2.412 2.302 2.302 0 0 0 2.399-2.202l.333-7.33a2.306 2.306 0 0 0-2.191-2.412 2.303 2.303 0 0 0-2.4 2.203l-.332 7.328Z",
4685
+ fill: "gray"
4686
+ }), /*#__PURE__*/React.createElement("path", {
4687
+ d: "M80.968 109.31c.478-.686.01-1.845-1.047-2.589-1.056-.744-2.3-.791-2.777-.105-.478.686-.01 1.845 1.046 2.589s2.3.791 2.778.105Z",
4688
+ fill: "#333"
4689
+ }), /*#__PURE__*/React.createElement("path", {
4690
+ d: "M73.448 113.599c3.457 0 6.26-2.817 6.26-6.293 0-3.475-2.803-6.293-6.26-6.293-3.456 0-6.258 2.818-6.258 6.293 0 3.476 2.802 6.293 6.258 6.293Z",
4691
+ fill: "#333"
4692
+ }), /*#__PURE__*/React.createElement("path", {
4693
+ d: "M78 100.968a2.853 2.853 0 0 1-2.832-2.484 2.876 2.876 0 0 1 .07-1.115c2.639-9.955 9.669-9.687 9.965-9.665l-.311 5.716h.104c-.12 0-2.854.134-4.255 5.421a2.87 2.87 0 0 1-1.013 1.53 2.845 2.845 0 0 1-1.729.597Z",
4694
+ fill: "#4D4D4D"
4695
+ }), /*#__PURE__*/React.createElement("path", {
4696
+ d: "M87.37 88.17a2.305 2.305 0 0 0-2.19-2.413 2.302 2.302 0 0 0-2.4 2.202l-.332 7.329a2.305 2.305 0 0 0 2.19 2.413 2.302 2.302 0 0 0 2.4-2.203l.332-7.328Z",
4697
+ fill: "gray"
4698
+ }), /*#__PURE__*/React.createElement("path", {
4699
+ d: "M81.893 100.503c.462-5.894-2.797-10.96-7.28-11.315-4.482-.356-8.49 4.134-8.953 10.027-.462 5.894 2.797 10.96 7.28 11.315 4.482.356 8.49-4.134 8.953-10.027Z",
4700
+ fill: "#F2F2F2"
4701
+ }), /*#__PURE__*/React.createElement("path", {
4702
+ d: "M70.888 107.738c4.48.354 8.49-4.135 8.953-10.026a12.89 12.89 0 0 0-1.223-6.707c2.25 2.046 3.591 5.59 3.284 9.505-.464 5.895-4.47 10.384-8.953 10.027-2.594-.205-4.766-1.986-6.055-4.591a6.682 6.682 0 0 0 3.994 1.792Z",
4703
+ fill: "#E6E6E6"
4704
+ }), /*#__PURE__*/React.createElement("path", {
4705
+ d: "M112.717 94.105c-.511-9.095-7.459-11.703-15.82-11.226-8.36.477-14.97 3.856-14.451 12.951.518 9.095 7.707 16.081 16.067 15.605 8.36-.477 14.719-8.231 14.204-17.33Z",
4706
+ fill: "#F2F2F2"
4707
+ }), /*#__PURE__*/React.createElement("path", {
4708
+ d: "M112.565 92.656c-1.056 7.496-6.799 13.413-14.059 13.812-7.852.451-14.67-5.686-15.897-13.965a14.571 14.571 0 0 0-.17 3.327c.51 9.095 7.704 16.081 16.067 15.605 8.364-.477 14.723-8.235 14.211-17.33a16.83 16.83 0 0 0-.152-1.45Z",
4709
+ fill: "#E6E6E6"
4710
+ }), /*#__PURE__*/React.createElement("path", {
4711
+ d: "M103.546 90.353H91.61a.62.62 0 0 0-.619.623v1.762a.62.62 0 0 0 .62.622h11.935a.62.62 0 0 0 .619-.622v-1.762a.62.62 0 0 0-.619-.623Zm0 5.187H91.61a.62.62 0 0 0-.619.622v1.762a.62.62 0 0 0 .62.623h11.935a.62.62 0 0 0 .619-.623v-1.762a.62.62 0 0 0-.619-.622Zm-.004 5.19H91.606a.62.62 0 0 0-.619.622v1.763a.62.62 0 0 0 .62.622h11.935a.62.62 0 0 0 .619-.622v-1.763a.62.62 0 0 0-.619-.622Z",
4712
+ fill: "#3690EA"
4713
+ }), /*#__PURE__*/React.createElement("path", {
4714
+ d: "M89.317 121.331a2.836 2.836 0 0 1-1.92-.752 2.869 2.869 0 0 1-.911-1.857c-.534-5.726 3.527-13.808 3.99-14.713a2.849 2.849 0 0 1 1.666-1.413 2.835 2.835 0 0 1 2.172.185 2.86 2.86 0 0 1 1.405 1.675 2.876 2.876 0 0 1-.184 2.183c-1.46 2.843-3.669 8.492-3.383 11.551a2.868 2.868 0 0 1-1.504 2.797 2.84 2.84 0 0 1-1.064.318 1.378 1.378 0 0 1-.267.026Z",
4715
+ fill: "#4D4D4D"
4716
+ }), /*#__PURE__*/React.createElement("path", {
4717
+ d: "M92.155 112.314c3.308 0 5.989-2.696 5.989-6.021 0-3.326-2.681-6.021-5.989-6.021-3.307 0-5.988 2.695-5.988 6.021 0 3.325 2.681 6.021 5.988 6.021Z",
4718
+ fill: "gray"
4719
+ }), /*#__PURE__*/React.createElement("path", {
4720
+ d: "M80.597 128.771h11.769v3.726a1.118 1.118 0 0 1-1.112 1.118H78.57a1.118 1.118 0 0 1-1.112-1.118v-.566c0-.841.332-1.648.924-2.242a3.144 3.144 0 0 1 2.23-.929l-.015.011Z",
4721
+ fill: "#333"
4722
+ }), /*#__PURE__*/React.createElement("path", {
4723
+ d: "M89.572 132.084s8.075.119 6.3-8.268c-1.775-8.387-12.188-15.351-15.234-6.066-3.046 9.285-1.386 15.232 8.934 14.334Z",
4724
+ fill: "#F2F2F2"
4725
+ }), /*#__PURE__*/React.createElement("path", {
4726
+ d: "M106.67 121.334h-.27a2.84 2.84 0 0 1-1.925-1.025 2.872 2.872 0 0 1-.639-2.093c.285-3.059-1.92-8.708-3.38-11.551a2.873 2.873 0 0 1 1.296-3.721 2.832 2.832 0 0 1 2.102-.199 2.848 2.848 0 0 1 1.66 1.312c.463.906 4.521 8.991 3.988 14.714a2.874 2.874 0 0 1-.926 1.828 2.832 2.832 0 0 1-1.906.735Z",
4727
+ fill: "#4D4D4D"
4728
+ }), /*#__PURE__*/React.createElement("path", {
4729
+ d: "M103.835 112.314c3.307 0 5.988-2.696 5.988-6.021 0-3.326-2.681-6.021-5.988-6.021-3.307 0-5.988 2.695-5.988 6.021 0 3.325 2.681 6.021 5.988 6.021Z",
4730
+ fill: "gray"
4731
+ }), /*#__PURE__*/React.createElement("path", {
4732
+ d: "m117.408 133.652-12.674-.002c-.295 0-.577-.118-.786-.328a1.121 1.121 0 0 1-.325-.79v-3.726l11.773.002c.837 0 1.639.334 2.23.929s.923 1.401.923 2.242v.567a1.116 1.116 0 0 1-1.141 1.106Z",
4733
+ fill: "#333"
4734
+ }), /*#__PURE__*/React.createElement("path", {
4735
+ d: "M106.414 132.084s-8.075.119-6.318-8.268c1.756-8.387 12.195-15.343 15.237-6.062 3.043 9.281 1.405 15.235-8.919 14.33Z",
4736
+ fill: "#F2F2F2"
4737
+ }), /*#__PURE__*/React.createElement("path", {
4738
+ d: "M109.107 94.58a2.305 2.305 0 0 0 2.191 2.412 2.302 2.302 0 0 0 2.399-2.202l.333-7.33a2.306 2.306 0 0 0-2.191-2.412 2.303 2.303 0 0 0-2.4 2.203l-.332 7.328Z",
4739
+ fill: "gray"
4740
+ }), /*#__PURE__*/React.createElement("path", {
4741
+ d: "M80.968 109.31c.478-.686.01-1.845-1.047-2.589-1.056-.744-2.3-.791-2.777-.105-.478.686-.01 1.845 1.046 2.589s2.3.791 2.778.105Z",
4742
+ fill: "#333"
4743
+ }), /*#__PURE__*/React.createElement("path", {
4744
+ d: "M73.448 113.599c3.457 0 6.26-2.817 6.26-6.293 0-3.475-2.803-6.293-6.26-6.293-3.456 0-6.258 2.818-6.258 6.293 0 3.476 2.802 6.293 6.258 6.293Z",
4745
+ fill: "#333"
4746
+ }), /*#__PURE__*/React.createElement("path", {
4747
+ d: "M78 100.968a2.853 2.853 0 0 1-2.832-2.484 2.876 2.876 0 0 1 .07-1.115c2.639-9.955 9.669-9.687 9.965-9.665l-.311 5.716h.104c-.12 0-2.854.134-4.255 5.421a2.87 2.87 0 0 1-1.013 1.53 2.845 2.845 0 0 1-1.729.597Z",
4748
+ fill: "#4D4D4D"
4749
+ }), /*#__PURE__*/React.createElement("path", {
4750
+ d: "M87.37 88.17a2.305 2.305 0 0 0-2.19-2.413 2.302 2.302 0 0 0-2.4 2.202l-.332 7.329a2.305 2.305 0 0 0 2.19 2.413 2.302 2.302 0 0 0 2.4-2.203l.332-7.328Z",
4751
+ fill: "gray"
4752
+ }), /*#__PURE__*/React.createElement("path", {
4753
+ d: "M81.893 100.503c.462-5.894-2.797-10.96-7.28-11.315-4.482-.356-8.49 4.134-8.953 10.027-.462 5.894 2.797 10.96 7.28 11.315 4.482.356 8.49-4.134 8.953-10.027Z",
4754
+ fill: "#F2F2F2"
4755
+ }), /*#__PURE__*/React.createElement("path", {
4756
+ d: "M70.888 107.738c4.48.354 8.49-4.135 8.953-10.026a12.89 12.89 0 0 0-1.223-6.707c2.25 2.046 3.591 5.59 3.284 9.505-.464 5.895-4.47 10.384-8.953 10.027-2.594-.205-4.766-1.986-6.055-4.591a6.682 6.682 0 0 0 3.994 1.792Z",
4757
+ fill: "#E6E6E6"
4758
+ }), /*#__PURE__*/React.createElement("path", {
4759
+ d: "M112.717 94.105c-.511-9.095-7.459-11.703-15.82-11.226-8.36.477-14.97 3.856-14.451 12.951.518 9.095 7.707 16.081 16.067 15.605 8.36-.477 14.719-8.231 14.204-17.33Z",
4760
+ fill: "#F2F2F2"
4761
+ }), /*#__PURE__*/React.createElement("path", {
4762
+ d: "M112.565 92.656c-1.056 7.496-6.799 13.413-14.059 13.812-7.852.451-14.67-5.686-15.897-13.965a14.571 14.571 0 0 0-.17 3.327c.51 9.095 7.704 16.081 16.067 15.605 8.364-.477 14.723-8.235 14.211-17.33a16.83 16.83 0 0 0-.152-1.45Z",
4763
+ fill: "#E6E6E6"
4764
+ }), /*#__PURE__*/React.createElement("path", {
4765
+ d: "M94.626 78.445c-.114-.488 6.548-.927 5.815.246v.775c0 .746.033 1.49.033 2.258s.037 1.595.044 2.392c.278.593-6.473.935-5.817-.115v-.67c-.015-1.63-.06-3.257-.075-4.886Z",
4766
+ fill: "#999"
4767
+ }), /*#__PURE__*/React.createElement("path", {
4768
+ d: "M103.546 90.353H91.61a.62.62 0 0 0-.619.623v1.762a.62.62 0 0 0 .62.622h11.935a.62.62 0 0 0 .619-.622v-1.762a.62.62 0 0 0-.619-.623Zm0 5.187H91.61a.62.62 0 0 0-.619.622v1.762a.62.62 0 0 0 .62.623h11.935a.62.62 0 0 0 .619-.623v-1.762a.62.62 0 0 0-.619-.622Zm-.004 5.19H91.606a.62.62 0 0 0-.619.622v1.763a.62.62 0 0 0 .62.622h11.935a.62.62 0 0 0 .619-.622v-1.763a.62.62 0 0 0-.619-.622ZM55.773 64.004c4.349 0 7.874-5.285 7.874-11.804s-3.525-11.804-7.874-11.804-7.875 5.285-7.875 11.804c0 6.52 3.526 11.804 7.875 11.804Zm84.17.015c4.349 0 7.874-5.285 7.874-11.804 0-6.52-3.525-11.804-7.874-11.804s-7.875 5.285-7.875 11.804 3.526 11.804 7.875 11.804Z",
4769
+ fill: "#3690EA"
4770
+ }), /*#__PURE__*/React.createElement("path", {
4771
+ d: "M97.962 29.036c7.273 0 13.17-2.224 13.17-4.967 0-2.743-5.897-4.966-13.17-4.966-7.274 0-13.17 2.223-13.17 4.966 0 2.743 5.896 4.967 13.17 4.967Z",
4772
+ fill: "#B3B3B3"
4773
+ }), /*#__PURE__*/React.createElement("path", {
4774
+ d: "M97.962 16.55c4.545 0 8.23-3.705 8.23-8.275S102.507 0 97.962 0c-4.546 0-8.23 3.705-8.23 8.275s3.684 8.275 8.23 8.275Z",
4775
+ fill: "#3690EA"
4776
+ }), /*#__PURE__*/React.createElement("path", {
4777
+ d: "M141.607 59.283V45.147a19.038 19.038 0 0 0-3.687-11.301 18.872 18.872 0 0 0-9.653-6.874c-8.838-2.69-19.203-4.24-30.29-4.244-11.088-.004-21.452 1.546-30.29 4.233a18.871 18.871 0 0 0-9.668 6.866 19.041 19.041 0 0 0-3.699 11.305v14.132a19.03 19.03 0 0 0 3.685 11.303 18.86 18.86 0 0 0 9.656 6.872c8.841 2.694 19.206 4.244 30.29 4.244 11.083 0 21.452-1.542 30.294-4.233a18.858 18.858 0 0 0 9.666-6.863 19.028 19.028 0 0 0 3.696-11.304Z",
4778
+ fill: "#F2F2F2"
4779
+ }), /*#__PURE__*/React.createElement("path", {
4780
+ d: "M97.954 75.051c-10.068 0-19.88-1.371-28.381-3.957a12.353 12.353 0 0 1-6.262-4.485 12.463 12.463 0 0 1-2.41-7.34V45.131c.006-2.642.85-5.214 2.411-7.34a12.345 12.345 0 0 1 6.264-4.482c8.501-2.586 18.317-3.95 28.382-3.95 10.065 0 19.877 1.371 28.382 3.96a12.35 12.35 0 0 1 6.262 4.486 12.46 12.46 0 0 1 2.409 7.34V59.28a12.453 12.453 0 0 1-2.41 7.341 12.343 12.343 0 0 1-6.265 4.482c-8.486 2.585-18.317 3.949-28.382 3.949Z",
4781
+ fill: "#E6E6E6"
4782
+ }), /*#__PURE__*/React.createElement("path", {
4783
+ d: "M100.863 15.992h-5.81v1.293h5.81v-1.293Z",
4784
+ fill: "#F2F2F2"
4785
+ }), /*#__PURE__*/React.createElement("path", {
4786
+ d: "M76.472 66.05c4.327 0 7.834-6.2 7.834-13.846 0-7.647-3.507-13.846-7.834-13.846-4.326 0-7.833 6.2-7.833 13.846s3.507 13.845 7.833 13.845Z",
4787
+ fill: "#1A1A1A"
4788
+ }), /*#__PURE__*/React.createElement("path", {
4789
+ d: "M77.844 52.766c1.743 0 3.157-2.088 3.157-4.664 0-2.577-1.414-4.665-3.157-4.665-1.744 0-3.157 2.088-3.157 4.665 0 2.576 1.413 4.664 3.157 4.664Z",
4790
+ fill: "#fff"
4791
+ }), /*#__PURE__*/React.createElement("path", {
4792
+ d: "M118.662 66.057c4.326 0 7.834-6.2 7.834-13.846s-3.508-13.845-7.834-13.845c-4.327 0-7.834 6.199-7.834 13.845 0 7.647 3.507 13.846 7.834 13.846Z",
4793
+ fill: "#1A1A1A"
4794
+ }), /*#__PURE__*/React.createElement("path", {
4795
+ d: "M120.032 52.774c1.744 0 3.157-2.089 3.157-4.665s-1.413-4.665-3.157-4.665c-1.743 0-3.157 2.089-3.157 4.665s1.414 4.665 3.157 4.665Z",
4796
+ fill: "#fff"
4797
+ }), /*#__PURE__*/React.createElement("path", {
4798
+ d: "M92.674 63.11a10.286 10.286 0 0 0 7.949 1.095 13.2 13.2 0 0 0 2.623-1.118.738.738 0 0 1 1.035.639.748.748 0 0 1-.119.453c-2.224 2.82-6.474 3.625-9.672 2.12a7.284 7.284 0 0 1-2.75-2.12.748.748 0 0 1 .465-1.139.738.738 0 0 1 .469.054v.015Z",
4799
+ fill: "#999"
4800
+ }), /*#__PURE__*/React.createElement("path", {
4801
+ d: "M55.773 64.004c4.349 0 7.874-5.285 7.874-11.804s-3.525-11.804-7.874-11.804-7.875 5.285-7.875 11.804c0 6.52 3.526 11.804 7.875 11.804Zm84.17.015c4.349 0 7.874-5.285 7.874-11.804 0-6.52-3.525-11.804-7.874-11.804s-7.875 5.285-7.875 11.804 3.526 11.804 7.875 11.804Z",
4802
+ fill: "#3690EA"
4803
+ }), /*#__PURE__*/React.createElement("path", {
4804
+ d: "M95.008 14.315c-.115-.488 6.548-.932 5.815.246v.771c0 .745.033 1.51.037 2.262.003.752.033 1.594.04 2.392.282.592-6.474.935-5.818-.116v-.67c-.014-1.629-.055-3.257-.074-4.885Z",
4805
+ fill: "#F2F2F2"
4806
+ }), /*#__PURE__*/React.createElement("path", {
4807
+ d: "M97.962 29.036c7.273 0 13.17-2.224 13.17-4.967 0-2.743-5.897-4.966-13.17-4.966-7.274 0-13.17 2.223-13.17 4.966 0 2.743 5.896 4.967 13.17 4.967Z",
4808
+ fill: "#B3B3B3"
4809
+ }), /*#__PURE__*/React.createElement("path", {
4810
+ d: "M97.962 16.55c4.545 0 8.23-3.705 8.23-8.275S102.507 0 97.962 0c-4.546 0-8.23 3.705-8.23 8.275s3.684 8.275 8.23 8.275Z",
4811
+ fill: "#3690EA"
4812
+ }), /*#__PURE__*/React.createElement("path", {
4813
+ d: "M141.607 59.283V45.147a19.038 19.038 0 0 0-3.687-11.301 18.872 18.872 0 0 0-9.653-6.874c-8.838-2.69-19.203-4.24-30.29-4.244-11.088-.004-21.452 1.546-30.29 4.233a18.871 18.871 0 0 0-9.668 6.866 19.041 19.041 0 0 0-3.699 11.305v14.132a19.03 19.03 0 0 0 3.685 11.303 18.86 18.86 0 0 0 9.656 6.872c8.841 2.694 19.206 4.244 30.29 4.244 11.083 0 21.452-1.542 30.294-4.233a18.858 18.858 0 0 0 9.666-6.863 19.028 19.028 0 0 0 3.696-11.304Z",
4814
+ fill: "#F2F2F2"
4815
+ }), /*#__PURE__*/React.createElement("path", {
4816
+ d: "M97.954 75.051c-10.068 0-19.88-1.371-28.381-3.957a12.353 12.353 0 0 1-6.262-4.485 12.463 12.463 0 0 1-2.41-7.34V45.131c.006-2.642.85-5.214 2.411-7.34a12.345 12.345 0 0 1 6.264-4.482c8.501-2.586 18.317-3.95 28.382-3.95 10.065 0 19.877 1.371 28.382 3.96a12.35 12.35 0 0 1 6.262 4.486 12.46 12.46 0 0 1 2.409 7.34V59.28a12.453 12.453 0 0 1-2.41 7.341 12.343 12.343 0 0 1-6.265 4.482c-8.486 2.585-18.317 3.949-28.382 3.949Zm2.909-59.059h-5.81v1.293h5.81v-1.293Z",
4817
+ fill: "#E6E6E6"
4818
+ }), /*#__PURE__*/React.createElement("path", {
4819
+ d: "M76.472 66.05c4.327 0 7.834-6.2 7.834-13.846 0-7.647-3.507-13.846-7.834-13.846-4.326 0-7.833 6.2-7.833 13.846s3.507 13.845 7.833 13.845Z",
4820
+ fill: "#1A1A1A"
4821
+ }), /*#__PURE__*/React.createElement("path", {
4822
+ d: "M77.844 52.766c1.743 0 3.157-2.088 3.157-4.664 0-2.577-1.414-4.665-3.157-4.665-1.744 0-3.157 2.088-3.157 4.665 0 2.576 1.413 4.664 3.157 4.664Z",
4823
+ fill: "#fff"
4824
+ }), /*#__PURE__*/React.createElement("path", {
4825
+ d: "M118.662 66.057c4.326 0 7.834-6.2 7.834-13.846s-3.508-13.845-7.834-13.845c-4.327 0-7.834 6.199-7.834 13.845 0 7.647 3.507 13.846 7.834 13.846Z",
4826
+ fill: "#1A1A1A"
4827
+ }), /*#__PURE__*/React.createElement("path", {
4828
+ d: "M120.032 52.774c1.744 0 3.157-2.089 3.157-4.665s-1.413-4.665-3.157-4.665c-1.743 0-3.157 2.089-3.157 4.665s1.414 4.665 3.157 4.665Z",
4829
+ fill: "#fff"
4830
+ }), /*#__PURE__*/React.createElement("path", {
4831
+ d: "M92.674 63.11a10.286 10.286 0 0 0 7.949 1.095 13.2 13.2 0 0 0 2.623-1.118.738.738 0 0 1 1.035.639.748.748 0 0 1-.119.453c-2.224 2.82-6.474 3.625-9.672 2.12a7.284 7.284 0 0 1-2.75-2.12.748.748 0 0 1 .465-1.139.738.738 0 0 1 .469.054v.015Z",
4832
+ fill: "#999"
4833
+ }), /*#__PURE__*/React.createElement("path", {
4834
+ d: "M101.117 9.562a3.035 3.035 0 0 0 3.027-3.043 3.035 3.035 0 0 0-3.027-3.043A3.035 3.035 0 0 0 98.09 6.52a3.035 3.035 0 0 0 3.027 3.043ZM51.578 54.84c.801 0 1.45-1.64 1.45-3.66 0-2.023-.649-3.662-1.45-3.662-.802 0-1.451 1.64-1.451 3.661 0 2.022.65 3.66 1.45 3.66Zm93.429 0c.802 0 1.451-1.64 1.451-3.66 0-2.023-.649-3.662-1.451-3.662-.801 0-1.45 1.64-1.45 3.661 0 2.022.649 3.66 1.45 3.66Z",
4835
+ fill: "#4BAAF7"
4836
+ }), /*#__PURE__*/React.createElement("g", {
4837
+ clipPath: `url(#${id}-b)`
4838
+ }, /*#__PURE__*/React.createElement("path", {
4839
+ d: "M52.39 160.841h-2.919a1.774 1.774 0 0 1-1.766-1.782v-7.334h9.035l-2.677 7.911a1.766 1.766 0 0 1-1.671 1.206l-.001-.001Zm91.774 0h2.919c.977 0 1.767-.799 1.767-1.782v-7.334h-9.036l2.677 7.911a1.767 1.767 0 0 0 1.672 1.206l.001-.001Z",
4840
+ fill: "#6D4932"
4841
+ }), /*#__PURE__*/React.createElement("path", {
4842
+ d: "M163.181 108.015H33.375c-2.37 0-4.291 1.479-4.291 3.305v2.216c0 1.825 1.921 3.305 4.29 3.305h129.807c2.369 0 4.29-1.48 4.29-3.305v-2.216c0-1.826-1.921-3.305-4.29-3.305Z",
4843
+ fill: "#A87B5D"
4844
+ }), /*#__PURE__*/React.createElement("path", {
4845
+ d: "M38.282 116.841h119.992v33.16c0 1.648-1.554 2.985-3.469 2.985H41.752c-1.915 0-3.468-1.337-3.468-2.985v-33.16h-.002Z",
4846
+ fill: "#916A50"
4847
+ }), /*#__PURE__*/React.createElement("path", {
4848
+ opacity: ".3",
4849
+ d: "M131.002 109.794h-97.18a.996.996 0 0 0-.992 1.001c0 .552.444 1 .992 1h97.18a.996.996 0 0 0 .991-1 .996.996 0 0 0-.991-1.001Zm30.849 0h-24.24a.996.996 0 0 0-.992 1.001c0 .552.444 1 .992 1h24.24a.996.996 0 0 0 .992-1 .996.996 0 0 0-.992-1.001Z",
4850
+ fill: "#D4B097"
4851
+ })), /*#__PURE__*/React.createElement("g", {
4852
+ clipPath: `url(#${id}-c)`
4853
+ }, /*#__PURE__*/React.createElement("path", {
4854
+ d: "M151.367 97.536h2.894c1.6 0 2.895 1.307 2.895 2.913a2.906 2.906 0 0 1-2.895 2.914h-2.894v-5.827Z",
4855
+ strokeWidth: "6",
4856
+ strokeMiterlimit: "10",
4857
+ stroke: `url(#${id}-d)`
4858
+ }), /*#__PURE__*/React.createElement("path", {
4859
+ d: "M135.876 93.304h17.017a.6.6 0 0 1 .597.602v10.166c0 1.942-1.566 3.522-3.499 3.522h-11.214c-1.933 0-3.499-1.58-3.499-3.522V93.906a.6.6 0 0 1 .598-.602Z",
4860
+ fill: `url(#${id}-e)`
4861
+ })), /*#__PURE__*/React.createElement("path", {
4862
+ d: "m37.492 78.174 38.863-6.725a3.453 3.453 0 0 1 3.455 3.45v30.087H34.04V81.623a3.452 3.452 0 0 1 3.452-3.45Z",
4863
+ fill: `url(#${id}-f)`
4864
+ }), /*#__PURE__*/React.createElement("path", {
4865
+ d: "M34.1 108.015v-3.363h57.697v3.363H34.1Z",
4866
+ fill: `url(#${id}-g)`
4867
+ }), /*#__PURE__*/React.createElement("path", {
4868
+ d: "M79.673 108.015v-3.363h12.124v3.363H79.673Z",
4869
+ fill: `url(#${id}-h)`
4870
+ })), /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement("linearGradient", {
4871
+ id: `${id}-d`,
4872
+ x1: "150.254",
4873
+ y1: "100.449",
4874
+ x2: "158.273",
4875
+ y2: "100.449",
4876
+ gradientUnits: "userSpaceOnUse"
4877
+ }, /*#__PURE__*/React.createElement("stop", {
4878
+ stopColor: "#FEFEFE"
4879
+ }), /*#__PURE__*/React.createElement("stop", {
4880
+ offset: "1",
4881
+ stopColor: "#fff"
4882
+ })), /*#__PURE__*/React.createElement("linearGradient", {
4883
+ id: `${id}-e`,
4884
+ x1: "132.629",
4885
+ y1: "100.449",
4886
+ x2: "155.32",
4887
+ y2: "100.449",
4888
+ gradientUnits: "userSpaceOnUse"
4889
+ }, /*#__PURE__*/React.createElement("stop", {
4890
+ stopColor: "#FEFEFE"
4891
+ }), /*#__PURE__*/React.createElement("stop", {
4892
+ offset: "1",
4893
+ stopColor: "#F3F3F3"
4894
+ })), /*#__PURE__*/React.createElement("linearGradient", {
4895
+ id: `${id}-f`,
4896
+ x1: "56.925",
4897
+ y1: "45.291",
4898
+ x2: "56.925",
4899
+ y2: "93.076",
4900
+ gradientUnits: "userSpaceOnUse"
4901
+ }, /*#__PURE__*/React.createElement("stop", {
4902
+ stopColor: "#FEFEFE"
4903
+ }), /*#__PURE__*/React.createElement("stop", {
4904
+ offset: "1",
4905
+ stopColor: "#D1D6E7"
4906
+ })), /*#__PURE__*/React.createElement("linearGradient", {
4907
+ id: `${id}-g`,
4908
+ x1: "62.684",
4909
+ y1: "108.015",
4910
+ x2: "62.684",
4911
+ y2: "104.85",
4912
+ gradientUnits: "userSpaceOnUse"
4913
+ }, /*#__PURE__*/React.createElement("stop", {
4914
+ stopColor: "#D2D6E8"
4915
+ }), /*#__PURE__*/React.createElement("stop", {
4916
+ offset: ".726",
4917
+ stopColor: "#D1D6E7"
4918
+ })), /*#__PURE__*/React.createElement("linearGradient", {
4919
+ id: `${id}-h`,
4920
+ x1: "85.68",
4921
+ y1: "108.015",
4922
+ x2: "85.68",
4923
+ y2: "104.85",
4924
+ gradientUnits: "userSpaceOnUse"
4925
+ }, /*#__PURE__*/React.createElement("stop", {
4926
+ stopColor: "#D8DDF1"
4927
+ }), /*#__PURE__*/React.createElement("stop", {
4928
+ offset: ".726",
4929
+ stopColor: "#E2E6F6"
4930
+ })), /*#__PURE__*/React.createElement("clipPath", {
4931
+ id: `${id}-a`
4932
+ }, /*#__PURE__*/React.createElement("path", {
4933
+ fill: "#fff",
4934
+ transform: "translate(12.006)",
4935
+ d: "M0 0h172v174H0z"
4936
+ })), /*#__PURE__*/React.createElement("clipPath", {
4937
+ id: `${id}-b`
4938
+ }, /*#__PURE__*/React.createElement("path", {
4939
+ fill: "#fff",
4940
+ transform: "translate(29.084 105.073)",
4941
+ d: "M0 0h138.387v68.927H0z"
4942
+ })), /*#__PURE__*/React.createElement("clipPath", {
4943
+ id: `${id}-c`
4944
+ }, /*#__PURE__*/React.createElement("path", {
4945
+ fill: "#fff",
4946
+ transform: "translate(135.278 93.304)",
4947
+ d: "M0 0h22.995v14.29H0z"
4948
+ }))));
4949
+ }
4950
+
4951
+ var styles$f = {"blank_state":"blank_state-wMOWN","image":"image-uy0Fd"};
4952
+
4953
+ function BlankState$1({
4954
+ image,
4955
+ role,
4956
+ subtitle,
4957
+ title
4958
+ }) {
4959
+ return /*#__PURE__*/React.createElement(tapestry.Flex, {
4960
+ role: role,
4961
+ className: styles$f.blank_state,
4962
+ direction: "column",
4963
+ align: "center",
4964
+ gap: 3
4965
+ }, /*#__PURE__*/React.createElement(tapestry.Flex, {
4966
+ className: styles$f.image
4967
+ }, image), /*#__PURE__*/React.createElement(tapestry.Flex, {
4968
+ direction: "column",
4969
+ align: "center",
4970
+ gap: 1
4971
+ }, /*#__PURE__*/React.createElement("h2", null, title), /*#__PURE__*/React.createElement("p", null, subtitle)));
4972
+ }
4199
4973
 
4200
4974
  function EndOfResultsObserver({
4201
4975
  onVisible
@@ -4215,39 +4989,98 @@ true;
4215
4989
 
4216
4990
  const resultId = (listboxId, index) => `${listboxId}-result-${index}`;
4217
4991
 
4218
- var styles$c = {"result":"result-Thq2C"};
4992
+ var styles$e = {"result":"result-Thq2C","title":"title-KYUEn","subtitle":"subtitle-R2haq","image":"image-KVDor","avatar":"avatar-6Gh62","photo":"photo-FZR3Q","badge":"badge-trUKt"};
4219
4993
 
4220
4994
  function SearchResult({
4995
+ category,
4996
+ describedBy,
4221
4997
  highlighted,
4222
4998
  id,
4999
+ imageUrl,
4223
5000
  onHighlight,
5001
+ product,
4224
5002
  subtitle,
4225
5003
  title,
4226
5004
  url
4227
5005
  }) {
4228
5006
  const ref = React.useRef(null);
5007
+ // A hovered result is already under the pointer, and scrolling it clear of
5008
+ // the panel's scroll padding would slide the list out from under the mouse.
5009
+ const highlightedByPointer = React.useRef(false);
4229
5010
  React.useEffect(() => {
4230
5011
  var _a;
4231
- if (highlighted) (_a = ref.current) === null || _a === void 0 ? void 0 : _a.scrollIntoView({
4232
- block: "nearest"
4233
- });
5012
+ if (!highlighted) return;
5013
+ if (highlightedByPointer.current) {
5014
+ highlightedByPointer.current = false;
5015
+ } else {
5016
+ (_a = ref.current) === null || _a === void 0 ? void 0 : _a.scrollIntoView({
5017
+ block: "nearest"
5018
+ });
5019
+ }
4234
5020
  }, [highlighted]);
5021
+ const highlightFromPointer = () => {
5022
+ if (highlighted) return;
5023
+ highlightedByPointer.current = true;
5024
+ onHighlight();
5025
+ };
4235
5026
  // Focus stays in the search input, which points at the highlighted result
4236
5027
  // with aria-activedescendant, so results are kept out of the tab order.
4237
5028
  // Mouse move rather than enter: arrowing scrolls results under a resting
4238
5029
  // pointer, and that shouldn't steal the highlight.
4239
- return /*#__PURE__*/React.createElement("a", {
4240
- "aria-selected": highlighted,
4241
- className: styles$c.result,
4242
- href: url,
4243
- id: id,
4244
- onMouseMove: onHighlight,
4245
- ref: ref,
4246
- role: "option",
4247
- tabIndex: -1
4248
- }, /*#__PURE__*/React.createElement("div", null, title), /*#__PURE__*/React.createElement("div", null, subtitle));
5030
+ return (
5031
+ /*#__PURE__*/
5032
+ // Named by the title alone, so screen readers say "Ada Lovelace" rather
5033
+ // than the whole row. The section and subtitle are read after a pause.
5034
+ React.createElement("a", {
5035
+ "aria-describedby": [describedBy, subtitle && `${id}-subtitle`].filter(Boolean).join(" ") || undefined,
5036
+ "aria-labelledby": title ? `${id}-title` : undefined,
5037
+ "aria-selected": highlighted,
5038
+ className: styles$e.result,
5039
+ href: url,
5040
+ id: id,
5041
+ onMouseMove: highlightFromPointer,
5042
+ ref: ref,
5043
+ role: "option",
5044
+ tabIndex: -1
5045
+ }, /*#__PURE__*/React.createElement(ResultImage, {
5046
+ category: category,
5047
+ imageUrl: imageUrl,
5048
+ product: product
5049
+ }), /*#__PURE__*/React.createElement("span", {
5050
+ className: styles$e.title,
5051
+ id: `${id}-title`
5052
+ }, title), /*#__PURE__*/React.createElement("span", {
5053
+ className: styles$e.subtitle,
5054
+ id: `${id}-subtitle`
5055
+ }, subtitle))
5056
+ );
5057
+ }
5058
+ // A person's photo or the result's own image, badged with its product, or
5059
+ // just the product's logomark when there's no image.
5060
+ function ResultImage({
5061
+ category,
5062
+ imageUrl,
5063
+ product
5064
+ }) {
5065
+ const icon = size => isProductIconSlug(product) ? (/*#__PURE__*/React.createElement(ProductIcon, {
5066
+ size: size,
5067
+ slug: product
5068
+ })) : null;
5069
+ return /*#__PURE__*/React.createElement("span", {
5070
+ "aria-hidden": true,
5071
+ className: styles$e.image
5072
+ }, imageUrl ? (/*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("img", {
5073
+ alt: "",
5074
+ className: category === "profile" ? styles$e.avatar : styles$e.photo,
5075
+ loading: "lazy",
5076
+ src: imageUrl
5077
+ }), /*#__PURE__*/React.createElement("span", {
5078
+ className: styles$e.badge
5079
+ }, icon(16)))) : icon("100%"));
4249
5080
  }
4250
5081
 
5082
+ var styles$d = {"heading":"heading-LioUF","group":"group-cKChg"};
5083
+
4251
5084
  // Sections with a heading render as labelled groups; ones without render
4252
5085
  // their items straight into the listbox. Indexes run across every section.
4253
5086
  function ResultListbox({
@@ -4260,13 +5093,19 @@ true;
4260
5093
  sections
4261
5094
  }) {
4262
5095
  let index = 0;
4263
- const renderItem = item => {
5096
+ // With aria-activedescendant, screen readers don't reliably announce the
5097
+ // group a highlighted option is in, so each option names its heading too.
5098
+ const renderItem = (item, headingId) => {
4264
5099
  const itemIndex = index++;
4265
5100
  return /*#__PURE__*/React.createElement(SearchResult, {
5101
+ category: item.category,
5102
+ describedBy: headingId,
4266
5103
  highlighted: itemIndex === highlightedIndex,
4267
5104
  id: resultId(id, itemIndex),
5105
+ imageUrl: item.imageUrl,
4268
5106
  key: item.key,
4269
5107
  onHighlight: () => onHighlight(itemIndex),
5108
+ product: item.product,
4270
5109
  subtitle: item.subtitle,
4271
5110
  title: item.title,
4272
5111
  url: item.url
@@ -4282,16 +5121,18 @@ true;
4282
5121
  if (section.heading === undefined) {
4283
5122
  return /*#__PURE__*/React.createElement(React.Fragment, {
4284
5123
  key: section.key
4285
- }, section.items.map(renderItem));
5124
+ }, section.items.map(item => renderItem(item)));
4286
5125
  }
4287
5126
  const headingId = `${id}-group-${sectionIndex}`;
4288
5127
  return /*#__PURE__*/React.createElement("div", {
4289
5128
  "aria-labelledby": headingId,
5129
+ className: styles$d.group,
4290
5130
  key: section.key,
4291
5131
  role: "group"
4292
5132
  }, /*#__PURE__*/React.createElement("div", {
5133
+ className: styles$d.heading,
4293
5134
  id: headingId
4294
- }, section.heading), section.items.map(renderItem));
5135
+ }, section.heading), section.items.map(item => renderItem(item, headingId)));
4295
5136
  }));
4296
5137
  }
4297
5138
 
@@ -4305,9 +5146,14 @@ true;
4305
5146
  }) {
4306
5147
  const headingId = `${navigation.id}-heading`;
4307
5148
  if (items.length === 0 && !hasMore && !loading) {
4308
- return /*#__PURE__*/React.createElement("p", null, "Pages you visit will show up here.");
5149
+ return /*#__PURE__*/React.createElement(BlankState$1, {
5150
+ image: /*#__PURE__*/React.createElement(BlankStateRecentlyVisited, null),
5151
+ subtitle: "Pages you visit will show up here.",
5152
+ title: "Recently visited"
5153
+ });
4309
5154
  } else {
4310
5155
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
5156
+ className: styles$d.heading,
4311
5157
  id: headingId
4312
5158
  }, "Recently visited"), /*#__PURE__*/React.createElement(ResultListbox, {
4313
5159
  labelledBy: headingId,
@@ -4323,6 +5169,8 @@ true;
4323
5169
  }
4324
5170
  }
4325
5171
 
5172
+ var styles$c = {"row":"row-5P7UQ","header":"header-sXEyG","closeButton":"closeButton-rPJJV","input":"input-YQkTC","clearButton":"clearButton-9Yh9w"};
5173
+
4326
5174
  // A combobox: focus stays here while aria-activedescendant points screen
4327
5175
  // readers at the highlighted result in the listbox it controls.
4328
5176
  function SearchInput({
@@ -4331,29 +5179,433 @@ true;
4331
5179
  inputRef,
4332
5180
  listboxId,
4333
5181
  onChange,
5182
+ onClose,
4334
5183
  onFocus,
4335
5184
  onKeyDown,
4336
5185
  value
4337
5186
  }) {
4338
- return /*#__PURE__*/React.createElement("input", {
5187
+ const {
5188
+ focusProps
5189
+ } = useKeyboardFocus({
5190
+ onFocus: (event, keyboard) => {
5191
+ // Tabbing in selects the whole term, which the next keystroke would
5192
+ // replace. Put the cursor after it instead, to keep typing. The
5193
+ // browser selects after the focus event, so this waits a frame and
5194
+ // only undoes that select-all: typing on the tabs moves focus here by
5195
+ // script, which keeps the cursor, and the keystroke may already be in.
5196
+ if (keyboard) {
5197
+ const input = event.currentTarget;
5198
+ requestAnimationFrame(() => {
5199
+ const length = input.value.length;
5200
+ const selectedAll = length > 0 && input.selectionStart === 0 && input.selectionEnd === length;
5201
+ if (document.activeElement !== input || !selectedAll) return;
5202
+ input.setSelectionRange(length, length);
5203
+ });
5204
+ }
5205
+ onFocus();
5206
+ }
5207
+ });
5208
+ return /*#__PURE__*/React.createElement("div", {
5209
+ className: styles$c.row
5210
+ }, /*#__PURE__*/React.createElement("label", {
5211
+ className: styles$c.header
5212
+ }, /*#__PURE__*/React.createElement(Icon, {
5213
+ name: "general.search",
5214
+ size: 20,
5215
+ theme: "--t-icon-color-dim"
5216
+ }), /*#__PURE__*/React.createElement("input", {
4339
5217
  "aria-activedescendant": highlightedIndex === null ? undefined : resultId(listboxId, highlightedIndex),
4340
5218
  "aria-autocomplete": "list",
4341
5219
  "aria-controls": expanded ? listboxId : undefined,
4342
5220
  "aria-expanded": expanded,
4343
5221
  "aria-label": "Search",
4344
5222
  autoFocus: true,
5223
+ className: styles$c.input,
5224
+ id: "product_search",
4345
5225
  onChange: event => onChange(event.target.value),
4346
- onFocus: onFocus,
4347
5226
  onKeyDown: onKeyDown,
4348
5227
  placeholder: "Search",
4349
5228
  ref: inputRef,
4350
5229
  role: "combobox",
4351
5230
  type: "search",
4352
- value: value
4353
- });
5231
+ value: value,
5232
+ ...focusProps
5233
+ }), !onClose && value !== "" && (/*#__PURE__*/React.createElement("button", {
5234
+ "aria-label": "Clear search",
5235
+ className: styles$c.clearButton,
5236
+ onClick: () => {
5237
+ var _a;
5238
+ onChange("");
5239
+ (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
5240
+ },
5241
+ tabIndex: -1,
5242
+ type: "button"
5243
+ }, /*#__PURE__*/React.createElement(Icon, {
5244
+ name: "general.smallX"
5245
+ })))), onClose && (/*#__PURE__*/React.createElement(tapestry.IconButton, {
5246
+ "aria-label": "Close search",
5247
+ className: styles$c.closeButton,
5248
+ icon: /*#__PURE__*/React.createElement(Icon, {
5249
+ name: "general.x",
5250
+ theme: "--t-icon-color-dim"
5251
+ }),
5252
+ kind: "ghost",
5253
+ onClick: onClose,
5254
+ size: "md"
5255
+ })));
5256
+ }
5257
+
5258
+ function BlankStateError(props) {
5259
+ const id = useInstanceId("blank-state-error");
5260
+ return /*#__PURE__*/React.createElement("svg", {
5261
+ viewBox: "0 0 197 158",
5262
+ fill: "none",
5263
+ "aria-hidden": "true",
5264
+ focusable: "false",
5265
+ ...props
5266
+ }, /*#__PURE__*/React.createElement("path", {
5267
+ d: "M139.863 26.119c10.938 10.028 21.777 20.154 32.912 30.084 8.376 7.373 21.975 15.828 23.157 28.02.592 6.095-2.167 11.993-5.321 17.204-24.635 40.8-81.098 67.148-127.412 48.862-30.646-12.093-76.172-47.387-59.716-85.041C19.348 28.87 68.323 10.192 87.44 7.538c21.876-4.621 34.883 2.457 52.423 18.58Z",
5268
+ fill: "currentColor"
5269
+ }), /*#__PURE__*/React.createElement("g", {
5270
+ clipPath: `url(#${id}-a)`
5271
+ }, /*#__PURE__*/React.createElement("path", {
5272
+ d: "M76.296 111.268c-2.63 0-5.95-.883-9.822-3.622a3.39 3.39 0 0 1-1.375-2.212 3.375 3.375 0 0 1 .603-2.529 3.44 3.44 0 0 1 4.777-.767c5.305 3.786 7.949 1.838 8.056 1.767a1.23 1.23 0 0 0-.094.08l4.62 5.004a10.434 10.434 0 0 1-6.765 2.279Z",
5273
+ fill: "#4D4D4D"
5274
+ }), /*#__PURE__*/React.createElement("path", {
5275
+ d: "M83.313 102.999a2.751 2.751 0 0 0-2.882-2.611 2.747 2.747 0 0 0-2.63 2.86l.399 8.688a2.751 2.751 0 0 0 2.882 2.611 2.746 2.746 0 0 0 2.63-2.86l-.399-8.688Z",
5276
+ fill: "gray"
5277
+ }), /*#__PURE__*/React.createElement("path", {
5278
+ d: "M119.428 111.268a10.438 10.438 0 0 1-6.751-2.292l4.619-5.005a1.387 1.387 0 0 0-.093-.079c.106.084 2.75 2.032 8.055-1.767a3.439 3.439 0 0 1 4.777.766 3.378 3.378 0 0 1-.772 4.742c-3.885 2.774-7.205 3.635-9.835 3.635Z",
5279
+ fill: "#4D4D4D"
5280
+ }), /*#__PURE__*/React.createElement("path", {
5281
+ d: "M101.658 18.962H94.68v1.533h6.978v-1.533Z",
5282
+ fill: "#F2F2F2"
5283
+ }), /*#__PURE__*/React.createElement("path", {
5284
+ d: "M91.823 74.82a12.502 12.502 0 0 0 9.546 1.299 16.005 16.005 0 0 0 3.151-1.326.894.894 0 0 1 1.035.24.882.882 0 0 1 .064 1.053c-2.67 3.345-7.775 4.294-11.62 2.514a8.803 8.803 0 0 1-3.302-2.513.879.879 0 0 1 .561-1.353.887.887 0 0 1 .565.068v.017Z",
5285
+ fill: "#999"
5286
+ }), /*#__PURE__*/React.createElement("path", {
5287
+ d: "M88.236 143.397a3.433 3.433 0 0 1-2.304-.891 3.383 3.383 0 0 1-1.096-2.201c-.636-6.788 4.237-16.369 4.798-17.442a3.41 3.41 0 0 1 2-1.643 3.442 3.442 0 0 1 2.586.227 3.398 3.398 0 0 1 1.68 1.965 3.368 3.368 0 0 1-.196 2.569c-1.75 3.37-4.402 10.066-4.059 13.693a3.38 3.38 0 0 1-.773 2.479 3.43 3.43 0 0 1-2.31 1.213l-.326.031Z",
5288
+ fill: "#4D4D4D"
5289
+ }), /*#__PURE__*/React.createElement("path", {
5290
+ d: "M91.645 132.708c3.972 0 7.192-3.195 7.192-7.138 0-3.942-3.22-7.137-7.192-7.137s-7.191 3.195-7.191 7.137c0 3.943 3.22 7.138 7.191 7.138Z",
5291
+ fill: "gray"
5292
+ }), /*#__PURE__*/React.createElement("path", {
5293
+ d: "M77.765 152.218h14.134v4.417c0 .351-.141.689-.391.937-.25.249-.59.388-.944.388H75.33a1.34 1.34 0 0 1-.945-.388 1.32 1.32 0 0 1-.39-.937v-.671c0-.997.398-1.953 1.109-2.658a3.801 3.801 0 0 1 2.678-1.101l-.018.013Z",
5294
+ fill: "#333"
5295
+ }), /*#__PURE__*/React.createElement("path", {
5296
+ d: "M88.548 156.141s9.697.141 7.592-9.797c-2.105-9.939-14.641-18.198-18.295-7.191-3.654 11.007-1.695 18.056 10.703 16.988Z",
5297
+ fill: "#F2F2F2"
5298
+ }), /*#__PURE__*/React.createElement("path", {
5299
+ d: "M109.077 143.402h-.325a3.427 3.427 0 0 1-2.313-1.216 3.38 3.38 0 0 1-.771-2.481c.342-3.627-2.305-10.323-4.054-13.693a3.371 3.371 0 0 1-.11-2.514c.29-.821.887-1.5 1.666-1.897a3.44 3.44 0 0 1 2.525-.236 3.413 3.413 0 0 1 1.993 1.555c.556 1.069 5.429 10.654 4.789 17.443a3.383 3.383 0 0 1-1.113 2.167 3.426 3.426 0 0 1-2.287.872Z",
5300
+ fill: "#4D4D4D"
5301
+ }), /*#__PURE__*/React.createElement("path", {
5302
+ d: "M105.672 132.708c3.972 0 7.192-3.195 7.192-7.138 0-3.942-3.22-7.137-7.192-7.137s-7.191 3.195-7.191 7.137c0 3.943 3.219 7.138 7.191 7.138Z",
5303
+ fill: "gray"
5304
+ }), /*#__PURE__*/React.createElement("path", {
5305
+ d: "m121.972 158.007-15.22-.003c-.354 0-.693-.139-.943-.388a1.317 1.317 0 0 1-.391-.937v-4.417l14.139.003c1.004 0 1.967.396 2.678 1.101a3.745 3.745 0 0 1 1.108 2.658v.671c0 .352-.141.689-.391.937-.25.249-.59.388-.944.388l-.036-.013Z",
5306
+ fill: "#333"
5307
+ }), /*#__PURE__*/React.createElement("path", {
5308
+ d: "M108.769 156.145s-9.701.137-7.587-9.801c2.114-9.939 14.645-18.19 18.295-7.187 3.649 11.003 1.682 18.061-10.708 16.988Z",
5309
+ fill: "#F2F2F2"
5310
+ }), /*#__PURE__*/React.createElement("path", {
5311
+ d: "M112.002 111.683c-.07 1.51 1.108 2.791 2.63 2.86a2.75 2.75 0 0 0 2.882-2.611l.399-8.688a2.746 2.746 0 0 0-2.63-2.86 2.75 2.75 0 0 0-2.882 2.611l-.399 8.688Z",
5312
+ fill: "gray"
5313
+ }), /*#__PURE__*/React.createElement("path", {
5314
+ d: "M47.508 75.88c5.223 0 9.457-6.265 9.457-13.994 0-7.728-4.234-13.993-9.457-13.993-5.223 0-9.457 6.265-9.457 13.993 0 7.729 4.234 13.993 9.457 13.993Zm101.082.017c5.223 0 9.457-6.265 9.457-13.993 0-7.728-4.234-13.993-9.457-13.993-5.223 0-9.457 6.265-9.457 13.993 0 7.728 4.234 13.993 9.457 13.993Z",
5315
+ fill: "#3690EA"
5316
+ }), /*#__PURE__*/React.createElement("path", {
5317
+ d: "M94.622 16.97c-.133-.574 7.868-1.1 6.987.296 0 .305 0 .61.022.914 0 .884.04 1.767.04 2.681 0 .915.041 1.886.054 2.832.334.706-7.78 1.113-6.991-.133v-.795c-.036-1.935-.09-3.86-.112-5.795Z",
5318
+ fill: "#F2F2F2"
5319
+ }), /*#__PURE__*/React.createElement("path", {
5320
+ d: "M98.174 34.426c8.734 0 15.816-2.636 15.816-5.888s-7.082-5.888-15.816-5.888c-8.736 0-15.817 2.637-15.817 5.888 0 3.252 7.082 5.888 15.817 5.888Z",
5321
+ fill: "#B3B3B3"
5322
+ }), /*#__PURE__*/React.createElement("path", {
5323
+ d: "M98.174 19.625c5.458 0 9.883-4.393 9.883-9.81 0-5.418-4.425-9.81-9.883-9.81-5.46 0-9.884 4.392-9.884 9.81s4.425 9.81 9.883 9.81Z",
5324
+ fill: "#3690EA"
5325
+ }), /*#__PURE__*/React.createElement("path", {
5326
+ d: "M116.339 111.123c-.614-10.782-8.958-13.874-19.002-13.309-10.044.566-17.979 4.567-17.356 15.354.623 10.786 9.252 19.063 19.296 18.498 10.044-.565 17.676-9.761 17.062-20.543Z",
5327
+ fill: "#F2F2F2"
5328
+ }), /*#__PURE__*/React.createElement("path", {
5329
+ d: "M116.139 109.4c-1.268 8.891-8.171 15.901-16.884 16.378-9.43.53-17.623-6.74-19.096-16.559a17.615 17.615 0 0 0-.205 3.949c.619 10.781 9.257 19.063 19.297 18.498 10.039-.566 17.685-9.762 17.07-20.544a11.69 11.69 0 0 0-.182-1.722Z",
5330
+ fill: "#E6E6E6"
5331
+ }), /*#__PURE__*/React.createElement("path", {
5332
+ d: "M94.609 92.558c-.134-.579 7.868-1.1 6.987.291v.915c0 .883.035 1.789.04 2.68.004.893.04 1.891.053 2.837.334.702-7.779 1.108-6.991-.137v-.796c-.013-1.93-.067-3.86-.089-5.79Z",
5333
+ fill: "#999"
5334
+ }), /*#__PURE__*/React.createElement("path", {
5335
+ d: "M150.588 70.279V53.525a22.366 22.366 0 0 0-4.425-13.4 22.645 22.645 0 0 0-11.596-8.146c-10.613-3.19-23.061-5.027-36.376-5.031-13.315-.004-25.762 1.833-36.38 5.018a22.654 22.654 0 0 0-11.609 8.14 22.374 22.374 0 0 0-4.438 13.401v16.754a22.375 22.375 0 0 0 4.435 13.403 22.654 22.654 0 0 0 11.607 8.143c10.614 3.19 23.061 5.026 36.376 5.031 13.315.004 25.763-1.833 36.376-5.018a22.658 22.658 0 0 0 11.598-8.144 22.377 22.377 0 0 0 4.432-13.397Z",
5336
+ fill: "#F2F2F2"
5337
+ }), /*#__PURE__*/React.createElement("path", {
5338
+ d: "M98.16 88.976c-12.087 0-23.87-1.626-34.08-4.695a14.817 14.817 0 0 1-7.522-5.316 14.635 14.635 0 0 1-2.891-8.704V53.507a14.64 14.64 0 0 1 2.89-8.698 14.82 14.82 0 0 1 7.514-5.317c10.21-3.065 21.993-4.682 34.085-4.682 12.091 0 23.871 1.626 34.079 4.696a14.817 14.817 0 0 1 7.523 5.315 14.635 14.635 0 0 1 2.891 8.704V70.28a14.635 14.635 0 0 1-2.897 8.703 14.824 14.824 0 0 1-7.525 5.312c-10.191 3.047-21.976 4.682-34.067 4.682Zm3.498-70.014H94.68v1.533h6.978v-1.533Z",
5339
+ fill: "#E6E6E6"
5340
+ }), /*#__PURE__*/React.createElement("path", {
5341
+ d: "M72.367 78.304c5.195 0 9.407-7.348 9.407-16.413 0-9.065-4.212-16.414-9.407-16.414-5.196 0-9.408 7.349-9.408 16.414 0 9.065 4.212 16.413 9.408 16.413Z",
5342
+ fill: "#1A1A1A"
5343
+ }), /*#__PURE__*/React.createElement("path", {
5344
+ d: "M74.013 62.558c2.094 0 3.792-2.476 3.792-5.53 0-3.054-1.698-5.53-3.792-5.53s-3.791 2.476-3.791 5.53c0 3.054 1.697 5.53 3.791 5.53Z",
5345
+ fill: "#fff"
5346
+ }), /*#__PURE__*/React.createElement("path", {
5347
+ d: "M123.032 78.313c5.196 0 9.408-7.349 9.408-16.413 0-9.065-4.212-16.414-9.408-16.414-5.195 0-9.407 7.349-9.407 16.414 0 9.065 4.212 16.413 9.407 16.413Z",
5348
+ fill: "#1A1A1A"
5349
+ }), /*#__PURE__*/React.createElement("path", {
5350
+ d: "M124.679 62.567c2.094 0 3.792-2.476 3.792-5.53 0-3.054-1.698-5.53-3.792-5.53s-3.792 2.476-3.792 5.53c0 3.054 1.698 5.53 3.792 5.53Z",
5351
+ fill: "#fff"
5352
+ }), /*#__PURE__*/React.createElement("path", {
5353
+ d: "M105.325 106.675H90.991a.74.74 0 0 0-.743.737v2.089a.74.74 0 0 0 .743.738h14.334a.74.74 0 0 0 .743-.738v-2.089a.74.74 0 0 0-.743-.737Zm0 6.148H90.991a.74.74 0 0 0-.743.738v2.089a.74.74 0 0 0 .743.738h14.334c.41 0 .743-.331.743-.738v-2.089a.74.74 0 0 0-.743-.738Zm-.004 6.153H90.987a.74.74 0 0 0-.744.737v2.09a.74.74 0 0 0 .744.737h14.334a.74.74 0 0 0 .743-.737v-2.09a.74.74 0 0 0-.743-.737Z",
5354
+ fill: "#3690EA"
5355
+ }), /*#__PURE__*/React.createElement("path", {
5356
+ d: "M140.653 109.023c5.67-4.178 7.656-11.053 4.438-15.356-3.219-4.303-10.424-4.405-16.094-.227-5.67 4.177-7.656 11.052-4.438 15.356 3.219 4.303 10.424 4.405 16.094.227Z",
5357
+ fill: "#F2F2F2"
5358
+ }), /*#__PURE__*/React.createElement("path", {
5359
+ d: "M144.211 97.717c-3.217-4.302-10.422-4.417-16.092-.23a15.277 15.277 0 0 0-5.087 6.339c.067-3.613 2.194-7.58 5.964-10.358 5.669-4.174 12.874-4.073 16.092.23 1.86 2.486 1.976 5.83.649 9.019a7.943 7.943 0 0 0-1.526-5Z",
5360
+ fill: "#E6E6E6"
5361
+ }), /*#__PURE__*/React.createElement("path", {
5362
+ d: "M141.051 91.524c.966-1.66.874-3.508-.205-4.126-1.08-.618-2.737.226-3.703 1.887-.966 1.66-.874 3.508.205 4.126 1.079.619 2.737-.226 3.703-1.887Z",
5363
+ fill: "#333"
5364
+ }), /*#__PURE__*/React.createElement("path", {
5365
+ d: "M142.711 103.49c4.151 0 7.517-3.34 7.517-7.46s-3.366-7.46-7.517-7.46-7.516 3.34-7.516 7.46 3.365 7.46 7.516 7.46Z",
5366
+ fill: "#333"
5367
+ }), /*#__PURE__*/React.createElement("path", {
5368
+ d: "M70.234 108.894c3.219-4.303 1.232-11.178-4.437-15.356-5.67-4.178-12.875-4.076-16.094.227-3.219 4.303-1.232 11.179 4.438 15.356 5.67 4.178 12.875 4.076 16.093-.227Z",
5369
+ fill: "#F2F2F2"
5370
+ }), /*#__PURE__*/React.createElement("path", {
5371
+ d: "M50.574 97.717c3.218-4.302 10.422-4.417 16.092-.23a15.273 15.273 0 0 1 5.087 6.339c-.067-3.613-2.194-7.58-5.964-10.358-5.67-4.174-12.874-4.073-16.092.23-1.86 2.486-1.971 5.83-.65 9.019a7.945 7.945 0 0 1 1.527-5Z",
5372
+ fill: "#E6E6E6"
5373
+ }), /*#__PURE__*/React.createElement("path", {
5374
+ d: "M57.434 93.41c1.08-.618 1.171-2.466.206-4.126-.966-1.66-2.624-2.506-3.703-1.887-1.08.618-1.171 2.466-.205 4.126.965 1.66 2.623 2.506 3.702 1.887Z",
5375
+ fill: "#333"
5376
+ }), /*#__PURE__*/React.createElement("path", {
5377
+ d: "M52.074 103.49c4.151 0 7.516-3.34 7.516-7.46s-3.365-7.46-7.516-7.46-7.517 3.34-7.517 7.46 3.366 7.46 7.517 7.46Z",
5378
+ fill: "#333"
5379
+ }), /*#__PURE__*/React.createElement("path", {
5380
+ d: "M98.485 83.08c1.523-.183 2.609-1.544 2.426-3.041-.183-1.497-1.565-2.561-3.088-2.378-1.522.183-2.608 1.544-2.425 3.041.182 1.497 1.565 2.561 3.087 2.378Z",
5381
+ fill: "#1A1A1A"
5382
+ }), /*#__PURE__*/React.createElement("path", {
5383
+ d: "M101.729 11.17c1.733 0 3.138-1.394 3.138-3.113 0-1.72-1.405-3.114-3.138-3.114-1.733 0-3.137 1.394-3.137 3.114s1.404 3.114 3.137 3.114Zm52.37 52.753c.829 0 1.5-1.677 1.5-3.746s-.671-3.746-1.5-3.746c-.828 0-1.499 1.677-1.499 3.746s.671 3.746 1.499 3.746Zm-111.549 0c.829 0 1.5-1.677 1.5-3.746s-.671-3.746-1.5-3.746c-.828 0-1.5 1.677-1.5 3.746s.672 3.746 1.5 3.746Z",
5384
+ fill: "#4BAAF7"
5385
+ })), /*#__PURE__*/React.createElement("mask", {
5386
+ id: `${id}-b`,
5387
+ style: {
5388
+ maskType: "alpha"
5389
+ },
5390
+ maskUnits: "userSpaceOnUse",
5391
+ x: "0",
5392
+ y: "6",
5393
+ width: "197",
5394
+ height: "151"
5395
+ }, /*#__PURE__*/React.createElement("path", {
5396
+ d: "M139.863 26.12c10.938 10.028 21.777 20.154 32.912 30.084 8.376 7.373 21.975 15.828 23.157 28.02.592 6.095-2.167 11.993-5.321 17.204-24.635 40.8-81.098 67.148-127.412 48.862-30.646-12.093-76.172-47.387-59.716-85.041 15.865-36.377 64.84-55.056 83.957-57.71 21.876-4.621 34.883 2.457 52.423 18.58Z",
5397
+ fill: "#CEE1FF",
5398
+ fillOpacity: ".8"
5399
+ })), /*#__PURE__*/React.createElement("g", {
5400
+ mask: `url(#${id}-b)`
5401
+ }, /*#__PURE__*/React.createElement("path", {
5402
+ d: "m59.006 101 8 4m-4 1-4-5h6",
5403
+ stroke: "#FFD463"
5404
+ }), /*#__PURE__*/React.createElement("path", {
5405
+ d: "M60.006 100.999c-14.02-9.35-30.69-13.01-50-11S-26.916 103.01-38.276 115",
5406
+ strokeWidth: "2",
5407
+ stroke: "#fff"
5408
+ }), /*#__PURE__*/React.createElement("path", {
5409
+ d: "m125.304 89-8.08 3.84m1.68-3.77 6.4-.07-3.7 4.72",
5410
+ stroke: "#FFD463"
5411
+ }), /*#__PURE__*/React.createElement("path", {
5412
+ d: "M123.724 89.5c26.45-8.66 23 40.5 47 42.5 22.399 1.867 36.5-31.001 63 12",
5413
+ strokeWidth: "2",
5414
+ stroke: "#fff"
5415
+ })), /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement("clipPath", {
5416
+ id: `${id}-a`
5417
+ }, /*#__PURE__*/React.createElement("path", {
5418
+ fill: "#fff",
5419
+ transform: "translate(38.051)",
5420
+ d: "M0 0h120v158H0z"
5421
+ }))));
5422
+ }
5423
+
5424
+ function BlankStateNoResults(props) {
5425
+ const id = useInstanceId("blank-state-no-results");
5426
+ return /*#__PURE__*/React.createElement("svg", {
5427
+ viewBox: "0 0 197 152",
5428
+ fill: "none",
5429
+ "aria-hidden": "true",
5430
+ focusable: "false",
5431
+ ...props
5432
+ }, /*#__PURE__*/React.createElement("path", {
5433
+ d: "M139.863 19.971C150.801 30 161.64 40.126 172.775 50.055c8.376 7.374 21.975 15.829 23.157 28.02.592 6.095-2.167 11.994-5.321 17.205-24.635 40.8-81.098 67.148-127.412 48.862C32.553 132.049-12.973 96.754 3.483 59.1 19.348 22.724 68.323 4.044 87.44 1.39c21.876-4.62 34.883 2.458 52.423 18.581Z",
5434
+ fill: "currentColor"
5435
+ }), /*#__PURE__*/React.createElement("path", {
5436
+ d: "M94.382 27.326c4.859 0 8.797-3.932 8.797-8.783 0-4.85-3.938-8.783-8.797-8.783-4.858 0-8.796 3.933-8.796 8.783 0 4.851 3.938 8.783 8.796 8.783Z",
5437
+ fill: "#3690EA"
5438
+ }), /*#__PURE__*/React.createElement("path", {
5439
+ d: "M97.481 19.861a3.22 3.22 0 0 0 3.222-3.217 3.22 3.22 0 0 0-3.222-3.217 3.22 3.22 0 0 0-3.222 3.217 3.22 3.22 0 0 0 3.222 3.217Z",
5440
+ fill: "#4BAAF7"
5441
+ }), /*#__PURE__*/React.createElement("path", {
5442
+ d: "M97.564 26.688h-6.248v3.565h6.248v-3.565Z",
5443
+ fill: "#F2F2F2"
5444
+ }), /*#__PURE__*/React.createElement("path", {
5445
+ d: "M49.297 77.706c4.649 0 8.417-5.61 8.417-12.53 0-6.921-3.768-12.531-8.417-12.531s-8.417 5.61-8.417 12.53c0 6.92 3.768 12.531 8.417 12.531Zm89.958 0c4.649 0 8.417-5.61 8.417-12.53 0-6.921-3.768-12.531-8.417-12.531s-8.417 5.61-8.417 12.53c0 6.92 3.768 12.531 8.417 12.531Z",
5446
+ fill: "#3690EA"
5447
+ }), /*#__PURE__*/React.createElement("path", {
5448
+ d: "M94.379 40.574c7.774 0 14.076-2.36 14.076-5.271 0-2.912-6.302-5.272-14.076-5.272-7.774 0-14.076 2.36-14.076 5.272 0 2.911 6.302 5.271 14.076 5.271Z",
5449
+ fill: "#B3B3B3"
5450
+ }), /*#__PURE__*/React.createElement("path", {
5451
+ d: "M141.036 72.671V57.672a20.118 20.118 0 0 0-3.949-12 20.166 20.166 0 0 0-10.333-7.29c-9.448-2.852-20.529-4.497-32.379-4.497-11.849 0-22.926 1.645-32.374 4.497a20.167 20.167 0 0 0-10.331 7.29 20.117 20.117 0 0 0-3.95 12v15a20.112 20.112 0 0 0 3.949 12A20.163 20.163 0 0 0 62 91.962c9.448 2.856 20.53 4.496 32.375 4.496 11.844 0 22.93-1.64 32.378-4.496a20.153 20.153 0 0 0 10.333-7.289 20.107 20.107 0 0 0 3.949-12.002Z",
5452
+ fill: "#F2F2F2"
5453
+ }), /*#__PURE__*/React.createElement("path", {
5454
+ d: "M94.387 89.422c-10.76 0-21.248-1.448-30.348-4.193a13.19 13.19 0 0 1-6.698-4.759 13.159 13.159 0 0 1-2.576-7.794v-15a13.163 13.163 0 0 1 2.577-7.793 13.196 13.196 0 0 1 6.697-4.76c9.082-2.744 19.574-4.193 30.348-4.193 10.773 0 21.248 1.449 30.348 4.194a13.2 13.2 0 0 1 6.701 4.757 13.17 13.17 0 0 1 2.582 7.795v15a13.164 13.164 0 0 1-2.577 7.794 13.195 13.195 0 0 1-6.697 4.759c-9.109 2.727-19.597 4.193-30.357 4.193Z",
5455
+ fill: "#E6E6E6"
5456
+ }), /*#__PURE__*/React.createElement("path", {
5457
+ d: "M71.426 79.868c4.624 0 8.373-6.58 8.373-14.696s-3.749-14.696-8.373-14.696c-4.624 0-8.372 6.58-8.372 14.696 0 8.117 3.748 14.697 8.372 14.697Z",
5458
+ fill: "#1A1A1A"
5459
+ }), /*#__PURE__*/React.createElement("path", {
5460
+ d: "M72.894 65.765c1.863 0 3.373-2.217 3.373-4.95 0-2.735-1.51-4.952-3.373-4.952-1.864 0-3.375 2.217-3.375 4.951 0 2.734 1.511 4.95 3.374 4.95Z",
5461
+ fill: "#fff"
5462
+ }), /*#__PURE__*/React.createElement("path", {
5463
+ d: "M116.517 79.868c4.624 0 8.373-6.58 8.373-14.696s-3.749-14.696-8.373-14.696c-4.624 0-8.372 6.58-8.372 14.696 0 8.117 3.748 14.697 8.372 14.697Z",
5464
+ fill: "#1A1A1A"
5465
+ }), /*#__PURE__*/React.createElement("path", {
5466
+ d: "M117.981 65.765c1.864 0 3.374-2.217 3.374-4.95 0-2.735-1.51-4.952-3.374-4.952-1.863 0-3.374 2.217-3.374 4.951 0 2.734 1.511 4.95 3.374 4.95Z",
5467
+ fill: "#fff"
5468
+ }), /*#__PURE__*/React.createElement("path", {
5469
+ d: "M100.012 80.196a14.156 14.156 0 0 0-2.785-1.159 10.598 10.598 0 0 0-5.713 0 14.09 14.09 0 0 0-2.78 1.159h-.027a.773.773 0 0 1-.973-1.159 8.74 8.74 0 0 1 6.639-3.049 8.754 8.754 0 0 1 6.638 3.05.773.773 0 0 1-.977 1.158h-.022Z",
5470
+ fill: "#999"
5471
+ }), /*#__PURE__*/React.createElement("path", {
5472
+ d: "M44.788 67.69c.853 0 1.545-1.731 1.545-3.867 0-2.137-.692-3.868-1.545-3.868-.852 0-1.544 1.731-1.544 3.867 0 2.137.691 3.868 1.544 3.868Zm99.38 0c.853 0 1.544-1.731 1.544-3.867 0-2.137-.691-3.868-1.544-3.868-.853 0-1.544 1.731-1.544 3.867 0 2.137.691 3.868 1.544 3.868Z",
5473
+ fill: "#4BAAF7"
5474
+ }), /*#__PURE__*/React.createElement("path", {
5475
+ d: "M79.596 106.857s-13.835 0-13.835-18.752",
5476
+ strokeWidth: "13.63",
5477
+ strokeMiterlimit: "10",
5478
+ strokeLinecap: "round",
5479
+ stroke: "#4D4D4D"
5480
+ }), /*#__PURE__*/React.createElement("path", {
5481
+ d: "M79.295 99.708h-.004a2.453 2.453 0 0 0-2.34 2.56l.353 7.781a2.453 2.453 0 0 0 2.564 2.337h.004a2.452 2.452 0 0 0 2.34-2.559l-.353-7.782a2.453 2.453 0 0 0-2.564-2.337Z",
5482
+ fill: "gray"
5483
+ }), /*#__PURE__*/React.createElement("path", {
5484
+ d: "M109.137 104.385s3.851 3.681 10.947-1.181",
5485
+ strokeWidth: "13.63",
5486
+ strokeMiterlimit: "10",
5487
+ strokeLinecap: "round",
5488
+ stroke: "#4D4D4D"
5489
+ }), /*#__PURE__*/React.createElement("path", {
5490
+ d: "m107.907 112.125.004.001a2.455 2.455 0 0 0 2.859-1.966l1.414-7.661a2.451 2.451 0 0 0-1.97-2.854h-.004a2.455 2.455 0 0 0-2.859 1.965l-1.413 7.661a2.45 2.45 0 0 0 1.969 2.854Z",
5491
+ fill: "gray"
5492
+ }), /*#__PURE__*/React.createElement("path", {
5493
+ d: "M89.494 121.176s-4.44 8.569-3.936 13.934",
5494
+ strokeWidth: "13.63",
5495
+ strokeMiterlimit: "10",
5496
+ strokeLinecap: "round",
5497
+ stroke: "#4D4D4D"
5498
+ }), /*#__PURE__*/React.createElement("path", {
5499
+ d: "M88.59 128.571c3.535 0 6.4-2.861 6.4-6.39a6.395 6.395 0 0 0-6.4-6.39 6.395 6.395 0 0 0-6.4 6.39 6.395 6.395 0 0 0 6.4 6.39Z",
5500
+ fill: "gray"
5501
+ }), /*#__PURE__*/React.createElement("path", {
5502
+ d: "M76.233 146.043h12.585v3.966a1.205 1.205 0 0 1-1.205 1.204H74.068a1.205 1.205 0 0 1-1.205-1.204v-.601a3.367 3.367 0 0 1 .989-2.378 3.38 3.38 0 0 1 2.38-.987Z",
5503
+ fill: "#333"
5504
+ }), /*#__PURE__*/React.createElement("path", {
5505
+ d: "M85.808 149.557s8.631.125 6.752-8.774c-1.878-8.899-13-16.291-16.263-6.434-3.262 9.857-1.499 16.166 9.511 15.208Z",
5506
+ fill: "#F2F2F2"
5507
+ }), /*#__PURE__*/React.createElement("path", {
5508
+ d: "M100.159 121.176s4.463 8.569 3.937 13.934",
5509
+ strokeWidth: "13.63",
5510
+ strokeMiterlimit: "10",
5511
+ strokeLinecap: "round",
5512
+ stroke: "#4D4D4D"
5513
+ }), /*#__PURE__*/React.createElement("path", {
5514
+ d: "M101.064 128.571c3.534 0 6.4-2.861 6.4-6.39 0-3.529-2.866-6.39-6.4-6.39a6.395 6.395 0 0 0-6.4 6.39 6.395 6.395 0 0 0 6.4 6.39Z",
5515
+ fill: "gray"
5516
+ }), /*#__PURE__*/React.createElement("path", {
5517
+ d: "M115.584 151.216h-13.545a1.206 1.206 0 0 1-1.205-1.203v-3.98h12.586a3.37 3.37 0 0 1 3.374 3.369v.602a1.21 1.21 0 0 1-.745 1.121 1.23 1.23 0 0 1-.465.091Z",
5518
+ fill: "#333"
5519
+ }), /*#__PURE__*/React.createElement("path", {
5520
+ d: "M103.838 149.557s-8.632.125-6.757-8.774c1.874-8.899 13.036-16.291 16.285-6.434 3.249 9.857 1.5 16.166-9.528 15.208Zm6.725-40.315c-.549-9.652-7.975-12.415-16.91-11.907-8.935.508-16.004 4.091-15.455 13.748.549 9.656 8.243 17.067 17.178 16.559 8.935-.508 15.736-8.743 15.187-18.4Z",
5521
+ fill: "#F2F2F2"
5522
+ }), /*#__PURE__*/React.createElement("path", {
5523
+ d: "M110.402 107.707c-1.129 7.958-7.271 14.228-15.027 14.665-8.39.477-15.683-6.034-16.995-14.821a15.77 15.77 0 0 0-.183 3.533c.549 9.652 8.239 17.067 17.178 16.559 8.939-.508 15.736-8.742 15.174-18.399a14.03 14.03 0 0 0-.147-1.537Z",
5524
+ fill: "#E6E6E6"
5525
+ }), /*#__PURE__*/React.createElement("path", {
5526
+ d: "M100.76 105.262H88a.66.66 0 0 0-.66.66v1.871c0 .365.296.66.66.66h12.76a.66.66 0 0 0 .66-.66v-1.871a.66.66 0 0 0-.66-.66Zm0 5.512H88a.66.66 0 0 0-.66.66v1.871c0 .364.296.66.66.66h12.76a.66.66 0 0 0 .66-.66v-1.871a.66.66 0 0 0-.66-.66Zm0 5.505H88a.66.66 0 0 0-.66.66v1.871c0 .364.296.66.66.66h12.76a.66.66 0 0 0 .66-.66v-1.871a.66.66 0 0 0-.66-.66Z",
5527
+ fill: "#3690EA"
5528
+ }), /*#__PURE__*/React.createElement("path", {
5529
+ d: "M133.43 107.146c5.688-4.463 7.529-11.6 4.111-15.943-3.417-4.343-10.799-4.245-16.487.218-5.688 4.463-7.529 11.601-4.111 15.943 3.417 4.343 10.799 4.245 16.487-.218Z",
5530
+ fill: "#F2F2F2"
5531
+ }), /*#__PURE__*/React.createElement("path", {
5532
+ d: "M136.74 95.34c-3.418-4.344-10.8-4.246-16.486.22a15.744 15.744 0 0 0-5.034 6.683c-.031-3.725 2.035-7.87 5.802-10.837 5.69-4.456 13.072-4.559 16.491-.218 1.972 2.508 2.182 5.953.919 9.273a8.246 8.246 0 0 0-1.692-5.12Z",
5533
+ fill: "#E6E6E6"
5534
+ }), /*#__PURE__*/React.createElement("path", {
5535
+ d: "M127.405 89.78c1.87.546 3.824.751 5.766.605v0a16.153 16.153 0 0 0 9.056-3.631",
5536
+ strokeWidth: "13.63",
5537
+ strokeMiterlimit: "10",
5538
+ strokeLinecap: "round",
5539
+ stroke: "#333"
5540
+ }), /*#__PURE__*/React.createElement("path", {
5541
+ d: "M79.875 85.766c2.25-7.476-.567-14.93-6.293-16.649-5.727-1.718-12.194 2.949-14.444 10.425-2.251 7.476.567 14.93 6.293 16.648 5.727 1.719 12.194-2.948 14.444-10.424Z",
5542
+ fill: "#F2F2F2"
5543
+ }), /*#__PURE__*/React.createElement("path", {
5544
+ d: "M69.713 71.558c5.726 1.72 8.542 9.175 6.293 16.652a16.978 16.978 0 0 1-4.74 7.687c3.767-1.435 7.141-5.151 8.627-10.12 2.232-7.477-.567-14.932-6.293-16.648-3.311-.993-6.863.152-9.706 2.736 1.85-.75 3.9-.858 5.82-.307Z",
5545
+ fill: "#E6E6E6"
5546
+ }), /*#__PURE__*/React.createElement("path", {
5547
+ d: "M77.006 68.04a6.195 6.195 0 0 1-4.269-1.866 6.176 6.176 0 0 1 0-8.623 6.195 6.195 0 0 1 4.27-1.867",
5548
+ strokeWidth: "13.63",
5549
+ strokeMiterlimit: "10",
5550
+ strokeLinecap: "round",
5551
+ stroke: "#333"
5552
+ }), /*#__PURE__*/React.createElement("path", {
5553
+ d: "M81.567 54.262c-.103.03-.205.07-.303.106l-.304.112-.303.111-.3.112-.303.111c-.103.031-.2.071-.303.111-.103.04-.201.072-.304.108l-.299.11-.303.112-.304.112c-.102.03-.2.071-.303.111l-.3.107-.303.111-.303.112-.304.111c-.098.031-.2.072-.299.112-.098.04-.205.07-.303.111-.099.04-.201.071-.304.107l-.299.111-.303.112a5.63 5.63 0 0 0-3.824 4.578 5.62 5.62 0 0 0 1.101 4.178 5.578 5.578 0 0 0 2.754 1.956l.303.112.304.111.308.112.303.11.304.112.303.112.304.111.303.112.308.111.304.111.303.112.304.111c.102.036.2.076.303.107l.308.116c.098.036.2.076.303.107.103.031.201.08.304.111.103.031.2.08.303.112.103.03.201.08.304.111.103.031.2.08.303.111.103.032.206.08.308.112a8.12 8.12 0 0 0 10.027-3.863 8.087 8.087 0 0 0-2.619-10.407 8.117 8.117 0 0 0-7.479-.88v.004Z",
5554
+ fill: "#2278D6"
5555
+ }), /*#__PURE__*/React.createElement("path", {
5556
+ d: "M97.105 47.237c-.192.062-.389.138-.58.21-.193.07-.393.142-.585.213-.192.072-.389.138-.585.214-.196.076-.388.138-.58.214-.192.076-.393.138-.585.214-.192.076-.388.138-.584.214-.197.076-.389.138-.585.214-.197.075-.388.138-.58.214-.192.075-.389.138-.585.213-.196.076-.388.139-.585.21-.196.071-.388.143-.58.214-.192.071-.392.138-.584.214-.192.075-.389.138-.585.214-.196.075-.388.138-.585.213-.196.076-.388.139-.58.214-.192.076-.393.139-.585.214-.191.076-.388.138-.584.214-.197.076-.389.138-.585.214-.196.076-.388.134-.58.21-.192.075-.388.138-.585.213a10.762 10.762 0 0 0-3.146 1.65 10.844 10.844 0 0 0-1.674 15.763 10.879 10.879 0 0 0 4.883 3.233c.196.075.388.151.589.213.2.063.388.152.585.214.196.063.392.152.589.219.196.067.388.147.584.214l.59.213c.196.076.388.152.589.214.2.063.388.152.584.214.197.063.388.152.59.214.2.063.388.152.584.219.196.066.388.147.59.213.2.067.387.148.584.214.196.067.388.147.589.214.2.067.388.152.584.214.197.063.393.152.59.214.196.062.388.151.584.218l.59.214c.196.072.388.147.584.214.196.067.393.147.59.214.196.067.387.151.588.214.201.062.388.151.585.214a15.669 15.669 0 0 0 14.439-1.806 15.624 15.624 0 0 0 6.706-12.895 15.597 15.597 0 0 0-1.829-7.256 15.659 15.659 0 0 0-19.454-7.244Z",
5557
+ fill: "#3690EA"
5558
+ }), /*#__PURE__*/React.createElement("path", {
5559
+ d: "M119.065 37.388a25.93 25.93 0 0 0-.978.356c-.326.125-.651.232-.977.357-.326.125-.652.232-.978.356-.325.125-.651.232-.977.361-.326.13-.652.232-.977.357-.326.125-.652.232-.978.356-.326.125-.656.232-.977.357-.322.125-.656.232-.978.36-.321.13-.651.228-.977.357-.326.13-.656.232-.977.357-.322.124-.656.231-.978.356-.321.125-.656.232-.977.357-.321.125-.656.231-.977.36-.322.13-.657.228-.978.357-.321.13-.656.232-.977.357-.322.124-.656.231-.978.356-.321.125-.656.232-.982.361-.325.13-.651.227-.977.357-.326.129-.651.227-.973.356-.321.13-.656.232-.982.357a18.217 18.217 0 0 0-7.281 4.523A18.158 18.158 0 0 0 90.716 72.8a18.097 18.097 0 0 0 8.926 6.314c.326.13.651.254.986.361.335.107.652.254.982.361.33.107.652.25.986.36.335.112.647.25.982.357.335.107.652.254.982.361.33.107.652.25.986.361.335.112.652.25.982.357.33.107.652.254.986.36.335.108.648.25.982.362.335.111.652.25.982.356.33.107.652.254.986.361.335.107.652.25.982.361.331.111.652.25.982.357.33.106.656.253.986.36.331.107.652.254.982.361.331.107.652.25.987.361.334.112.651.25.981.357.331.107.652.254.987.36.334.108.647.25.982.362.334.111.651.25.981.356a26.26 26.26 0 0 0 24.2-3.02 26.2 26.2 0 0 0 8.29-9.42 26.147 26.147 0 0 0-.114-24.35 26.194 26.194 0 0 0-8.377-9.343 26.244 26.244 0 0 0-24.226-2.795l-.022.009Z",
5560
+ fill: "#50B0FF"
5561
+ }), /*#__PURE__*/React.createElement("path", {
5562
+ d: "M128.994 80.692a18.926 18.926 0 0 1-11.736-4.091 18.853 18.853 0 0 1-5.352-22.825 18.889 18.889 0 0 1 8.696-8.867 18.93 18.93 0 0 1 22.967 4.864 18.856 18.856 0 0 1 .514 23.437 18.738 18.738 0 0 1-6.655 5.529 18.772 18.772 0 0 1-8.434 1.953Z",
5563
+ fill: "#D6DEE5"
5564
+ }), /*#__PURE__*/React.createElement("path", {
5565
+ d: "M129.021 45.14a16.719 16.719 0 0 1 10.373 3.604 16.67 16.67 0 0 1 5.887 9.258 16.65 16.65 0 0 1-1.144 10.906 16.687 16.687 0 0 1-7.681 7.838 16.724 16.724 0 0 1-10.896 1.38 16.704 16.704 0 0 1-9.398-5.675 16.657 16.657 0 0 1-.449-20.708 16.64 16.64 0 0 1 13.322-6.604h-.014Zm.014-4.417a21.143 21.143 0 0 0-13.684 5.01 21.066 21.066 0 0 0-4.43 26.958 21.12 21.12 0 0 0 11.363 9.113 21.153 21.153 0 0 0 14.569-.404 21.113 21.113 0 0 0 10.84-9.728 21.063 21.063 0 0 0 1.948-14.422 21.086 21.086 0 0 0-7.869-12.249 20.973 20.973 0 0 0-12.737-4.278Z",
5566
+ fill: "#1B64CE"
5567
+ }), /*#__PURE__*/React.createElement("path", {
5568
+ d: "M131.495 67.397c4.287 0 7.762-3.47 7.762-7.749 0-4.28-3.475-7.75-7.762-7.75-4.286 0-7.761 3.47-7.761 7.75 0 4.28 3.475 7.75 7.761 7.75Z",
5569
+ fill: "#fff"
5570
+ }), /*#__PURE__*/React.createElement("path", {
5571
+ d: "M137.039 56.638a3.996 3.996 0 0 0 3.999-3.993 3.996 3.996 0 0 0-3.999-3.992 3.996 3.996 0 0 0-3.999 3.992 3.996 3.996 0 0 0 3.999 3.993Z",
5572
+ fill: "#fff"
5573
+ }), /*#__PURE__*/React.createElement("mask", {
5574
+ id: `${id}-a`,
5575
+ style: {
5576
+ maskType: "alpha"
5577
+ },
5578
+ maskUnits: "userSpaceOnUse",
5579
+ x: "90",
5580
+ y: "96",
5581
+ width: "9",
5582
+ height: "4"
5583
+ }, /*#__PURE__*/React.createElement("path", {
5584
+ d: "M94.651 96.461c-1.785 0-3.26-.038-3.78-.038v2.897h7.14v-2.897c-.371 0-1.574.038-3.36.038Z",
5585
+ fill: "#000"
5586
+ })), /*#__PURE__*/React.createElement("g", {
5587
+ mask: `url(#${id}-a)`
5588
+ }, /*#__PURE__*/React.createElement("path", {
5589
+ d: "M94.51 95.545c-1.732.049-3.124.25-3.124.494v2.617c0 .245 1.392.446 3.124.495 1.731.049 3.124-.138 3.124-.384v-2.839c0-.245-1.393-.432-3.124-.383Z",
5590
+ fill: "#999"
5591
+ })));
4354
5592
  }
4355
5593
 
4356
- var styles$b = {"visuallyHidden":"visuallyHidden-S9VG5"};
5594
+ var styles$b = {"spinner":"spinner-b5tlz"};
5595
+
5596
+ function LoadingSpinner({
5597
+ size = 48,
5598
+ trackWidth = 6
5599
+ }) {
5600
+ return /*#__PURE__*/React.createElement("span", {
5601
+ "aria-hidden": "true",
5602
+ className: styles$b.spinner,
5603
+ style: {
5604
+ "--spinner-size": `${size}px`,
5605
+ "--spinner-track-width": `${trackWidth}px`
5606
+ }
5607
+ });
5608
+ }
4357
5609
 
4358
5610
  function SearchResults({
4359
5611
  label,
@@ -4374,18 +5626,36 @@ true;
4374
5626
  ...navigation
4375
5627
  });
4376
5628
  }
4377
- return /*#__PURE__*/React.createElement("p", {
4378
- role: "status"
4379
- }, "Searching\u2026");
5629
+ return /*#__PURE__*/React.createElement(tapestry.Flex, {
5630
+ role: "status",
5631
+ justify: "center",
5632
+ align: "center",
5633
+ gap: 2,
5634
+ direction: "column",
5635
+ style: {
5636
+ color: "var(--t-text-color-placeholder)",
5637
+ fontSize: "var(--t-font-size-md)",
5638
+ marginTop: 48
5639
+ }
5640
+ }, /*#__PURE__*/React.createElement(LoadingSpinner, {
5641
+ size: 40,
5642
+ trackWidth: 5
5643
+ }), "Searching\u2026");
4380
5644
  case "error":
4381
- return /*#__PURE__*/React.createElement("p", {
4382
- role: "alert"
4383
- }, "Search isn\u2019t working right now. Try again.");
5645
+ return /*#__PURE__*/React.createElement(BlankState$1, {
5646
+ image: /*#__PURE__*/React.createElement(BlankStateError, null),
5647
+ role: "alert",
5648
+ subtitle: "Try again in a moment.",
5649
+ title: "Search isn\u2019t working right now"
5650
+ });
4384
5651
  case "done":
4385
5652
  if (sections.length === 0) {
4386
- return /*#__PURE__*/React.createElement("p", {
4387
- role: "status"
4388
- }, "No results for \u201C", term.trim(), "\u201D");
5653
+ return /*#__PURE__*/React.createElement(BlankState$1, {
5654
+ image: /*#__PURE__*/React.createElement(BlankStateNoResults, null),
5655
+ role: "status",
5656
+ subtitle: "Clear search and try again.",
5657
+ title: `No results for “${term.trim()}”`
5658
+ });
4389
5659
  }
4390
5660
  return /*#__PURE__*/React.createElement(ResultListbox, {
4391
5661
  busy: false,
@@ -4400,27 +5670,37 @@ true;
4400
5670
  // stays put as more recents load and as their lookups answer.
4401
5671
  const RECENTS = "recents";
4402
5672
  function SearchPanel({
5673
+ appName,
5674
+ mobile = false,
4403
5675
  env,
5676
+ onClose,
4404
5677
  products
4405
5678
  }) {
4406
5679
  var _a, _b;
4407
5680
  const listboxId = useInstanceId("product-search-results");
4408
5681
  const [term, setTerm] = React.useState("");
4409
- const [selectedSlug, setSelectedSlug] = React.useState(() => initialProduct(products).slug);
5682
+ const [selectedSlug, setSelectedSlug] = React.useState(() => defaultProduct(products, appName).slug);
4410
5683
  const product = (_a = products.find(({
4411
5684
  slug
4412
5685
  }) => slug === selectedSlug)) !== null && _a !== void 0 ? _a : products[0];
4413
5686
  const hasTerm = term.trim() !== "";
4414
5687
  const search = useProductSearch(product.slug, term);
4415
5688
  const groups = "groups" in search ? search.groups : undefined;
4416
- const sections = React.useMemo(() => groupSections(groups), [groups]);
5689
+ const {
5690
+ organizationTimeZone
5691
+ } = useStore();
5692
+ const sections = React.useMemo(() => groupSections(groups, organizationTimeZone), [groups, organizationTimeZone]);
4417
5693
  const {
4418
5694
  visits,
4419
5695
  ...recents
4420
5696
  } = useRecentVisits(env);
4421
- const recentItems = visits.map(visitItem);
5697
+ const recentItems = visits.map(visit => visitItem(visit, organizationTimeZone));
4422
5698
  const items = hasTerm ? sections.flatMap(section => section.items) : recentItems;
4423
- const navigation = useResultNavigation(items, hasTerm ? sections : RECENTS);
5699
+ // Phones open results by tapping them, with no highlight to arrow through.
5700
+ // A narrow window with a keyboard and mouse keeps both, as does the desktop
5701
+ // layout on a touch device, whose keyboard hints still advertise them.
5702
+ const touchOnly = useMediaQuery("(hover: none) and (pointer: coarse)");
5703
+ const navigation = useResultNavigation(items, hasTerm ? sections : RECENTS, !(mobile && touchOnly));
4424
5704
  const {
4425
5705
  highlightedIndex
4426
5706
  } = navigation;
@@ -4440,41 +5720,48 @@ true;
4440
5720
  navigation.handleKeyDown(event);
4441
5721
  }
4442
5722
  };
4443
- React.useEffect(() => {
4444
- if (hasTerm) saveLastProduct(product.slug);
4445
- }, [hasTerm, product.slug]);
5723
+ const results = hasTerm ? (/*#__PURE__*/React.createElement(SearchResults, {
5724
+ highlightedIndex: highlightedIndex,
5725
+ id: listboxId,
5726
+ label: `Results from Planning Center ${product.appName}`,
5727
+ onHighlight: navigation.highlightIndex,
5728
+ sections: sections,
5729
+ status: search.status,
5730
+ term: term
5731
+ })) : (/*#__PURE__*/React.createElement(RecentlyVisited, {
5732
+ highlightedIndex: highlightedIndex,
5733
+ id: listboxId,
5734
+ items: recentItems,
5735
+ onHighlight: navigation.highlightIndex,
5736
+ ...recents
5737
+ }));
4446
5738
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SearchInput, {
4447
5739
  expanded: items.length > 0,
4448
5740
  highlightedIndex: highlightedIndex,
4449
5741
  inputRef: inputRef,
4450
5742
  listboxId: listboxId,
4451
5743
  onChange: setTerm,
5744
+ onClose: onClose,
4452
5745
  onFocus: () => setAnnounceHighlight(false),
4453
5746
  onKeyDown: navigation.handleKeyDown,
4454
5747
  value: term
4455
- }), /*#__PURE__*/React.createElement(ProductTabs, {
5748
+ }), mobile ? (/*#__PURE__*/React.createElement(ProductSelect, {
5749
+ onSelect: setSelectedSlug,
5750
+ products: products,
5751
+ selected: product
5752
+ }, results)) : (/*#__PURE__*/React.createElement(ProductTabs, {
4456
5753
  onKeyDown: handleTabsKeyDown,
4457
5754
  onSelect: setSelectedSlug,
4458
5755
  products: products,
4459
5756
  selected: product
4460
- }, hasTerm ? (/*#__PURE__*/React.createElement(SearchResults, {
4461
- highlightedIndex: highlightedIndex,
4462
- id: listboxId,
4463
- label: `${product.appName} results`,
4464
- onHighlight: navigation.highlightIndex,
4465
- sections: sections,
4466
- status: search.status,
4467
- term: term
4468
- })) : (/*#__PURE__*/React.createElement(RecentlyVisited, {
4469
- highlightedIndex: highlightedIndex,
4470
- id: listboxId,
4471
- items: recentItems,
4472
- onHighlight: navigation.highlightIndex,
4473
- ...recents
4474
- }))), /*#__PURE__*/React.createElement("div", {
5757
+ }, results)), /*#__PURE__*/React.createElement("div", {
4475
5758
  "aria-live": "polite",
4476
- className: styles$b.visuallyHidden
4477
- }, announceHighlight ? (_b = navigation.highlighted) === null || _b === void 0 ? void 0 : _b.title : null), /*#__PURE__*/React.createElement(KeyboardHints, {
5759
+ className: styles$k.visuallyHidden
5760
+ }, announceHighlight ? (_b = navigation.highlighted) === null || _b === void 0 ? void 0 : _b.title : null), /*#__PURE__*/React.createElement("div", {
5761
+ "aria-live": "polite",
5762
+ className: styles$k.visuallyHidden,
5763
+ "data-testid": "result-count"
5764
+ }, hasTerm && search.status === "done" && items.length > 0 ? `${items.length} ${items.length === 1 ? "result" : "results"} for “${term.trim()}” in ${product.appName}` : null), mobile ? null : /*#__PURE__*/React.createElement(KeyboardHints, {
4478
5765
  copied: navigation.copied
4479
5766
  }));
4480
5767
  }
@@ -4545,32 +5832,6 @@ true;
4545
5832
  }, [enabled, open, setOpen]);
4546
5833
  }
4547
5834
 
4548
- const SEARCHABLE_PRODUCTS = [{
4549
- appName: "Calendar",
4550
- slug: "calendar"
4551
- }, {
4552
- appName: "Check-Ins",
4553
- slug: "check-ins"
4554
- }, {
4555
- appName: "Giving",
4556
- slug: "giving"
4557
- }, {
4558
- appName: "Groups",
4559
- slug: "groups"
4560
- }, {
4561
- appName: "People",
4562
- slug: "people"
4563
- }, {
4564
- appName: "Publishing",
4565
- slug: "publishing"
4566
- }, {
4567
- appName: "Registrations",
4568
- slug: "registrations"
4569
- }, {
4570
- appName: "Services",
4571
- slug: "services"
4572
- }];
4573
-
4574
5835
  const PERMISSION_CHECKS = {
4575
5836
  "check-ins": () => fetchMe("check-ins", "permission").then(({
4576
5837
  permission
@@ -4675,24 +5936,59 @@ true;
4675
5936
  return groupApps(apps).restProducts.flatMap(app => SEARCHABLE_PRODUCTS.filter(product => product.appName === app.name));
4676
5937
  }
4677
5938
 
5939
+ /**
5940
+ * Writes the height of the visible part of the page to the parent of `ref`'s
5941
+ * element as `--visual-viewport-height`. It shrinks when an on-screen keyboard
5942
+ * opens; `100dvh` doesn't, since mobile Safari draws the keyboard over it.
5943
+ */
5944
+ function useVisualViewportHeight(ref, enabled) {
5945
+ React.useEffect(() => {
5946
+ var _a;
5947
+ const viewport = window.visualViewport;
5948
+ const parent = (_a = ref.current) === null || _a === void 0 ? void 0 : _a.parentElement;
5949
+ if (!enabled || !viewport || !parent) return undefined;
5950
+ const update = () => parent.style.setProperty("--visual-viewport-height", `${viewport.height}px`);
5951
+ update();
5952
+ viewport.addEventListener("resize", update);
5953
+ return () => {
5954
+ viewport.removeEventListener("resize", update);
5955
+ parent.style.removeProperty("--visual-viewport-height");
5956
+ };
5957
+ }, [enabled, ref]);
5958
+ }
5959
+
4678
5960
  function ProductSearch({
5961
+ appName,
4679
5962
  apps,
5963
+ mobile = false,
4680
5964
  env
4681
5965
  }) {
4682
5966
  const searchable = useSearchableProducts(apps);
4683
5967
  const [open, setOpen] = React.useState(false);
5968
+ const modalRef = React.useRef(null);
5969
+ // Sizes Tapestry's modal frame, the dialog's parent, to fit above the keyboard.
5970
+ useVisualViewportHeight(modalRef, mobile && open);
4684
5971
  const available = searchable.status === "done" && searchable.products.length > 0;
4685
5972
  useSearchShortcut(available, open, setOpen);
4686
5973
  if (!available) return null;
4687
5974
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SearchButton, {
5975
+ mobile: mobile,
4688
5976
  onClick: () => setOpen(true)
4689
5977
  }), /*#__PURE__*/React.createElement(tapestry.Modal, {
4690
5978
  "aria-label": "Search",
5979
+ className: styles$k.modal,
4691
5980
  dismissible: true,
5981
+ id: "product_search_modal",
4692
5982
  onClose: () => setOpen(false),
4693
- open: open
5983
+ open: open,
5984
+ ref: modalRef,
5985
+ size: "lg"
4694
5986
  }, /*#__PURE__*/React.createElement(SearchPanel, {
5987
+ appName: appName,
5988
+ mobile: mobile,
4695
5989
  env: env,
5990
+ // Phones have no Esc, so mobile search gets a close button.
5991
+ onClose: mobile ? () => setOpen(false) : undefined,
4696
5992
  products: searchable.products
4697
5993
  })));
4698
5994
  }
@@ -4986,6 +6282,7 @@ true;
4986
6282
  margin: "auto"
4987
6283
  }
4988
6284
  }), !notificationsEnabled && notifications(), productSearchEnabled ? (/*#__PURE__*/React.createElement(ProductSearch, {
6285
+ appName: props.appName,
4989
6286
  apps: props.apps,
4990
6287
  env: props.env
4991
6288
  })) : search({
@@ -32900,7 +34197,7 @@ true;
32900
34197
  method: "localStorage"
32901
34198
  };
32902
34199
 
32903
- var styles$6 = {"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"};
34200
+ var styles$6 = {"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","actions":"actions-INQ7-","profile-button":"profile-button-a2WO2"};
32904
34201
 
32905
34202
  function AccountSettingsLink({
32906
34203
  env
@@ -33120,7 +34417,14 @@ true;
33120
34417
  setProductSwitcherVisible(false);
33121
34418
  setRoutesMenuVisible(visible => !visible);
33122
34419
  } : null
33123
- }, /*#__PURE__*/React.createElement(CurrentRouteComponent, null, capitalize$1(currentRouteText)), props.routes.length > 0 && /*#__PURE__*/React.createElement(DisclosureChevronIcon, null)), /*#__PURE__*/React.createElement("button", {
34420
+ }, /*#__PURE__*/React.createElement(CurrentRouteComponent, null, capitalize$1(currentRouteText)), props.routes.length > 0 && /*#__PURE__*/React.createElement(DisclosureChevronIcon, null)), /*#__PURE__*/React.createElement("div", {
34421
+ className: styles$6["actions"]
34422
+ }, productSearchEnabled && (/*#__PURE__*/React.createElement(ProductSearch, {
34423
+ appName: props.appName,
34424
+ apps: props.apps,
34425
+ mobile: true,
34426
+ env: props.env
34427
+ })), /*#__PURE__*/React.createElement("button", {
33124
34428
  type: "button",
33125
34429
  className: styles$6["profile-button"],
33126
34430
  onClick: () => {
@@ -33131,7 +34435,7 @@ true;
33131
34435
  }, /*#__PURE__*/React.createElement(Avatar, {
33132
34436
  env: props.env,
33133
34437
  url: props.userAvatarPath
33134
- })));
34438
+ }))));
33135
34439
  };
33136
34440
  const SmallRoute = ({
33137
34441
  active,
@@ -33621,38 +34925,6 @@ true;
33621
34925
  }));
33622
34926
  };
33623
34927
 
33624
- const collections = {
33625
- general: general__namespace,
33626
- toolbar: toolbar__namespace
33627
- };
33628
- const paths = collections;
33629
- function Icon({
33630
- name,
33631
- size = 16,
33632
- style,
33633
- theme,
33634
- title,
33635
- ...props
33636
- }) {
33637
- const [collection, symbol] = name.split(".");
33638
- return /*#__PURE__*/React.createElement("svg", {
33639
- "aria-hidden": title ? undefined : true,
33640
- fill: "currentColor",
33641
- height: size,
33642
- role: title ? "img" : undefined,
33643
- style: {
33644
- color: theme && `var(${theme})`,
33645
- flexShrink: 0,
33646
- ...style
33647
- },
33648
- viewBox: "0 0 16 16",
33649
- width: size,
33650
- ...props
33651
- }, title && /*#__PURE__*/React.createElement("title", null, title), /*#__PURE__*/React.createElement("path", {
33652
- d: paths[collection][symbol]
33653
- }));
33654
- }
33655
-
33656
34928
  var styles$3 = {"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"};
33657
34929
 
33658
34930
  const COLOR_MODES = [{