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.
@@ -1,7 +1,7 @@
1
1
  import { a as Icon, c as animation, d as dimensions, f as fontFamily, i as Spinner, l as deviceMediaQuery, n as LineSet, o as IconSVGs, r as LineSetContext, s as IconWrapper$4, t as LineUIVideoBase, u as deviceSize } from "./LineUIVideoBase-CJ61ZqPJ.mjs";
2
2
  import styled, { createGlobalStyle, css, keyframes } from "styled-components";
3
- import React, { Fragment, useCallback, useContext, useEffect, useImperativeHandle, useLayoutEffect, useMemo, useReducer, useRef, useState } from "react";
4
- import { jsx, jsxs } from "react/jsx-runtime";
3
+ import React, { Children, Fragment, cloneElement, isValidElement, useCallback, useContext, useEffect, useImperativeHandle, useLayoutEffect, useMemo, useReducer, useRef, useState } from "react";
4
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
5
5
  import ReactDom from "react-dom";
6
6
  import { add, addMonths, eachDayOfInterval, eachWeekOfInterval, endOfDay, endOfMonth, endOfWeek, format, intervalToDuration, isAfter, isEqual, isSameDay, isSameMonth, isToday, isWithinInterval, min, set, startOfDay, startOfMonth } from "date-fns";
7
7
  import { Link, useLocation, useNavigate } from "react-router-dom";
@@ -12392,6 +12392,366 @@ var TagList = ({ tagsConfig }) => {
12392
12392
  }) });
12393
12393
  };
12394
12394
  //#endregion
12395
+ //#region src/Chips/atoms/ChipButton.tsx
12396
+ var collapse = keyframes`
12397
+ to {
12398
+ width: 0;
12399
+ opacity: 0;
12400
+ border-left-width: 0;
12401
+ }
12402
+ `;
12403
+ var StyledChip = styled.button`
12404
+ position: relative;
12405
+ display: flex;
12406
+ align-items: center;
12407
+ justify-content: center;
12408
+ width: 56px;
12409
+ height: 56px;
12410
+ padding: 0;
12411
+ border: none;
12412
+ background: transparent;
12413
+ cursor: pointer;
12414
+ outline: none;
12415
+ box-sizing: border-box;
12416
+ font-family: var(--font-ui);
12417
+ font-size: 14px;
12418
+ font-weight: 500;
12419
+ line-height: 20px;
12420
+ color: var(--grey-12);
12421
+ transition:
12422
+ color var(--speed-normal) var(--easing-primary-in-out),
12423
+ background-color var(--speed-normal) var(--easing-primary-in-out);
12424
+
12425
+ ${({ $showDivider }) => $showDivider && css`border-left: 1px solid var(--grey-4);`}
12426
+
12427
+ & svg [stroke] { stroke: var(--grey-12); }
12428
+
12429
+ &::after {
12430
+ content: '';
12431
+ position: absolute;
12432
+ bottom: 0;
12433
+ left: -1px;
12434
+ right: -1px;
12435
+ height: 4px;
12436
+ background-color: transparent;
12437
+ transition: background-color var(--speed-normal) var(--easing-primary-in-out);
12438
+ }
12439
+ &:hover:enabled::after { background-color: var(--primary-6); }
12440
+
12441
+ &:focus-visible {
12442
+ outline: 2px solid var(--primary-9);
12443
+ outline-offset: -2px;
12444
+ }
12445
+
12446
+ ${({ $selected }) => $selected && css`
12447
+ background-color: var(--primary-a3);
12448
+ color: var(--primary-11);
12449
+ & svg [stroke] { stroke: var(--primary-11); }
12450
+ &::after { background-color: var(--primary-9); }
12451
+ &:hover:enabled::after { background-color: var(--primary-9); }
12452
+ `}
12453
+
12454
+ &:disabled { cursor: not-allowed; opacity: 0.5; }
12455
+
12456
+ ${({ $leaving }) => $leaving && css`
12457
+ overflow: hidden;
12458
+ min-width: 0;
12459
+ pointer-events: none;
12460
+ animation: ${collapse} var(--speed-fast) var(--easing-primary-in-out) forwards;
12461
+
12462
+ @media (prefers-reduced-motion: reduce) { animation: none; }
12463
+ `}
12464
+ `;
12465
+ var ChipButton = ({ variant = "text", icon, label, selected = false, noDivider = false, leaving = false, onLeaveEnd, onAnimationEnd, children, ...props }) => {
12466
+ const showDivider = !noDivider;
12467
+ const isMenuButton = props["aria-haspopup"] !== void 0;
12468
+ const hasFired = useRef(false);
12469
+ const fireLeaveEnd = useCallback(() => {
12470
+ if (hasFired.current) return;
12471
+ hasFired.current = true;
12472
+ onLeaveEnd?.();
12473
+ }, [onLeaveEnd]);
12474
+ useEffect(() => {
12475
+ if (!leaving) {
12476
+ hasFired.current = false;
12477
+ return;
12478
+ }
12479
+ if (window.matchMedia("(prefers-reduced-motion: reduce)").matches) fireLeaveEnd();
12480
+ }, [leaving, fireLeaveEnd]);
12481
+ const handleAnimationEnd = useCallback((e) => {
12482
+ onAnimationEnd?.(e);
12483
+ if (leaving && e.target === e.currentTarget) fireLeaveEnd();
12484
+ }, [
12485
+ leaving,
12486
+ fireLeaveEnd,
12487
+ onAnimationEnd
12488
+ ]);
12489
+ return /* @__PURE__ */ jsx(StyledChip, {
12490
+ type: "button",
12491
+ "aria-pressed": isMenuButton ? void 0 : selected,
12492
+ $selected: selected,
12493
+ $showDivider: showDivider,
12494
+ $leaving: leaving,
12495
+ ...props,
12496
+ onAnimationEnd: handleAnimationEnd,
12497
+ children: variant === "icon" && icon ? /* @__PURE__ */ jsx(Icon, {
12498
+ icon,
12499
+ size: 16
12500
+ }) : label ?? children
12501
+ });
12502
+ };
12503
+ //#endregion
12504
+ //#region src/Chips/atoms/ChipZoneBreak.tsx
12505
+ var Break = styled.div`
12506
+ box-sizing: border-box;
12507
+ flex-shrink: 0;
12508
+ width: 12px;
12509
+ height: 56px;
12510
+ background-color: var(--grey-3);
12511
+ border-left: 1px solid var(--grey-4);
12512
+ border-right: 1px solid var(--grey-4);
12513
+ `;
12514
+ var ChipZoneBreak = (props) => /* @__PURE__ */ jsx(Break, {
12515
+ "aria-hidden": "true",
12516
+ ...props
12517
+ });
12518
+ //#endregion
12519
+ //#region src/Chips/molecules/ChipDropdown.tsx
12520
+ var Wrapper = styled.div`
12521
+ position: relative;
12522
+ display: inline-flex;
12523
+ `;
12524
+ var Trigger = styled(ChipButton)`
12525
+ && {
12526
+ background-color: transparent;
12527
+
12528
+ ${({ $labelled }) => $labelled && css`
12529
+ width: auto;
12530
+ padding: 0 16px 0 14px;
12531
+ gap: 8px;
12532
+ justify-content: flex-start;
12533
+ white-space: nowrap;
12534
+ color: var(--grey-12);
12535
+ & svg [stroke] { stroke: var(--grey-12); }
12536
+ `}
12537
+ }
12538
+ `;
12539
+ var Menu = styled.div`
12540
+ position: absolute;
12541
+ top: calc(100% + 8px);
12542
+ left: -1px;
12543
+ z-index: 100;
12544
+ display: flex;
12545
+ flex-direction: column;
12546
+ align-items: stretch;
12547
+ min-width: 216px;
12548
+ padding: 4px 0;
12549
+ background: var(--grey-1);
12550
+ border: 1px solid var(--grey-4);
12551
+ border-radius: 4px;
12552
+ box-shadow: 0px 5px 25px 0px var(--filter-button-shadow-color);
12553
+ `;
12554
+ var MenuItem = styled.button`
12555
+ display: flex;
12556
+ align-items: center;
12557
+ gap: 4px;
12558
+ width: 100%;
12559
+ height: var(--button-height, 32px);
12560
+ padding: 3px 8px;
12561
+ border: none;
12562
+ border-bottom: 1px solid var(--grey-7);
12563
+ background: transparent;
12564
+ cursor: pointer;
12565
+ font-family: var(--font-ui);
12566
+ font-size: 14px;
12567
+ font-weight: 500;
12568
+ line-height: 20px;
12569
+ color: var(--grey-12);
12570
+ text-align: left;
12571
+ transition: background-color var(--speed-fast) var(--easing-primary-in-out);
12572
+
12573
+ & svg [stroke] { stroke: var(--grey-12); }
12574
+
12575
+ &:last-child { border-bottom: none; }
12576
+ &:hover:enabled { background-color: var(--grey-3); }
12577
+ &:disabled { cursor: not-allowed; opacity: 0.5; }
12578
+
12579
+ ${({ $current }) => $current && css`
12580
+ background-color: var(--grey-4);
12581
+ &:hover:enabled { background-color: var(--grey-5); }
12582
+ `}
12583
+ `;
12584
+ var CheckSlot = styled.span`
12585
+ display: flex;
12586
+ margin-left: auto;
12587
+ `;
12588
+ var ChipDropdown = ({ items, icon = "FilterEllipsis", label, selectedId, checkIcon = "Success", triggerLabel, noDivider = false, disabled = false, onOpenChange, onKeyDown, ...props }) => {
12589
+ const [isOpen, setIsOpen] = useState(false);
12590
+ const wrapperRef = useRef(null);
12591
+ const isLabelled = Boolean(label);
12592
+ const marksCurrent = selectedId !== void 0;
12593
+ const ariaLabel = triggerLabel ?? (isLabelled ? void 0 : "Space actions");
12594
+ const setOpen = useCallback((next) => {
12595
+ setIsOpen(next);
12596
+ onOpenChange?.(next);
12597
+ }, [onOpenChange]);
12598
+ const close = useCallback(() => setOpen(false), [setOpen]);
12599
+ const toggle = useCallback(() => setOpen(!isOpen), [isOpen, setOpen]);
12600
+ useClickOutside(wrapperRef, useCallback(() => {
12601
+ if (isOpen) close();
12602
+ }, [isOpen, close]));
12603
+ useEffect(() => {
12604
+ if (disabled && isOpen) close();
12605
+ }, [
12606
+ disabled,
12607
+ isOpen,
12608
+ close
12609
+ ]);
12610
+ const handleKeyDown = useCallback((e) => {
12611
+ onKeyDown?.(e);
12612
+ if (e.key === "Escape" && isOpen) close();
12613
+ }, [
12614
+ isOpen,
12615
+ close,
12616
+ onKeyDown
12617
+ ]);
12618
+ return /* @__PURE__ */ jsxs(Wrapper, {
12619
+ ref: wrapperRef,
12620
+ ...props,
12621
+ onKeyDown: handleKeyDown,
12622
+ children: [/* @__PURE__ */ jsx(Trigger, {
12623
+ $labelled: isLabelled,
12624
+ variant: isLabelled ? void 0 : "icon",
12625
+ icon: isLabelled ? void 0 : icon,
12626
+ selected: isOpen,
12627
+ noDivider,
12628
+ disabled,
12629
+ "aria-label": ariaLabel,
12630
+ "aria-haspopup": "menu",
12631
+ "aria-expanded": isOpen,
12632
+ onClick: toggle,
12633
+ children: isLabelled ? /* @__PURE__ */ jsxs(Fragment$1, { children: [
12634
+ icon ? /* @__PURE__ */ jsx(Icon, {
12635
+ icon,
12636
+ size: 18
12637
+ }) : null,
12638
+ label,
12639
+ /* @__PURE__ */ jsx(Icon, {
12640
+ icon: "Down",
12641
+ size: 12
12642
+ })
12643
+ ] }) : null
12644
+ }), isOpen && !disabled ? /* @__PURE__ */ jsx(Menu, {
12645
+ role: "menu",
12646
+ children: items.map((item) => {
12647
+ const isCurrent = marksCurrent && item.id === selectedId;
12648
+ return /* @__PURE__ */ jsxs(MenuItem, {
12649
+ type: "button",
12650
+ role: marksCurrent ? "menuitemradio" : "menuitem",
12651
+ "aria-checked": marksCurrent ? isCurrent : void 0,
12652
+ $current: isCurrent,
12653
+ disabled: item.disabled,
12654
+ onClick: () => {
12655
+ item.onClick?.();
12656
+ close();
12657
+ },
12658
+ children: [
12659
+ item.icon ? /* @__PURE__ */ jsx(Icon, {
12660
+ icon: item.icon,
12661
+ size: 14
12662
+ }) : null,
12663
+ item.label,
12664
+ isCurrent ? /* @__PURE__ */ jsx(CheckSlot, {
12665
+ "aria-hidden": "true",
12666
+ children: /* @__PURE__ */ jsx(Icon, {
12667
+ icon: checkIcon,
12668
+ size: 14,
12669
+ weight: "light"
12670
+ })
12671
+ }) : null
12672
+ ]
12673
+ }, item.id);
12674
+ })
12675
+ }) : null]
12676
+ });
12677
+ };
12678
+ //#endregion
12679
+ //#region src/Chips/organisms/ChipBar.tsx
12680
+ var Bar = styled.div`
12681
+ display: flex;
12682
+ align-items: center;
12683
+ height: 56px;
12684
+
12685
+ & > * {
12686
+ flex-shrink: 0;
12687
+ }
12688
+ `;
12689
+ var NAV_KEYS = [
12690
+ "ArrowLeft",
12691
+ "ArrowRight",
12692
+ "Home",
12693
+ "End"
12694
+ ];
12695
+ var ChipBar = ({ children, onKeyDown, onFocus, ...props }) => {
12696
+ const barRef = useRef(null);
12697
+ const [activeIndex, setActiveIndex] = useState(0);
12698
+ const getCells = useCallback(() => {
12699
+ const root = barRef.current;
12700
+ if (!root) return [];
12701
+ return Array.from(root.querySelectorAll("button:not(:disabled)")).filter((el) => !el.closest("[role=\"menu\"]"));
12702
+ }, []);
12703
+ useEffect(() => {
12704
+ const root = barRef.current;
12705
+ if (!root) return;
12706
+ const sync = () => {
12707
+ const focusables = getCells();
12708
+ const index = Math.min(activeIndex, focusables.length - 1);
12709
+ focusables.forEach((cell, i) => {
12710
+ cell.tabIndex = i === index ? 0 : -1;
12711
+ });
12712
+ };
12713
+ sync();
12714
+ const observer = new MutationObserver(sync);
12715
+ observer.observe(root, {
12716
+ childList: true,
12717
+ subtree: true,
12718
+ attributes: true,
12719
+ attributeFilter: ["disabled"]
12720
+ });
12721
+ return () => observer.disconnect();
12722
+ }, [activeIndex, getCells]);
12723
+ const cells = Children.toArray(children).filter(isValidElement);
12724
+ const handleFocus = useCallback((e) => {
12725
+ onFocus?.(e);
12726
+ const index = getCells().indexOf(e.target);
12727
+ if (index >= 0) setActiveIndex(index);
12728
+ }, [getCells, onFocus]);
12729
+ const handleKeyDown = useCallback((e) => {
12730
+ onKeyDown?.(e);
12731
+ if (!NAV_KEYS.includes(e.key)) return;
12732
+ if (barRef.current?.querySelector("[role=\"menu\"]")) return;
12733
+ const focusables = getCells();
12734
+ const current = focusables.indexOf(document.activeElement);
12735
+ if (focusables.length === 0 || current < 0) return;
12736
+ e.preventDefault();
12737
+ let next = current;
12738
+ if (e.key === "ArrowLeft") next = (current - 1 + focusables.length) % focusables.length;
12739
+ if (e.key === "ArrowRight") next = (current + 1) % focusables.length;
12740
+ if (e.key === "Home") next = 0;
12741
+ if (e.key === "End") next = focusables.length - 1;
12742
+ focusables[next]?.focus();
12743
+ }, [getCells, onKeyDown]);
12744
+ return /* @__PURE__ */ jsx(Bar, {
12745
+ ref: barRef,
12746
+ role: "toolbar",
12747
+ "aria-label": "Chip bar",
12748
+ ...props,
12749
+ onFocus: handleFocus,
12750
+ onKeyDown: handleKeyDown,
12751
+ children: cells.map((child, i) => i === 0 && typeof child.type !== "string" ? cloneElement(child, { noDivider: true }) : child)
12752
+ });
12753
+ };
12754
+ //#endregion
12395
12755
  //#region src/Modals/ConfirmationModal.tsx
12396
12756
  var Container$20 = styled.div``;
12397
12757
  var Title$3 = styled.div`
@@ -13203,7 +13563,7 @@ var Container$17 = styled.div`
13203
13563
  width: 100%;
13204
13564
  display: flex;
13205
13565
  `;
13206
- var LeftArea = styled.div`
13566
+ var LeftArea$1 = styled.div`
13207
13567
  display: flex;
13208
13568
  align-items: center;
13209
13569
  gap: var(--columnPadding, 16px);
@@ -13288,7 +13648,7 @@ var UtilityHeader = ({ showBreadcrumbs = true, breadcrumbs = [], showHomeIcon =
13288
13648
  const { isLarge } = useBreakpoints();
13289
13649
  const iconInGutter = $iconInGutter !== void 0 ? $iconInGutter : isLarge;
13290
13650
  const hasBreadcrumbs = showBreadcrumbs && breadcrumbs.length > 0;
13291
- return /* @__PURE__ */ jsxs(Container$17, { children: [/* @__PURE__ */ jsxs(LeftArea, { children: [back && /* @__PURE__ */ jsx(UtilityHeaderBack, {
13651
+ return /* @__PURE__ */ jsxs(Container$17, { children: [/* @__PURE__ */ jsxs(LeftArea$1, { children: [back && /* @__PURE__ */ jsx(UtilityHeaderBack, {
13292
13652
  $showDivider: hasBreadcrumbs,
13293
13653
  $iconInGutter: iconInGutter,
13294
13654
  ...back
@@ -14083,6 +14443,11 @@ var NotificationsHistory = ({ read, unread, noNotificationsText = "No new notifi
14083
14443
  };
14084
14444
  //#endregion
14085
14445
  //#region src/Global/molecules/TopBar.tsx
14446
+ var RESERVED_DRAWER_IDS = [
14447
+ "user",
14448
+ "notifications",
14449
+ "custom"
14450
+ ];
14086
14451
  var Container$10 = styled.div`
14087
14452
  z-index: 9;
14088
14453
  position: sticky;
@@ -14103,6 +14468,10 @@ var RightArea = styled.div`
14103
14468
  gap: 24px;
14104
14469
  height: 100%;
14105
14470
  `;
14471
+ var LeftArea = styled.div`
14472
+ display: flex;
14473
+ height: 100%;
14474
+ `;
14106
14475
  var SearchBar = styled.div`
14107
14476
  flex: 0 1 500px;
14108
14477
  display: flex;
@@ -14248,20 +14617,45 @@ var NotificationsContainer = styled.div`
14248
14617
  overflow-y: scroll;
14249
14618
  margin-right: -17px;
14250
14619
  `;
14251
- 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 }) => {
14252
- const [openDrawer, setOpenDrawer] = useState(null);
14620
+ 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 }) => {
14621
+ const [internalDrawer, setInternalDrawer] = useState(null);
14622
+ const isControlled = activeDrawer !== void 0;
14623
+ const openDrawer = isControlled ? activeDrawer : internalDrawer;
14253
14624
  const toggleDrawers = (drawerKey) => {
14254
- setOpenDrawer((prevDrawer) => {
14255
- if (prevDrawer === drawerKey) return null;
14256
- return drawerKey;
14257
- });
14625
+ const nextDrawer = openDrawer === drawerKey ? null : drawerKey;
14626
+ if (!isControlled) setInternalDrawer(nextDrawer);
14627
+ onActiveDrawerChange?.(nextDrawer);
14258
14628
  };
14629
+ const { sideDrawersToRender, sideDrawerWarnings } = useMemo(() => {
14630
+ const toRender = [];
14631
+ const warnings = [];
14632
+ const acceptedIds = /* @__PURE__ */ new Set();
14633
+ for (const drawer of sideDrawers ?? []) {
14634
+ if (RESERVED_DRAWER_IDS.includes(drawer.id)) {
14635
+ 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.`);
14636
+ continue;
14637
+ }
14638
+ if (acceptedIds.has(drawer.id)) {
14639
+ 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.`);
14640
+ continue;
14641
+ }
14642
+ acceptedIds.add(drawer.id);
14643
+ toRender.push(drawer);
14644
+ }
14645
+ return {
14646
+ sideDrawersToRender: toRender,
14647
+ sideDrawerWarnings: warnings
14648
+ };
14649
+ }, [sideDrawers]);
14650
+ useEffect(() => {
14651
+ for (const warning of sideDrawerWarnings) console.warn(`TopBar: ${warning}`);
14652
+ }, []);
14259
14653
  return /* @__PURE__ */ jsxs(Container$10, { children: [
14260
14654
  hasSearch ? /* @__PURE__ */ jsxs(SearchBar, { children: [/* @__PURE__ */ jsx(IconWrapper, { children: /* @__PURE__ */ jsx(Icon, {
14261
14655
  icon: "Search",
14262
14656
  size: 16,
14263
14657
  color: "grey-6"
14264
- }) }), /* @__PURE__ */ jsx(SearchInput, { placeholder: searchPlaceholder })] }) : /* @__PURE__ */ jsx("div", {}),
14658
+ }) }), /* @__PURE__ */ jsx(SearchInput, { placeholder: searchPlaceholder })] }) : leftAreaElement ? /* @__PURE__ */ jsx(LeftArea, { children: leftAreaElement }) : /* @__PURE__ */ jsx("div", {}),
14265
14659
  /* @__PURE__ */ jsxs(RightArea, { children: [badge && /* @__PURE__ */ jsx(TopBarBadge, { ...badge }), /* @__PURE__ */ jsxs(ButtonArea, { children: [
14266
14660
  customDrawer && /* @__PURE__ */ jsx(DrawerToggle, {
14267
14661
  $isActive: openDrawer === "custom",
@@ -14329,7 +14723,12 @@ var TopBar = ({ hasNotifications = false, hasLanguage = false, selectedLanguageT
14329
14723
  $isOpen: openDrawer === "custom",
14330
14724
  $baseWidth: customDrawer.width ? customDrawer.width : "200px",
14331
14725
  children: customDrawer.customComponent
14332
- })
14726
+ }),
14727
+ sideDrawersToRender.map((drawer) => /* @__PURE__ */ jsx(Drawer, {
14728
+ $isOpen: openDrawer === drawer.id,
14729
+ $baseWidth: drawer.width ? drawer.width : "200px",
14730
+ children: drawer.content
14731
+ }, drawer.id))
14333
14732
  ] }), document.body)
14334
14733
  ] });
14335
14734
  };
@@ -15420,7 +15819,10 @@ var HeaderContainer = styled.div`
15420
15819
  flex-grow: 3;
15421
15820
  }
15422
15821
  `;
15423
- var MobileNavbar = ({ content, home, logoMark, supportUrl, defaultMenuOpen = true, closeText, hasLanguage, hasLogout, logoutLink, hasCurrentUser, hasNotifications, userSubmenu, userDrawerBespoke, loggedInUser, notificationsHistory, customDrawer, supportText, onLogout, onLanguageToggle, ...props }) => {
15822
+ var MobileNavbar = ({ content, home, logoMark, supportUrl, defaultMenuOpen = true, closeText, hasLanguage, hasLogout, logoutLink, hasCurrentUser, hasNotifications, userSubmenu, userDrawerBespoke, loggedInUser, notificationsHistory, customDrawer, sideDrawers, supportText, onLogout, onLanguageToggle, ...props }) => {
15823
+ useEffect(() => {
15824
+ 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.");
15825
+ }, []);
15424
15826
  return /* @__PURE__ */ jsx(Container$1, { children: /* @__PURE__ */ jsxs(Tabs, { children: [/* @__PURE__ */ jsxs(HeaderContainer, { children: [/* @__PURE__ */ jsx(MobileLogoLink, {
15425
15827
  home,
15426
15828
  logoMark,
@@ -15622,6 +16024,6 @@ var Sidebar = ({ children, ...props }) => {
15622
16024
  });
15623
16025
  };
15624
16026
  //#endregion
15625
- export { ActionButtons, ActionsBar, AlertBar, AlertWrapper, AreaUploadManager, AvatarUploader, BackLink, BaseStyles, BasicSearchInput, Button, ButtonWithIcon, ButtonWithLoading, ButtonsStack, CameraPanelWrapper, CameraPanels, Checkbox, ConfirmationModal, Content, ContentLayout, CropTool, DatePicker, DebouncedSearcher, DropArea, DurationSlider, EditCell, FilterBar, FilterButton, FilterDropdown, FilterDropdownContainer, FilterInputs, FilterLayout, FiltersResults, FlexContentPlaceholder, Form, FullWidthContentBlock, GlobalUI, Icon, IconButton, IconSVGs, Input, InputFileButton, IntroductionText, Label, Layout, LineReducer_default as LineReducer, LineSetContext, LineUI, LineUI$1 as LineUIRTC, LineUIVideo, Logo, MainContainer, MainMenu, MediaBox, ModalContext, ModalProvider, MultilineContent, Notification, NotificationProvider, PageHeader, PageTitle, Pagination, PasswordField, PercentageSlider, RadioButton, SelectField, SelectWrapper, Sidebar, SidebarBox, SidebarHeading, SidebarLink, SidebarLinkHeading, SliderInput, SmallInput, SortDropdown, Spinner, SplitButton, SplitLayout, StatusIcon, Switch, Tab, TabContent, TabContext, TabList, TabWithIcon, TableHeaderTitle, TableRowThumbnail, Tabs, TabsWithIconBar, Tag, TagList, TagListWrapper, TextArea, TextAreaField, TextField, ThemeVariables, ToggleButton, Tooltip, TopBar, TypeTable, UtilityHeader, WebRTCPlayer as WebRTCClient, theme_default as defaultTheme, isDateInterval, isFilterItem, resetButtonStyles, useClickOutside, useCopyToClipboard, useInterval, useMediaModal, useModal, useNotification, usePoll, useThemeToggle, useTitle, useTo };
16027
+ export { ActionButtons, ActionsBar, AlertBar, AlertWrapper, AreaUploadManager, AvatarUploader, BackLink, BaseStyles, BasicSearchInput, Button, ButtonWithIcon, ButtonWithLoading, ButtonsStack, CameraPanelWrapper, CameraPanels, Checkbox, ChipBar, ChipButton, ChipDropdown, ChipZoneBreak, ConfirmationModal, Content, ContentLayout, CropTool, DatePicker, DebouncedSearcher, DropArea, DurationSlider, EditCell, FilterBar, FilterButton, FilterDropdown, FilterDropdownContainer, FilterInputs, FilterLayout, FiltersResults, FlexContentPlaceholder, Form, FullWidthContentBlock, GlobalUI, Icon, IconButton, IconSVGs, Input, InputFileButton, IntroductionText, Label, Layout, LineReducer_default as LineReducer, LineSetContext, LineUI, LineUI$1 as LineUIRTC, LineUIVideo, Logo, MainContainer, MainMenu, MediaBox, ModalContext, ModalProvider, MultilineContent, Notification, NotificationProvider, PageHeader, PageTitle, Pagination, PasswordField, PercentageSlider, RadioButton, SelectField, SelectWrapper, Sidebar, SidebarBox, SidebarHeading, SidebarLink, SidebarLinkHeading, SliderInput, SmallInput, SortDropdown, Spinner, SplitButton, SplitLayout, StatusIcon, Switch, Tab, TabContent, TabContext, TabList, TabWithIcon, TableHeaderTitle, TableRowThumbnail, Tabs, TabsWithIconBar, Tag, TagList, TagListWrapper, TextArea, TextAreaField, TextField, ThemeVariables, ToggleButton, Tooltip, TopBar, TypeTable, UtilityHeader, WebRTCPlayer as WebRTCClient, theme_default as defaultTheme, isDateInterval, isFilterItem, resetButtonStyles, useClickOutside, useCopyToClipboard, useInterval, useMediaModal, useModal, useNotification, usePoll, useThemeToggle, useTitle, useTo };
15626
16028
 
15627
16029
  //# sourceMappingURL=index.modern.js.map