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.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 [
|
|
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
|
-
|
|
14272
|
-
|
|
14273
|
-
|
|
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;
|