scorer-ui-kit 3.0.2 → 3.0.3

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.
package/dist/index.js CHANGED
@@ -12409,6 +12409,366 @@ var TagList = ({ tagsConfig }) => {
12409
12409
  }) });
12410
12410
  };
12411
12411
  //#endregion
12412
+ //#region src/Chips/atoms/ChipButton.tsx
12413
+ var collapse = styled_components.keyframes`
12414
+ to {
12415
+ width: 0;
12416
+ opacity: 0;
12417
+ border-left-width: 0;
12418
+ }
12419
+ `;
12420
+ var StyledChip = styled_components.default.button`
12421
+ position: relative;
12422
+ display: flex;
12423
+ align-items: center;
12424
+ justify-content: center;
12425
+ width: 56px;
12426
+ height: 56px;
12427
+ padding: 0;
12428
+ border: none;
12429
+ background: transparent;
12430
+ cursor: pointer;
12431
+ outline: none;
12432
+ box-sizing: border-box;
12433
+ font-family: var(--font-ui);
12434
+ font-size: 14px;
12435
+ font-weight: 500;
12436
+ line-height: 20px;
12437
+ color: var(--grey-12);
12438
+ transition:
12439
+ color var(--speed-normal) var(--easing-primary-in-out),
12440
+ background-color var(--speed-normal) var(--easing-primary-in-out);
12441
+
12442
+ ${({ $showDivider }) => $showDivider && styled_components.css`border-left: 1px solid var(--grey-4);`}
12443
+
12444
+ & svg [stroke] { stroke: var(--grey-12); }
12445
+
12446
+ &::after {
12447
+ content: '';
12448
+ position: absolute;
12449
+ bottom: 0;
12450
+ left: -1px;
12451
+ right: -1px;
12452
+ height: 4px;
12453
+ background-color: transparent;
12454
+ transition: background-color var(--speed-normal) var(--easing-primary-in-out);
12455
+ }
12456
+ &:hover:enabled::after { background-color: var(--primary-6); }
12457
+
12458
+ &:focus-visible {
12459
+ outline: 2px solid var(--primary-9);
12460
+ outline-offset: -2px;
12461
+ }
12462
+
12463
+ ${({ $selected }) => $selected && styled_components.css`
12464
+ background-color: var(--primary-a3);
12465
+ color: var(--primary-11);
12466
+ & svg [stroke] { stroke: var(--primary-11); }
12467
+ &::after { background-color: var(--primary-9); }
12468
+ &:hover:enabled::after { background-color: var(--primary-9); }
12469
+ `}
12470
+
12471
+ &:disabled { cursor: not-allowed; opacity: 0.5; }
12472
+
12473
+ ${({ $leaving }) => $leaving && styled_components.css`
12474
+ overflow: hidden;
12475
+ min-width: 0;
12476
+ pointer-events: none;
12477
+ animation: ${collapse} var(--speed-fast) var(--easing-primary-in-out) forwards;
12478
+
12479
+ @media (prefers-reduced-motion: reduce) { animation: none; }
12480
+ `}
12481
+ `;
12482
+ var ChipButton = ({ variant = "text", icon, label, selected = false, noDivider = false, leaving = false, onLeaveEnd, onAnimationEnd, children, ...props }) => {
12483
+ const showDivider = !noDivider;
12484
+ const isMenuButton = props["aria-haspopup"] !== void 0;
12485
+ const hasFired = (0, react.useRef)(false);
12486
+ const fireLeaveEnd = (0, react.useCallback)(() => {
12487
+ if (hasFired.current) return;
12488
+ hasFired.current = true;
12489
+ onLeaveEnd?.();
12490
+ }, [onLeaveEnd]);
12491
+ (0, react.useEffect)(() => {
12492
+ if (!leaving) {
12493
+ hasFired.current = false;
12494
+ return;
12495
+ }
12496
+ if (window.matchMedia("(prefers-reduced-motion: reduce)").matches) fireLeaveEnd();
12497
+ }, [leaving, fireLeaveEnd]);
12498
+ const handleAnimationEnd = (0, react.useCallback)((e) => {
12499
+ onAnimationEnd?.(e);
12500
+ if (leaving && e.target === e.currentTarget) fireLeaveEnd();
12501
+ }, [
12502
+ leaving,
12503
+ fireLeaveEnd,
12504
+ onAnimationEnd
12505
+ ]);
12506
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(StyledChip, {
12507
+ type: "button",
12508
+ "aria-pressed": isMenuButton ? void 0 : selected,
12509
+ $selected: selected,
12510
+ $showDivider: showDivider,
12511
+ $leaving: leaving,
12512
+ ...props,
12513
+ onAnimationEnd: handleAnimationEnd,
12514
+ children: variant === "icon" && icon ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_LineUIVideoBase.Icon, {
12515
+ icon,
12516
+ size: 16
12517
+ }) : label ?? children
12518
+ });
12519
+ };
12520
+ //#endregion
12521
+ //#region src/Chips/atoms/ChipZoneBreak.tsx
12522
+ var Break = styled_components.default.div`
12523
+ box-sizing: border-box;
12524
+ flex-shrink: 0;
12525
+ width: 12px;
12526
+ height: 56px;
12527
+ background-color: var(--grey-3);
12528
+ border-left: 1px solid var(--grey-4);
12529
+ border-right: 1px solid var(--grey-4);
12530
+ `;
12531
+ var ChipZoneBreak = (props) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Break, {
12532
+ "aria-hidden": "true",
12533
+ ...props
12534
+ });
12535
+ //#endregion
12536
+ //#region src/Chips/molecules/ChipDropdown.tsx
12537
+ var Wrapper = styled_components.default.div`
12538
+ position: relative;
12539
+ display: inline-flex;
12540
+ `;
12541
+ var Trigger = (0, styled_components.default)(ChipButton)`
12542
+ && {
12543
+ background-color: transparent;
12544
+
12545
+ ${({ $labelled }) => $labelled && styled_components.css`
12546
+ width: auto;
12547
+ padding: 0 16px 0 14px;
12548
+ gap: 8px;
12549
+ justify-content: flex-start;
12550
+ white-space: nowrap;
12551
+ color: var(--grey-12);
12552
+ & svg [stroke] { stroke: var(--grey-12); }
12553
+ `}
12554
+ }
12555
+ `;
12556
+ var Menu = styled_components.default.div`
12557
+ position: absolute;
12558
+ top: calc(100% + 8px);
12559
+ left: -1px;
12560
+ z-index: 100;
12561
+ display: flex;
12562
+ flex-direction: column;
12563
+ align-items: stretch;
12564
+ min-width: 216px;
12565
+ padding: 4px 0;
12566
+ background: var(--grey-1);
12567
+ border: 1px solid var(--grey-4);
12568
+ border-radius: 4px;
12569
+ box-shadow: 0px 5px 25px 0px var(--filter-button-shadow-color);
12570
+ `;
12571
+ var MenuItem = styled_components.default.button`
12572
+ display: flex;
12573
+ align-items: center;
12574
+ gap: 4px;
12575
+ width: 100%;
12576
+ height: var(--button-height, 32px);
12577
+ padding: 3px 8px;
12578
+ border: none;
12579
+ border-bottom: 1px solid var(--grey-7);
12580
+ background: transparent;
12581
+ cursor: pointer;
12582
+ font-family: var(--font-ui);
12583
+ font-size: 14px;
12584
+ font-weight: 500;
12585
+ line-height: 20px;
12586
+ color: var(--grey-12);
12587
+ text-align: left;
12588
+ transition: background-color var(--speed-fast) var(--easing-primary-in-out);
12589
+
12590
+ & svg [stroke] { stroke: var(--grey-12); }
12591
+
12592
+ &:last-child { border-bottom: none; }
12593
+ &:hover:enabled { background-color: var(--grey-3); }
12594
+ &:disabled { cursor: not-allowed; opacity: 0.5; }
12595
+
12596
+ ${({ $current }) => $current && styled_components.css`
12597
+ background-color: var(--grey-4);
12598
+ &:hover:enabled { background-color: var(--grey-5); }
12599
+ `}
12600
+ `;
12601
+ var CheckSlot = styled_components.default.span`
12602
+ display: flex;
12603
+ margin-left: auto;
12604
+ `;
12605
+ var ChipDropdown = ({ items, icon = "FilterEllipsis", label, selectedId, checkIcon = "Success", triggerLabel, noDivider = false, disabled = false, onOpenChange, onKeyDown, ...props }) => {
12606
+ const [isOpen, setIsOpen] = (0, react.useState)(false);
12607
+ const wrapperRef = (0, react.useRef)(null);
12608
+ const isLabelled = Boolean(label);
12609
+ const marksCurrent = selectedId !== void 0;
12610
+ const ariaLabel = triggerLabel ?? (isLabelled ? void 0 : "Space actions");
12611
+ const setOpen = (0, react.useCallback)((next) => {
12612
+ setIsOpen(next);
12613
+ onOpenChange?.(next);
12614
+ }, [onOpenChange]);
12615
+ const close = (0, react.useCallback)(() => setOpen(false), [setOpen]);
12616
+ const toggle = (0, react.useCallback)(() => setOpen(!isOpen), [isOpen, setOpen]);
12617
+ useClickOutside(wrapperRef, (0, react.useCallback)(() => {
12618
+ if (isOpen) close();
12619
+ }, [isOpen, close]));
12620
+ (0, react.useEffect)(() => {
12621
+ if (disabled && isOpen) close();
12622
+ }, [
12623
+ disabled,
12624
+ isOpen,
12625
+ close
12626
+ ]);
12627
+ const handleKeyDown = (0, react.useCallback)((e) => {
12628
+ onKeyDown?.(e);
12629
+ if (e.key === "Escape" && isOpen) close();
12630
+ }, [
12631
+ isOpen,
12632
+ close,
12633
+ onKeyDown
12634
+ ]);
12635
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(Wrapper, {
12636
+ ref: wrapperRef,
12637
+ ...props,
12638
+ onKeyDown: handleKeyDown,
12639
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Trigger, {
12640
+ $labelled: isLabelled,
12641
+ variant: isLabelled ? void 0 : "icon",
12642
+ icon: isLabelled ? void 0 : icon,
12643
+ selected: isOpen,
12644
+ noDivider,
12645
+ disabled,
12646
+ "aria-label": ariaLabel,
12647
+ "aria-haspopup": "menu",
12648
+ "aria-expanded": isOpen,
12649
+ onClick: toggle,
12650
+ children: isLabelled ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
12651
+ icon ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_LineUIVideoBase.Icon, {
12652
+ icon,
12653
+ size: 18
12654
+ }) : null,
12655
+ label,
12656
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_LineUIVideoBase.Icon, {
12657
+ icon: "Down",
12658
+ size: 12
12659
+ })
12660
+ ] }) : null
12661
+ }), isOpen && !disabled ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Menu, {
12662
+ role: "menu",
12663
+ children: items.map((item) => {
12664
+ const isCurrent = marksCurrent && item.id === selectedId;
12665
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(MenuItem, {
12666
+ type: "button",
12667
+ role: marksCurrent ? "menuitemradio" : "menuitem",
12668
+ "aria-checked": marksCurrent ? isCurrent : void 0,
12669
+ $current: isCurrent,
12670
+ disabled: item.disabled,
12671
+ onClick: () => {
12672
+ item.onClick?.();
12673
+ close();
12674
+ },
12675
+ children: [
12676
+ item.icon ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_LineUIVideoBase.Icon, {
12677
+ icon: item.icon,
12678
+ size: 14
12679
+ }) : null,
12680
+ item.label,
12681
+ isCurrent ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CheckSlot, {
12682
+ "aria-hidden": "true",
12683
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_LineUIVideoBase.Icon, {
12684
+ icon: checkIcon,
12685
+ size: 14,
12686
+ weight: "light"
12687
+ })
12688
+ }) : null
12689
+ ]
12690
+ }, item.id);
12691
+ })
12692
+ }) : null]
12693
+ });
12694
+ };
12695
+ //#endregion
12696
+ //#region src/Chips/organisms/ChipBar.tsx
12697
+ var Bar = styled_components.default.div`
12698
+ display: flex;
12699
+ align-items: center;
12700
+ height: 56px;
12701
+
12702
+ & > * {
12703
+ flex-shrink: 0;
12704
+ }
12705
+ `;
12706
+ var NAV_KEYS = [
12707
+ "ArrowLeft",
12708
+ "ArrowRight",
12709
+ "Home",
12710
+ "End"
12711
+ ];
12712
+ var ChipBar = ({ children, onKeyDown, onFocus, ...props }) => {
12713
+ const barRef = (0, react.useRef)(null);
12714
+ const [activeIndex, setActiveIndex] = (0, react.useState)(0);
12715
+ const getCells = (0, react.useCallback)(() => {
12716
+ const root = barRef.current;
12717
+ if (!root) return [];
12718
+ return Array.from(root.querySelectorAll("button:not(:disabled)")).filter((el) => !el.closest("[role=\"menu\"]"));
12719
+ }, []);
12720
+ (0, react.useEffect)(() => {
12721
+ const root = barRef.current;
12722
+ if (!root) return;
12723
+ const sync = () => {
12724
+ const focusables = getCells();
12725
+ const index = Math.min(activeIndex, focusables.length - 1);
12726
+ focusables.forEach((cell, i) => {
12727
+ cell.tabIndex = i === index ? 0 : -1;
12728
+ });
12729
+ };
12730
+ sync();
12731
+ const observer = new MutationObserver(sync);
12732
+ observer.observe(root, {
12733
+ childList: true,
12734
+ subtree: true,
12735
+ attributes: true,
12736
+ attributeFilter: ["disabled"]
12737
+ });
12738
+ return () => observer.disconnect();
12739
+ }, [activeIndex, getCells]);
12740
+ const cells = react.Children.toArray(children).filter(react.isValidElement);
12741
+ const handleFocus = (0, react.useCallback)((e) => {
12742
+ onFocus?.(e);
12743
+ const index = getCells().indexOf(e.target);
12744
+ if (index >= 0) setActiveIndex(index);
12745
+ }, [getCells, onFocus]);
12746
+ const handleKeyDown = (0, react.useCallback)((e) => {
12747
+ onKeyDown?.(e);
12748
+ if (!NAV_KEYS.includes(e.key)) return;
12749
+ if (barRef.current?.querySelector("[role=\"menu\"]")) return;
12750
+ const focusables = getCells();
12751
+ const current = focusables.indexOf(document.activeElement);
12752
+ if (focusables.length === 0 || current < 0) return;
12753
+ e.preventDefault();
12754
+ let next = current;
12755
+ if (e.key === "ArrowLeft") next = (current - 1 + focusables.length) % focusables.length;
12756
+ if (e.key === "ArrowRight") next = (current + 1) % focusables.length;
12757
+ if (e.key === "Home") next = 0;
12758
+ if (e.key === "End") next = focusables.length - 1;
12759
+ focusables[next]?.focus();
12760
+ }, [getCells, onKeyDown]);
12761
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Bar, {
12762
+ ref: barRef,
12763
+ role: "toolbar",
12764
+ "aria-label": "Chip bar",
12765
+ ...props,
12766
+ onFocus: handleFocus,
12767
+ onKeyDown: handleKeyDown,
12768
+ children: cells.map((child, i) => i === 0 && typeof child.type !== "string" ? (0, react.cloneElement)(child, { noDivider: true }) : child)
12769
+ });
12770
+ };
12771
+ //#endregion
12412
12772
  //#region src/Modals/ConfirmationModal.tsx
12413
12773
  var Container$20 = styled_components.default.div``;
12414
12774
  var Title$3 = styled_components.default.div`
@@ -13220,7 +13580,7 @@ var Container$17 = styled_components.default.div`
13220
13580
  width: 100%;
13221
13581
  display: flex;
13222
13582
  `;
13223
- var LeftArea = styled_components.default.div`
13583
+ var LeftArea$1 = styled_components.default.div`
13224
13584
  display: flex;
13225
13585
  align-items: center;
13226
13586
  gap: var(--columnPadding, 16px);
@@ -13305,7 +13665,7 @@ var UtilityHeader = ({ showBreadcrumbs = true, breadcrumbs = [], showHomeIcon =
13305
13665
  const { isLarge } = useBreakpoints();
13306
13666
  const iconInGutter = $iconInGutter !== void 0 ? $iconInGutter : isLarge;
13307
13667
  const hasBreadcrumbs = showBreadcrumbs && breadcrumbs.length > 0;
13308
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(Container$17, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(LeftArea, { children: [back && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(UtilityHeaderBack, {
13668
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(Container$17, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(LeftArea$1, { children: [back && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(UtilityHeaderBack, {
13309
13669
  $showDivider: hasBreadcrumbs,
13310
13670
  $iconInGutter: iconInGutter,
13311
13671
  ...back
@@ -14100,6 +14460,11 @@ var NotificationsHistory = ({ read, unread, noNotificationsText = "No new notifi
14100
14460
  };
14101
14461
  //#endregion
14102
14462
  //#region src/Global/molecules/TopBar.tsx
14463
+ var RESERVED_DRAWER_IDS = [
14464
+ "user",
14465
+ "notifications",
14466
+ "custom"
14467
+ ];
14103
14468
  var Container$10 = styled_components.default.div`
14104
14469
  z-index: 9;
14105
14470
  position: sticky;
@@ -14120,6 +14485,10 @@ var RightArea = styled_components.default.div`
14120
14485
  gap: 24px;
14121
14486
  height: 100%;
14122
14487
  `;
14488
+ var LeftArea = styled_components.default.div`
14489
+ display: flex;
14490
+ height: 100%;
14491
+ `;
14123
14492
  var SearchBar = styled_components.default.div`
14124
14493
  flex: 0 1 500px;
14125
14494
  display: flex;
@@ -14265,20 +14634,45 @@ var NotificationsContainer = styled_components.default.div`
14265
14634
  overflow-y: scroll;
14266
14635
  margin-right: -17px;
14267
14636
  `;
14268
- var TopBar = ({ hasNotifications = false, hasLanguage = false, selectedLanguageText = "", languageOptionsText, selectedLangAttribute, hasLogout = true, logoutLink = "/logout", logoutText = "Logout", hasSearch = false, hasCurrentUser = true, currentUserText = "Current User", accountOptionText = "Account Options", searchPlaceholder = "Search for devices, analysis tasks, etc.", userSubmenu = [], userDrawerBespoke, loggedInUser, notificationsHistory, customDrawer, hasSwitchTheme = false, isLightMode = true, switchThemeText = "SWITCH THEME", selectedThemeText = "", onLogout = () => {}, onLanguageToggle = () => {}, onThemeToggle = () => {}, userDrawerFooter, userDrawerMeta, onUserDrawerMetaClick = () => {}, hasUserDrawerMeta, copySuccessMessage, includeCopyTitle, hasUserDrawerFooter, badge }) => {
14269
- const [openDrawer, setOpenDrawer] = (0, react.useState)(null);
14637
+ var TopBar = ({ hasNotifications = false, hasLanguage = false, selectedLanguageText = "", languageOptionsText, selectedLangAttribute, hasLogout = true, logoutLink = "/logout", logoutText = "Logout", hasSearch = false, hasCurrentUser = true, currentUserText = "Current User", accountOptionText = "Account Options", searchPlaceholder = "Search for devices, analysis tasks, etc.", userSubmenu = [], userDrawerBespoke, loggedInUser, notificationsHistory, customDrawer, hasSwitchTheme = false, isLightMode = true, switchThemeText = "SWITCH THEME", selectedThemeText = "", onLogout = () => {}, onLanguageToggle = () => {}, onThemeToggle = () => {}, userDrawerFooter, userDrawerMeta, onUserDrawerMetaClick = () => {}, hasUserDrawerMeta, copySuccessMessage, includeCopyTitle, hasUserDrawerFooter, badge, leftAreaElement, sideDrawers, activeDrawer, onActiveDrawerChange }) => {
14638
+ const [internalDrawer, setInternalDrawer] = (0, react.useState)(null);
14639
+ const isControlled = activeDrawer !== void 0;
14640
+ const openDrawer = isControlled ? activeDrawer : internalDrawer;
14270
14641
  const toggleDrawers = (drawerKey) => {
14271
- setOpenDrawer((prevDrawer) => {
14272
- if (prevDrawer === drawerKey) return null;
14273
- return drawerKey;
14274
- });
14642
+ const nextDrawer = openDrawer === drawerKey ? null : drawerKey;
14643
+ if (!isControlled) setInternalDrawer(nextDrawer);
14644
+ onActiveDrawerChange?.(nextDrawer);
14275
14645
  };
14646
+ const { sideDrawersToRender, sideDrawerWarnings } = (0, react.useMemo)(() => {
14647
+ const toRender = [];
14648
+ const warnings = [];
14649
+ const acceptedIds = /* @__PURE__ */ new Set();
14650
+ for (const drawer of sideDrawers ?? []) {
14651
+ if (RESERVED_DRAWER_IDS.includes(drawer.id)) {
14652
+ warnings.push(`the side drawer with id "${drawer.id}" uses a reserved id (${RESERVED_DRAWER_IDS.join(", ")}), so it will not open when its trigger is clicked. Please use a different id.`);
14653
+ continue;
14654
+ }
14655
+ if (acceptedIds.has(drawer.id)) {
14656
+ warnings.push(`a side drawer with id "${drawer.id}" already exists; the duplicate will not open when its trigger is clicked. Please use a unique id.`);
14657
+ continue;
14658
+ }
14659
+ acceptedIds.add(drawer.id);
14660
+ toRender.push(drawer);
14661
+ }
14662
+ return {
14663
+ sideDrawersToRender: toRender,
14664
+ sideDrawerWarnings: warnings
14665
+ };
14666
+ }, [sideDrawers]);
14667
+ (0, react.useEffect)(() => {
14668
+ for (const warning of sideDrawerWarnings) console.warn(`TopBar: ${warning}`);
14669
+ }, []);
14276
14670
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(Container$10, { children: [
14277
14671
  hasSearch ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(SearchBar, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconWrapper, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_LineUIVideoBase.Icon, {
14278
14672
  icon: "Search",
14279
14673
  size: 16,
14280
14674
  color: "grey-6"
14281
- }) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SearchInput, { placeholder: searchPlaceholder })] }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {}),
14675
+ }) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SearchInput, { placeholder: searchPlaceholder })] }) : leftAreaElement ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(LeftArea, { children: leftAreaElement }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {}),
14282
14676
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(RightArea, { children: [badge && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TopBarBadge, { ...badge }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(ButtonArea, { children: [
14283
14677
  customDrawer && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DrawerToggle, {
14284
14678
  $isActive: openDrawer === "custom",
@@ -14346,7 +14740,12 @@ var TopBar = ({ hasNotifications = false, hasLanguage = false, selectedLanguageT
14346
14740
  $isOpen: openDrawer === "custom",
14347
14741
  $baseWidth: customDrawer.width ? customDrawer.width : "200px",
14348
14742
  children: customDrawer.customComponent
14349
- })
14743
+ }),
14744
+ sideDrawersToRender.map((drawer) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Drawer, {
14745
+ $isOpen: openDrawer === drawer.id,
14746
+ $baseWidth: drawer.width ? drawer.width : "200px",
14747
+ children: drawer.content
14748
+ }, drawer.id))
14350
14749
  ] }), document.body)
14351
14750
  ] });
14352
14751
  };
@@ -15437,7 +15836,10 @@ var HeaderContainer = styled_components.default.div`
15437
15836
  flex-grow: 3;
15438
15837
  }
15439
15838
  `;
15440
- var MobileNavbar = ({ content, home, logoMark, supportUrl, defaultMenuOpen = true, closeText, hasLanguage, hasLogout, logoutLink, hasCurrentUser, hasNotifications, userSubmenu, userDrawerBespoke, loggedInUser, notificationsHistory, customDrawer, supportText, onLogout, onLanguageToggle, ...props }) => {
15839
+ var MobileNavbar = ({ content, home, logoMark, supportUrl, defaultMenuOpen = true, closeText, hasLanguage, hasLogout, logoutLink, hasCurrentUser, hasNotifications, userSubmenu, userDrawerBespoke, loggedInUser, notificationsHistory, customDrawer, sideDrawers, supportText, onLogout, onLanguageToggle, ...props }) => {
15840
+ (0, react.useEffect)(() => {
15841
+ if (sideDrawers?.length) console.warn("MobileNavbar: `sideDrawers` are not supported on mobile and will not open. Use `customDrawer` for a drawer that works across breakpoints.");
15842
+ }, []);
15441
15843
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Container$1, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(Tabs, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(HeaderContainer, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(MobileLogoLink, {
15442
15844
  home,
15443
15845
  logoMark,
@@ -15655,6 +16057,10 @@ exports.ButtonsStack = ButtonsStack;
15655
16057
  exports.CameraPanelWrapper = CameraPanelWrapper;
15656
16058
  exports.CameraPanels = CameraPanels;
15657
16059
  exports.Checkbox = Checkbox;
16060
+ exports.ChipBar = ChipBar;
16061
+ exports.ChipButton = ChipButton;
16062
+ exports.ChipDropdown = ChipDropdown;
16063
+ exports.ChipZoneBreak = ChipZoneBreak;
15658
16064
  exports.ConfirmationModal = ConfirmationModal;
15659
16065
  exports.Content = Content;
15660
16066
  exports.ContentLayout = ContentLayout;