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/Chips/atoms/ChipButton.d.ts +22 -0
- package/dist/Chips/atoms/ChipButton.d.ts.map +1 -0
- package/dist/Chips/atoms/ChipZoneBreak.d.ts +5 -0
- package/dist/Chips/atoms/ChipZoneBreak.d.ts.map +1 -0
- package/dist/Chips/index.d.ts +7 -0
- package/dist/Chips/index.d.ts.map +1 -0
- package/dist/Chips/molecules/ChipDropdown.d.ts +31 -0
- package/dist/Chips/molecules/ChipDropdown.d.ts.map +1 -0
- package/dist/Chips/organisms/ChipBar.d.ts +9 -0
- package/dist/Chips/organisms/ChipBar.d.ts.map +1 -0
- package/dist/Global/index.d.ts +45 -0
- package/dist/Global/index.d.ts.map +1 -1
- package/dist/Global/molecules/TopBar.d.ts.map +1 -1
- package/dist/Global/organisms/MobileNavbar.d.ts.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +417 -11
- package/dist/index.js.map +1 -1
- package/dist/index.modern.js +416 -14
- package/dist/index.modern.js.map +1 -1
- package/package.json +1 -1
package/dist/index.modern.js
CHANGED
|
@@ -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 [
|
|
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
|
-
|
|
14255
|
-
|
|
14256
|
-
|
|
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
|