@deque/cauldron-react 7.1.0-canary.df3401c2 → 7.1.0-canary.e47d2a2d
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/lib/add-user.js +1 -1
- package/lib/arrow-circle.js +1 -1
- package/lib/arrow.js +1 -1
- package/lib/arrows-alt.js +1 -1
- package/lib/bolt.js +1 -1
- package/lib/broken-image.js +1 -1
- package/lib/caution.js +1 -1
- package/lib/check-circle.js +1 -1
- package/lib/check-shield.js +1 -1
- package/lib/check-solid.js +1 -1
- package/lib/check.js +1 -1
- package/lib/checkbox-checked.js +1 -1
- package/lib/checkbox-unchecked.js +1 -1
- package/lib/chevron-double.js +1 -1
- package/lib/chevron.js +1 -1
- package/lib/clipboard.js +1 -1
- package/lib/clock.js +1 -1
- package/lib/close.js +1 -1
- package/lib/code.js +1 -1
- package/lib/components/Accordion/Accordion.d.ts +1 -1
- package/lib/components/ActionMenu/ActionMenu.d.ts +14 -8
- package/lib/components/AnchoredOverlay/index.d.ts +2 -2
- package/lib/components/ClickOutsideListener/index.d.ts +1 -1
- package/lib/components/Combobox/Combobox.d.ts +1 -1
- package/lib/components/Dialog/DialogContext.d.ts +1 -1
- package/lib/components/Dialog/index.d.ts +1 -1
- package/lib/components/Drawer/index.d.ts +1 -1
- package/lib/components/ExpandCollapsePanel/ExpandCollapsePanel.d.ts +1 -1
- package/lib/components/Icon/types.d.ts +1 -1
- package/lib/components/MenuItem/index.d.ts +1 -6
- package/lib/components/Popover/index.d.ts +2 -2
- package/lib/components/Table/TableContext.d.ts +1 -1
- package/lib/components/Tabs/Tab.d.ts +1 -1
- package/lib/components/Tooltip/index.d.ts +2 -2
- package/lib/components/TreeView/helpers.d.ts +33 -0
- package/lib/components/TreeView/index.d.ts +6 -0
- package/lib/components/TreeView/types.d.ts +3 -0
- package/lib/copy.js +1 -1
- package/lib/download.js +1 -1
- package/lib/dropper.js +1 -1
- package/lib/exchange.js +1 -1
- package/lib/export-solid.js +1 -1
- package/lib/external-link.js +1 -1
- package/lib/eye.js +1 -1
- package/lib/filter.js +1 -1
- package/lib/flag.js +1 -1
- package/lib/gears.js +1 -1
- package/lib/github.js +1 -1
- package/lib/grid.js +1 -1
- package/lib/hamburger-menu.js +1 -1
- package/lib/hashtag.js +1 -1
- package/lib/highlight.js +1 -1
- package/lib/images.js +1 -1
- package/lib/index.js +246 -100
- package/lib/info-circle-alt.js +1 -1
- package/lib/info-circle.js +1 -1
- package/lib/info-square.js +1 -1
- package/lib/kabob.js +1 -1
- package/lib/link.js +1 -1
- package/lib/linkedin.js +1 -1
- package/lib/list.js +1 -1
- package/lib/lock.js +1 -1
- package/lib/magnifying-glass.js +1 -1
- package/lib/menu.js +1 -1
- package/lib/minus.js +1 -1
- package/lib/new-releases.js +1 -1
- package/lib/new.js +1 -1
- package/lib/no.js +1 -1
- package/lib/pause.js +1 -1
- package/lib/pencil.js +1 -1
- package/lib/person-running.js +1 -1
- package/lib/play.js +1 -1
- package/lib/plus.js +1 -1
- package/lib/question-circle-alt.js +1 -1
- package/lib/question-circle.js +1 -1
- package/lib/radio-checked.js +1 -1
- package/lib/radio-unchecked.js +1 -1
- package/lib/recycle-square.js +1 -1
- package/lib/recycle.js +1 -1
- package/lib/resend.js +1 -1
- package/lib/robot.js +1 -1
- package/lib/run-again.js +1 -1
- package/lib/save.js +1 -1
- package/lib/share-nodes.js +1 -1
- package/lib/share.js +1 -1
- package/lib/sort-triangle.js +1 -1
- package/lib/sort.js +1 -1
- package/lib/star-outline.js +36 -0
- package/lib/star.js +4 -7
- package/lib/step-back.js +1 -1
- package/lib/step-forward.js +1 -1
- package/lib/sun.js +1 -1
- package/lib/table-sort-ascending.js +1 -1
- package/lib/table-sort-descending.js +1 -1
- package/lib/tag.js +1 -1
- package/lib/target.js +1 -1
- package/lib/trash.js +1 -1
- package/lib/triangle.js +1 -1
- package/lib/twitter.js +1 -1
- package/lib/types.d.ts +1 -1
- package/lib/upload.js +1 -1
- package/lib/utils/getChildRef.d.ts +2 -0
- package/lib/utils/polymorphicComponent.d.ts +1 -1
- package/lib/utils/useFocusTrap.d.ts +1 -1
- package/lib/utils/useMnemonics.d.ts +2 -2
- package/lib/utils/useSharedRef.d.ts +3 -3
- package/package.json +34 -32
package/lib/index.js
CHANGED
|
@@ -185,6 +185,7 @@ var iconTypes = [
|
|
|
185
185
|
'share',
|
|
186
186
|
'sort-triangle',
|
|
187
187
|
'sort',
|
|
188
|
+
'star-outline',
|
|
188
189
|
'star',
|
|
189
190
|
'step-back',
|
|
190
191
|
'step-forward',
|
|
@@ -273,6 +274,7 @@ function __variableDynamicImportRuntime0__(path) {
|
|
|
273
274
|
case './icons/share.svg': return Promise.resolve().then(function () { return require('./share.js'); });
|
|
274
275
|
case './icons/sort-triangle.svg': return Promise.resolve().then(function () { return require('./sort-triangle.js'); });
|
|
275
276
|
case './icons/sort.svg': return Promise.resolve().then(function () { return require('./sort.js'); });
|
|
277
|
+
case './icons/star-outline.svg': return Promise.resolve().then(function () { return require('./star-outline.js'); });
|
|
276
278
|
case './icons/star.svg': return Promise.resolve().then(function () { return require('./star.js'); });
|
|
277
279
|
case './icons/step-back.svg': return Promise.resolve().then(function () { return require('./step-back.js'); });
|
|
278
280
|
case './icons/step-forward.svg': return Promise.resolve().then(function () { return require('./step-forward.js'); });
|
|
@@ -495,24 +497,25 @@ var Accordion = function (_a) {
|
|
|
495
497
|
var childrenArray = React__default["default"].Children.toArray(children);
|
|
496
498
|
var trigger = childrenArray.find(function (child) {
|
|
497
499
|
return typeof child === 'string' ||
|
|
498
|
-
child.type === AccordionTrigger;
|
|
500
|
+
(React__default["default"].isValidElement(child) && child.type === AccordionTrigger);
|
|
499
501
|
});
|
|
500
502
|
var panelElement = childrenArray.find(function (child) {
|
|
501
503
|
return typeof child === 'string' ||
|
|
502
|
-
child.type === AccordionContent;
|
|
504
|
+
(React__default["default"].isValidElement(child) && child.type === AccordionContent);
|
|
503
505
|
});
|
|
504
|
-
|
|
505
|
-
|
|
506
|
+
if (!React__default["default"].isValidElement(trigger) ||
|
|
507
|
+
!React__default["default"].isValidElement(panelElement)) {
|
|
506
508
|
console.warn('Must provide <AccordionTrigger /> and <AccordionContent /> element(s). You provided:', {
|
|
507
509
|
trigger: trigger,
|
|
508
510
|
panelElement: panelElement,
|
|
509
|
-
isValid:
|
|
511
|
+
isValid: false
|
|
510
512
|
});
|
|
511
513
|
return null;
|
|
512
514
|
}
|
|
515
|
+
var panelProps = panelElement.props;
|
|
513
516
|
return (React__default["default"].createElement("div", tslib.__assign({ className: "Accordion" }, props),
|
|
514
|
-
React__default["default"].createElement(ExpandCollapsePanel, tslib.__assign({ id:
|
|
515
|
-
React__default["default"].createElement(PanelTrigger$1, tslib.__assign({ iconCollapsed: "triangle-right", iconExpanded: "triangle-down", className: classNames__default["default"]('Accordion__trigger', trigger.props.className), "aria-controls":
|
|
517
|
+
React__default["default"].createElement(ExpandCollapsePanel, tslib.__assign({ id: panelProps.id || "".concat(elementId, "-panel"), open: open, onToggle: onToggle, animationTiming: animationTiming }, panelProps),
|
|
518
|
+
React__default["default"].createElement(PanelTrigger$1, tslib.__assign({ iconCollapsed: "triangle-right", iconExpanded: "triangle-down", className: classNames__default["default"]('Accordion__trigger', trigger.props.className), "aria-controls": panelProps.id || "".concat(elementId, "-panel"), heading: trigger.props.heading }, trigger.props), trigger),
|
|
516
519
|
panelElement)));
|
|
517
520
|
};
|
|
518
521
|
Accordion.displayName = 'Accordion';
|
|
@@ -578,7 +581,9 @@ var Scrim = /** @class */ (function (_super) {
|
|
|
578
581
|
if (destroy) {
|
|
579
582
|
return null;
|
|
580
583
|
}
|
|
581
|
-
return (React__default["default"].createElement("div", { ref: function (el) {
|
|
584
|
+
return (React__default["default"].createElement("div", { ref: function (el) {
|
|
585
|
+
_this.el = el;
|
|
586
|
+
}, className: "Scrim ".concat(animationClass) }));
|
|
582
587
|
};
|
|
583
588
|
return Scrim;
|
|
584
589
|
}(React__default["default"].Component));
|
|
@@ -620,16 +625,16 @@ var MenuItem = /** @class */ (function (_super) {
|
|
|
620
625
|
if (autoClickLink) {
|
|
621
626
|
clickLink(e.target, this.item);
|
|
622
627
|
}
|
|
623
|
-
onClick(e);
|
|
628
|
+
onClick === null || onClick === void 0 ? void 0 : onClick(e);
|
|
624
629
|
};
|
|
625
630
|
MenuItem.prototype.onKeyDown = function (e) {
|
|
626
|
-
var _a;
|
|
631
|
+
var _a, _b, _c;
|
|
627
632
|
var key = keyname__default["default"](e.which);
|
|
628
633
|
if (key === 'enter' || key === 'space') {
|
|
629
634
|
e.preventDefault();
|
|
630
635
|
(_a = this.item) === null || _a === void 0 ? void 0 : _a.click();
|
|
631
636
|
}
|
|
632
|
-
this.props.onKeyDown(e);
|
|
637
|
+
(_c = (_b = this.props).onKeyDown) === null || _c === void 0 ? void 0 : _c.call(_b, e);
|
|
633
638
|
};
|
|
634
639
|
MenuItem.prototype.render = function () {
|
|
635
640
|
var _this = this;
|
|
@@ -642,12 +647,6 @@ var MenuItem = /** @class */ (function (_super) {
|
|
|
642
647
|
};
|
|
643
648
|
MenuItem.displayName = 'MenuItem';
|
|
644
649
|
MenuItem.defaultProps = {
|
|
645
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
646
|
-
menuItemRef: function () { },
|
|
647
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
648
|
-
onClick: function () { },
|
|
649
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
650
|
-
onKeyDown: function () { },
|
|
651
650
|
autoClickLink: true
|
|
652
651
|
};
|
|
653
652
|
return MenuItem;
|
|
@@ -807,9 +806,16 @@ function resolveElement(elementOrRef) {
|
|
|
807
806
|
return null;
|
|
808
807
|
}
|
|
809
808
|
|
|
809
|
+
function getChildRef(child, version) {
|
|
810
|
+
if (version === void 0) { version = React__default["default"].version; }
|
|
811
|
+
return parseInt(version, 10) >= 19
|
|
812
|
+
? child.props.ref
|
|
813
|
+
: child.ref;
|
|
814
|
+
}
|
|
815
|
+
|
|
810
816
|
function ClickOutsideListener(_a, ref) {
|
|
811
817
|
var children = _a.children, _b = _a.mouseEvent, mouseEvent = _b === void 0 ? 'click' : _b, _c = _a.touchEvent, touchEvent = _c === void 0 ? 'touchend' : _c, target = _a.target, _d = _a.onClickOutside, onClickOutside = _d === void 0 ? function () { return null; } : _d;
|
|
812
|
-
var childElementRef = React.useRef();
|
|
818
|
+
var childElementRef = React.useRef(null);
|
|
813
819
|
var handleEvent = function (event) {
|
|
814
820
|
if (event.defaultPrevented) {
|
|
815
821
|
return;
|
|
@@ -832,9 +838,8 @@ function ClickOutsideListener(_a, ref) {
|
|
|
832
838
|
childElementRef.current = node;
|
|
833
839
|
// Ref for this component should pass-through to the child node
|
|
834
840
|
setRef(ref, node);
|
|
835
|
-
//
|
|
836
|
-
|
|
837
|
-
var childRef = children.ref;
|
|
841
|
+
// Forward the child's own ref. In React 19 ref lives in props; in 16–18 it's element.ref.
|
|
842
|
+
var childRef = getChildRef(children);
|
|
838
843
|
setRef(childRef, node);
|
|
839
844
|
};
|
|
840
845
|
React.useEffect(function () {
|
|
@@ -1343,7 +1348,7 @@ var AriaIsolate = /** @class */ (function () {
|
|
|
1343
1348
|
|
|
1344
1349
|
/**
|
|
1345
1350
|
* When a component needs to track an internal ref on a component that has a
|
|
1346
|
-
* forwarded ref, useSharedRef will return a
|
|
1351
|
+
* forwarded ref, useSharedRef will return a RefObject<T | null> that will
|
|
1347
1352
|
* correctly invoke the parent ref as well providing an internal ref.
|
|
1348
1353
|
*
|
|
1349
1354
|
* @example
|
|
@@ -1356,7 +1361,7 @@ var AriaIsolate = /** @class */ (function () {
|
|
|
1356
1361
|
* })
|
|
1357
1362
|
*/
|
|
1358
1363
|
function useSharedRef(ref) {
|
|
1359
|
-
var internalRef = React.useRef();
|
|
1364
|
+
var internalRef = React.useRef(null);
|
|
1360
1365
|
React.useEffect(function () {
|
|
1361
1366
|
setRef(ref, internalRef.current);
|
|
1362
1367
|
return function () { return setRef(ref, null); };
|
|
@@ -1489,7 +1494,7 @@ function useFocusTrap(target, options) {
|
|
|
1489
1494
|
if (options === void 0) { options = {}; }
|
|
1490
1495
|
var _a = options.disabled, disabled = _a === void 0 ? false : _a, _b = options.returnFocus, returnFocus = _b === void 0 ? true : _b, initialFocusElementOrRef = options.initialFocusElement, returnFocusElement = options.returnFocusElement;
|
|
1491
1496
|
var focusTrap = React.useRef(null);
|
|
1492
|
-
var returnFocusElementRef = React.useRef();
|
|
1497
|
+
var returnFocusElementRef = React.useRef(null);
|
|
1493
1498
|
function restoreFocusToReturnFocusElement() {
|
|
1494
1499
|
var _a;
|
|
1495
1500
|
var resolvedReturnFocusElement = resolveElement(returnFocusElement);
|
|
@@ -1539,7 +1544,7 @@ var Dialog = React.forwardRef(function (_a, ref) {
|
|
|
1539
1544
|
var dialogRef = useSharedRef(dialogRefProp || ref);
|
|
1540
1545
|
var _g = tslib.__read(nextId.useId(1, 'dialog-title-'), 1), headingId = _g[0];
|
|
1541
1546
|
var headingRef = React.useRef(null);
|
|
1542
|
-
var isolatorRef = React.useRef();
|
|
1547
|
+
var isolatorRef = React.useRef(null);
|
|
1543
1548
|
var headingLevel = typeof heading === 'object' && 'level' in heading && heading.level
|
|
1544
1549
|
? heading.level
|
|
1545
1550
|
: 2;
|
|
@@ -2134,7 +2139,7 @@ var looksLikeLink = function (props) {
|
|
|
2134
2139
|
};
|
|
2135
2140
|
var IconButton = React.forwardRef(function (_a, ref) {
|
|
2136
2141
|
var _b = _a.as, Component = _b === void 0 ? 'button' : _b, icon = _a.icon, label = _a.label, _c = _a.tooltipProps, tooltipPropsProp = _c === void 0 ? {} : _c, className = _a.className, _d = _a.variant, variant = _d === void 0 ? 'secondary' : _d, disabled = _a.disabled, _e = _a.tabIndex, tabIndex = _e === void 0 ? 0 : _e, large = _a.large, other = tslib.__rest(_a, ["as", "icon", "label", "tooltipProps", "className", "variant", "disabled", "tabIndex", "large"]);
|
|
2137
|
-
var internalRef = React.useRef();
|
|
2142
|
+
var internalRef = React.useRef(null);
|
|
2138
2143
|
React.useImperativeHandle(ref, function () { return internalRef.current; });
|
|
2139
2144
|
// Configure additional properties based on the type of the Component
|
|
2140
2145
|
// for accessibility
|
|
@@ -2209,7 +2214,7 @@ var typeMap = {
|
|
|
2209
2214
|
};
|
|
2210
2215
|
var tabIndexHandler = function (reset, toast) {
|
|
2211
2216
|
if (reset) {
|
|
2212
|
-
// restore tab
|
|
2217
|
+
// restore tab indices that we clobbered
|
|
2213
2218
|
return queryAll('[data-cached-tabindex]').forEach(function (el) {
|
|
2214
2219
|
el.tabIndex = Number(el.getAttribute('data-cached-tabindex'));
|
|
2215
2220
|
});
|
|
@@ -2696,7 +2701,7 @@ Checkbox.displayName = 'Checkbox';
|
|
|
2696
2701
|
*/
|
|
2697
2702
|
function TooltipTabstop(_a) {
|
|
2698
2703
|
var children = _a.children, className = _a.className, tooltip = _a.tooltip, variant = _a.variant, association = _a.association, show = _a.show, placement = _a.placement, portal = _a.portal, hideElementOnHidden = _a.hideElementOnHidden, buttonProps = tslib.__rest(_a, ["children", "className", "tooltip", "variant", "association", "show", "placement", "portal", "hideElementOnHidden"]);
|
|
2699
|
-
var buttonRef = React.useRef();
|
|
2704
|
+
var buttonRef = React.useRef(null);
|
|
2700
2705
|
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
2701
2706
|
React__default["default"].createElement("button", tslib.__assign({ type: "button", ref: buttonRef, "aria-disabled": "true", className: classNames__default["default"]('TooltipTabstop', className) }, buttonProps), children),
|
|
2702
2707
|
React__default["default"].createElement(Tooltip, { target: buttonRef, variant: variant, association: association, show: show, placement: placement, portal: portal, hideElementOnHidden: hideElementOnHidden }, tooltip)));
|
|
@@ -3540,7 +3545,7 @@ var TwoColumnPanel = React.forwardRef(function (_a, ref) {
|
|
|
3540
3545
|
var closeButtonRef = React.useRef(null);
|
|
3541
3546
|
var columnLeftRef = React.useRef(null);
|
|
3542
3547
|
var columnRightRef = React.useRef(null);
|
|
3543
|
-
var columnLeft = React__default["default"].Children.toArray(children).find(function (child) { return child.type === ColumnLeft; });
|
|
3548
|
+
var columnLeft = React__default["default"].Children.toArray(children).find(function (child) { return React__default["default"].isValidElement(child) && child.type === ColumnLeft; });
|
|
3544
3549
|
var togglePanel = function () {
|
|
3545
3550
|
var prefersReducedMotion = 'matchMedia' in window &&
|
|
3546
3551
|
typeof matchMedia === 'function' &&
|
|
@@ -3573,16 +3578,17 @@ var TwoColumnPanel = React.forwardRef(function (_a, ref) {
|
|
|
3573
3578
|
var ColumnLeftComponent;
|
|
3574
3579
|
var columnLeftId;
|
|
3575
3580
|
if (React.isValidElement(columnLeft)) {
|
|
3576
|
-
var
|
|
3581
|
+
var columnLeftProps = columnLeft.props;
|
|
3582
|
+
var ref_1 = columnLeftProps.ref || columnLeftRef;
|
|
3577
3583
|
var id = (columnLeftId =
|
|
3578
|
-
|
|
3584
|
+
columnLeftProps.id || nextId.useId(undefined, 'sidebar-')[0]);
|
|
3579
3585
|
var CloseButton = (React__default["default"].createElement("div", { className: "TwoColumnPanel__Close" },
|
|
3580
3586
|
React__default["default"].createElement("button", { type: "button", onClick: togglePanel, ref: closeButtonRef, "aria-label": hideCollapsedPanelLabel },
|
|
3581
3587
|
React__default["default"].createElement(Icon, { type: "close" })),
|
|
3582
3588
|
React__default["default"].createElement(Tooltip, { target: closeButtonRef, association: "aria-labelledby", hideElementOnHidden: true }, hideCollapsedPanelLabel)));
|
|
3583
3589
|
var children_1 = tslib.__spreadArray([
|
|
3584
3590
|
CloseButton
|
|
3585
|
-
], tslib.__read(React__default["default"].Children.toArray(
|
|
3591
|
+
], tslib.__read(React__default["default"].Children.toArray(columnLeftProps.children)), false);
|
|
3586
3592
|
ColumnLeftComponent = React.cloneElement(columnLeft, { id: id, ref: ref_1, tabIndex: -1 }, children_1.map(function (child, index) {
|
|
3587
3593
|
return React.cloneElement(child, {
|
|
3588
3594
|
key: child.key
|
|
@@ -3591,17 +3597,18 @@ var TwoColumnPanel = React.forwardRef(function (_a, ref) {
|
|
|
3591
3597
|
});
|
|
3592
3598
|
}));
|
|
3593
3599
|
}
|
|
3594
|
-
var columnRight = React__default["default"].Children.toArray(children).find(function (child) { return child.type === ColumnRight; });
|
|
3600
|
+
var columnRight = React__default["default"].Children.toArray(children).find(function (child) { return React__default["default"].isValidElement(child) && child.type === ColumnRight; });
|
|
3595
3601
|
var ColumnRightComponent;
|
|
3596
3602
|
if (React.isValidElement(columnRight)) {
|
|
3597
|
-
var
|
|
3603
|
+
var columnRightProps = columnRight.props;
|
|
3604
|
+
var ref_2 = columnRightProps.ref || columnRightRef;
|
|
3598
3605
|
var ToggleButton = (React__default["default"].createElement("div", { className: "TwoColumnPanel__ButtonToggle" },
|
|
3599
3606
|
React__default["default"].createElement("button", { type: "button", onClick: togglePanel, ref: toggleButtonRef, "aria-label": !isCollapsed ? hideCollapsedPanelLabel : showCollapsedPanelLabel, "aria-expanded": !isCollapsed, "aria-controls": columnLeftId },
|
|
3600
3607
|
React__default["default"].createElement(Icon, { type: !isCollapsed ? 'chevron-double-left' : 'chevron-double-right' })),
|
|
3601
3608
|
React__default["default"].createElement(Tooltip, { target: toggleButtonRef, association: "aria-labelledby", hideElementOnHidden: true }, !isCollapsed ? hideCollapsedPanelLabel : showCollapsedPanelLabel)));
|
|
3602
3609
|
var children_2 = tslib.__spreadArray([
|
|
3603
3610
|
ToggleButton
|
|
3604
|
-
], tslib.__read(React__default["default"].Children.toArray(
|
|
3611
|
+
], tslib.__read(React__default["default"].Children.toArray(columnRightProps.children)), false);
|
|
3605
3612
|
ColumnRightComponent = React.cloneElement(columnRight, { ref: ref_2, tabIndex: -1 }, children_2.map(function (child, index) {
|
|
3606
3613
|
return React.cloneElement(child, {
|
|
3607
3614
|
key: child.key
|
|
@@ -3623,7 +3630,7 @@ var TwoColumnPanel = React.forwardRef(function (_a, ref) {
|
|
|
3623
3630
|
(_a = columnLeftRef.current) === null || _a === void 0 ? void 0 : _a.removeEventListener('transitionend', handleTransitionEnd);
|
|
3624
3631
|
};
|
|
3625
3632
|
}, [columnLeftRef.current, isCollapsed]);
|
|
3626
|
-
// When the
|
|
3633
|
+
// When the collapsible panel starts to overlay content, it needs to become a focus trap and collapsed by default
|
|
3627
3634
|
React.useLayoutEffect(function () {
|
|
3628
3635
|
var mediaQueryList = matchMedia(collapsedMediaQuery);
|
|
3629
3636
|
var handleMatch = function (matches) {
|
|
@@ -3787,7 +3794,8 @@ var Listbox = React.forwardRef(function (_a, ref) {
|
|
|
3787
3794
|
}
|
|
3788
3795
|
}, [activeOption]);
|
|
3789
3796
|
React.useEffect(function () {
|
|
3790
|
-
if (isActiveControlled &&
|
|
3797
|
+
if (isActiveControlled &&
|
|
3798
|
+
(controlledActiveOption === null || controlledActiveOption === void 0 ? void 0 : controlledActiveOption.element) !== (activeOption === null || activeOption === void 0 ? void 0 : activeOption.element)) {
|
|
3791
3799
|
setActiveOption(controlledActiveOption || null);
|
|
3792
3800
|
}
|
|
3793
3801
|
}, [isActiveControlled, controlledActiveOption]);
|
|
@@ -3933,11 +3941,11 @@ function isElementPreceding(a, b) {
|
|
|
3933
3941
|
}
|
|
3934
3942
|
var ListboxOption = React.forwardRef(function (_a, ref) {
|
|
3935
3943
|
var _b;
|
|
3936
|
-
var _c;
|
|
3937
|
-
var propId = _a.id, className = _a.className,
|
|
3938
|
-
var
|
|
3944
|
+
var _c, _d;
|
|
3945
|
+
var propId = _a.id, className = _a.className, _e = _a.as, Component = _e === void 0 ? 'li' : _e, children = _a.children, value = _a.value, disabled = _a.disabled, selectedProp = _a.selected, _f = _a.activeClass, activeClass = _f === void 0 ? 'ListboxOption--active' : _f, onClick = _a.onClick, props = tslib.__rest(_a, ["id", "className", "as", "children", "value", "disabled", "selected", "activeClass", "onClick"]);
|
|
3946
|
+
var _g = useListboxContext(), active = _g.active, selected = _g.selected, setOptions = _g.setOptions, onSelect = _g.onSelect;
|
|
3939
3947
|
var listboxOptionRef = useSharedRef(ref);
|
|
3940
|
-
var
|
|
3948
|
+
var _h = tslib.__read(propId ? [propId] : nextId.useId(1, 'listbox-option'), 1), id = _h[0];
|
|
3941
3949
|
var isActive = (active === null || active === void 0 ? void 0 : active.element) === listboxOptionRef.current;
|
|
3942
3950
|
var isSelected = typeof selectedProp === 'boolean'
|
|
3943
3951
|
? selectedProp
|
|
@@ -3945,15 +3953,15 @@ var ListboxOption = React.forwardRef(function (_a, ref) {
|
|
|
3945
3953
|
!!selected.find(function (option) { return option.element === listboxOptionRef.current; });
|
|
3946
3954
|
var optionValue = typeof value !== 'undefined'
|
|
3947
3955
|
? value
|
|
3948
|
-
: (_c = listboxOptionRef.current) === null || _c === void 0 ? void 0 : _c.
|
|
3956
|
+
: ((_d = (_c = listboxOptionRef.current) === null || _c === void 0 ? void 0 : _c.textContent) !== null && _d !== void 0 ? _d : undefined);
|
|
3949
3957
|
React.useEffect(function () {
|
|
3950
3958
|
var element = listboxOptionRef.current;
|
|
3951
3959
|
setOptions(function (options) {
|
|
3952
3960
|
var e_1, _a;
|
|
3953
|
-
var option = { element: element, value: optionValue };
|
|
3954
3961
|
// istanbul ignore next
|
|
3955
3962
|
if (!element)
|
|
3956
3963
|
return options;
|
|
3964
|
+
var option = { element: element, value: optionValue };
|
|
3957
3965
|
// Elements are frequently appended, so check to see if the newly rendered
|
|
3958
3966
|
// element follows the last element first before any other checks
|
|
3959
3967
|
if (!options.length ||
|
|
@@ -4140,7 +4148,7 @@ var ComboboxOption = React.forwardRef(function (_a, ref) {
|
|
|
4140
4148
|
// istanbul ignore next
|
|
4141
4149
|
React.useLayoutEffect(function () {
|
|
4142
4150
|
var intersectionEntry = intersectionRef.current;
|
|
4143
|
-
if (!intersectionEntry || !isActive) {
|
|
4151
|
+
if (!intersectionEntry || !isActive || !comboboxOptionRef.current) {
|
|
4144
4152
|
return;
|
|
4145
4153
|
}
|
|
4146
4154
|
var rect = comboboxOptionRef.current.getBoundingClientRect();
|
|
@@ -4156,10 +4164,10 @@ var ComboboxOption = React.forwardRef(function (_a, ref) {
|
|
|
4156
4164
|
}
|
|
4157
4165
|
}, [isActive]);
|
|
4158
4166
|
React.useEffect(function () {
|
|
4159
|
-
var _a;
|
|
4167
|
+
var _a, _b;
|
|
4160
4168
|
var comboboxValue = typeof propValue !== 'undefined'
|
|
4161
4169
|
? propValue
|
|
4162
|
-
: (_a = comboboxOptionRef.current) === null || _a === void 0 ? void 0 : _a.
|
|
4170
|
+
: ((_b = (_a = comboboxOptionRef.current) === null || _a === void 0 ? void 0 : _a.textContent) !== null && _b !== void 0 ? _b : undefined);
|
|
4163
4171
|
var value = typeof formValue === 'undefined' ? comboboxValue : formValue;
|
|
4164
4172
|
setFormValues(function (prev) {
|
|
4165
4173
|
var formValues = prev.filter(function (fv) { return fv !== value; });
|
|
@@ -4178,12 +4186,14 @@ var ComboboxOption = React.forwardRef(function (_a, ref) {
|
|
|
4178
4186
|
});
|
|
4179
4187
|
}, [selectedValues, formValue]);
|
|
4180
4188
|
React.useEffect(function () {
|
|
4181
|
-
var _a;
|
|
4189
|
+
var _a, _b;
|
|
4182
4190
|
if (isMatching) {
|
|
4183
4191
|
var comboboxValue_1 = typeof propValue !== 'undefined'
|
|
4184
4192
|
? propValue
|
|
4185
|
-
: (_a = comboboxOptionRef.current) === null || _a === void 0 ? void 0 : _a.
|
|
4193
|
+
: ((_b = (_a = comboboxOptionRef.current) === null || _a === void 0 ? void 0 : _a.textContent) !== null && _b !== void 0 ? _b : undefined);
|
|
4186
4194
|
setMatchingOptions(function (options) {
|
|
4195
|
+
if (!comboboxOptionRef.current)
|
|
4196
|
+
return options;
|
|
4187
4197
|
return new Map(options.set(comboboxOptionRef.current, {
|
|
4188
4198
|
value: comboboxValue_1,
|
|
4189
4199
|
displayValue: children,
|
|
@@ -4513,6 +4523,7 @@ var Combobox = React.forwardRef(function (_a, ref) {
|
|
|
4513
4523
|
});
|
|
4514
4524
|
}, [disabled, selectedValues, onSelectionChange]);
|
|
4515
4525
|
var handlePillKeyDown = React.useCallback(function (event) {
|
|
4526
|
+
var _a, _b;
|
|
4516
4527
|
if (!PillKeys.includes(event.key)) {
|
|
4517
4528
|
return;
|
|
4518
4529
|
}
|
|
@@ -4530,7 +4541,7 @@ var Combobox = React.forwardRef(function (_a, ref) {
|
|
|
4530
4541
|
handleRemovePill(pillsRef.current[focusedIndex], selectedValues[focusedIndex]);
|
|
4531
4542
|
var nextIndex = focusedIndex + 1;
|
|
4532
4543
|
if (nextIndex == pillsLength) {
|
|
4533
|
-
inputRef.current.focus();
|
|
4544
|
+
(_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
4534
4545
|
}
|
|
4535
4546
|
else {
|
|
4536
4547
|
pillsRef.current[nextIndex].focus();
|
|
@@ -4539,7 +4550,7 @@ var Combobox = React.forwardRef(function (_a, ref) {
|
|
|
4539
4550
|
else if (isArrowLeft || isArrowRight) {
|
|
4540
4551
|
var nextIndex = Math.max(focusedIndex + (isArrowLeft ? -1 : 1), 0);
|
|
4541
4552
|
if (isArrowRight && nextIndex === pillsLength) {
|
|
4542
|
-
inputRef.current.focus();
|
|
4553
|
+
(_b = inputRef.current) === null || _b === void 0 ? void 0 : _b.focus();
|
|
4543
4554
|
}
|
|
4544
4555
|
else {
|
|
4545
4556
|
pillsRef.current[nextIndex].focus();
|
|
@@ -4827,10 +4838,12 @@ var TextEllipsis = React__default["default"].forwardRef(function (_a, ref) {
|
|
|
4827
4838
|
: overflowElement.clientWidth < overflowElement.scrollWidth);
|
|
4828
4839
|
});
|
|
4829
4840
|
};
|
|
4841
|
+
if (!sharedRef.current)
|
|
4842
|
+
return;
|
|
4830
4843
|
var observer = new ResizeObserver(listener);
|
|
4831
4844
|
observer.observe(sharedRef.current);
|
|
4832
4845
|
return function () {
|
|
4833
|
-
observer
|
|
4846
|
+
observer.disconnect();
|
|
4834
4847
|
};
|
|
4835
4848
|
}, []);
|
|
4836
4849
|
React.useEffect(function () {
|
|
@@ -4875,7 +4888,7 @@ var Drawer = React.forwardRef(function (_a, ref) {
|
|
|
4875
4888
|
openRef.current = open;
|
|
4876
4889
|
}, [open, setIsTransitioning]);
|
|
4877
4890
|
React.useEffect(function () {
|
|
4878
|
-
if (!isModal) {
|
|
4891
|
+
if (!isModal || !drawerRef.current) {
|
|
4879
4892
|
return;
|
|
4880
4893
|
}
|
|
4881
4894
|
var isolator = new AriaIsolate(drawerRef.current);
|
|
@@ -5056,7 +5069,7 @@ function getActiveElement(root) {
|
|
|
5056
5069
|
*/
|
|
5057
5070
|
function useMnemonics(_a) {
|
|
5058
5071
|
var elementOrRef = _a.elementOrRef, matchingElementsSelector = _a.matchingElementsSelector, onMatch = _a.onMatch, _b = _a.enabled, enabled = _b === void 0 ? true : _b;
|
|
5059
|
-
var containerRef = React.useRef();
|
|
5072
|
+
var containerRef = React.useRef(null);
|
|
5060
5073
|
React.useEffect(function () {
|
|
5061
5074
|
if (elementOrRef instanceof HTMLElement) {
|
|
5062
5075
|
containerRef.current = elementOrRef;
|
|
@@ -5066,7 +5079,8 @@ function useMnemonics(_a) {
|
|
|
5066
5079
|
}
|
|
5067
5080
|
}, [elementOrRef]);
|
|
5068
5081
|
React.useEffect(function () {
|
|
5069
|
-
|
|
5082
|
+
var listenerTarget = containerRef.current;
|
|
5083
|
+
if (!enabled || !listenerTarget) {
|
|
5070
5084
|
return;
|
|
5071
5085
|
}
|
|
5072
5086
|
var keyboardHandler = function (event) {
|
|
@@ -5079,14 +5093,14 @@ function useMnemonics(_a) {
|
|
|
5079
5093
|
if (event.key.length !== 1 || !/[a-z\d]/i.test(event.key)) {
|
|
5080
5094
|
return;
|
|
5081
5095
|
}
|
|
5082
|
-
var
|
|
5083
|
-
if (!
|
|
5096
|
+
var currentContainer = containerRef.current;
|
|
5097
|
+
if (!currentContainer) {
|
|
5084
5098
|
return;
|
|
5085
5099
|
}
|
|
5086
5100
|
// Prevent default behavior and stop propagation for mnemonic keys
|
|
5087
5101
|
event.preventDefault();
|
|
5088
5102
|
event.stopPropagation();
|
|
5089
|
-
var elements = Array.from(
|
|
5103
|
+
var elements = Array.from(currentContainer.querySelectorAll(matchingElementsSelector !== null && matchingElementsSelector !== void 0 ? matchingElementsSelector : focusable__default["default"]));
|
|
5090
5104
|
var matchingElements = elements.filter(function (element) {
|
|
5091
5105
|
return getAccessibleLabel(element).toLowerCase()[0] ===
|
|
5092
5106
|
event.key.toLowerCase();
|
|
@@ -5094,7 +5108,7 @@ function useMnemonics(_a) {
|
|
|
5094
5108
|
if (!matchingElements.length) {
|
|
5095
5109
|
return;
|
|
5096
5110
|
}
|
|
5097
|
-
var currentActiveElement = getActiveElement(
|
|
5111
|
+
var currentActiveElement = getActiveElement(currentContainer);
|
|
5098
5112
|
var nextActiveElement = null;
|
|
5099
5113
|
if (currentActiveElement) {
|
|
5100
5114
|
nextActiveElement = matchingElements.find(function (element) {
|
|
@@ -5108,16 +5122,15 @@ function useMnemonics(_a) {
|
|
|
5108
5122
|
onMatch(nextActiveElement !== null && nextActiveElement !== void 0 ? nextActiveElement : matchingElements[0]);
|
|
5109
5123
|
}
|
|
5110
5124
|
};
|
|
5111
|
-
|
|
5112
|
-
|
|
5113
|
-
return function () { return container.removeEventListener('keydown', keyboardHandler); };
|
|
5125
|
+
listenerTarget.addEventListener('keydown', keyboardHandler);
|
|
5126
|
+
return function () { return listenerTarget.removeEventListener('keydown', keyboardHandler); };
|
|
5114
5127
|
}, [enabled, containerRef, matchingElementsSelector, onMatch]);
|
|
5115
5128
|
return containerRef;
|
|
5116
5129
|
}
|
|
5117
5130
|
|
|
5118
5131
|
var ActionList = React.forwardRef(function (_a, ref) {
|
|
5119
5132
|
var _b = _a.selectionType, selectionType = _b === void 0 ? null : _b, onAction = _a.onAction, className = _a.className, children = _a.children, props = tslib.__rest(_a, ["selectionType", "onAction", "className", "children"]);
|
|
5120
|
-
var activeElement = React.useRef();
|
|
5133
|
+
var activeElement = React.useRef(null);
|
|
5121
5134
|
var _c = tslib.__read(React.useState(), 2), activeOption = _c[0], setActiveOption = _c[1];
|
|
5122
5135
|
var handleActiveChange = React.useCallback(function (value) {
|
|
5123
5136
|
activeElement.current = value === null || value === void 0 ? void 0 : value.element;
|
|
@@ -5128,12 +5141,13 @@ var ActionList = React.forwardRef(function (_a, ref) {
|
|
|
5128
5141
|
onAction(key, event);
|
|
5129
5142
|
}
|
|
5130
5143
|
}, [onAction]);
|
|
5144
|
+
var handleMnemonicMatch = React.useCallback(function (element) {
|
|
5145
|
+
setActiveOption(function (prev) {
|
|
5146
|
+
return (prev === null || prev === void 0 ? void 0 : prev.element) === element ? prev : { element: element };
|
|
5147
|
+
});
|
|
5148
|
+
}, []);
|
|
5131
5149
|
var containerRef = useMnemonics({
|
|
5132
|
-
onMatch:
|
|
5133
|
-
setActiveOption({
|
|
5134
|
-
element: element
|
|
5135
|
-
});
|
|
5136
|
-
},
|
|
5150
|
+
onMatch: handleMnemonicMatch,
|
|
5137
5151
|
matchingElementsSelector: props.role === 'menu'
|
|
5138
5152
|
? '[role=menuitem],[role=menuitemcheckbox],[role=menuitemradio]'
|
|
5139
5153
|
: '[role=option]'
|
|
@@ -5165,7 +5179,7 @@ var ActionListItem = React.forwardRef(function (_a, ref) {
|
|
|
5165
5179
|
});
|
|
5166
5180
|
var isActive = !!(active === null || active === void 0 ? void 0 : active.element) && active.element === actionListItemRef.current;
|
|
5167
5181
|
var handleAction = React.useCallback(function (event) {
|
|
5168
|
-
var _a;
|
|
5182
|
+
var _a, _b;
|
|
5169
5183
|
if (event.defaultPrevented) {
|
|
5170
5184
|
return;
|
|
5171
5185
|
}
|
|
@@ -5178,7 +5192,7 @@ var ActionListItem = React.forwardRef(function (_a, ref) {
|
|
|
5178
5192
|
}
|
|
5179
5193
|
// istanbul ignore else
|
|
5180
5194
|
if (typeof onActionListAction === 'function') {
|
|
5181
|
-
onActionListAction(actionKey || ((_a = labelRef === null ||
|
|
5195
|
+
onActionListAction(actionKey || ((_b = (_a = labelRef.current) === null || _a === void 0 ? void 0 : _a.textContent) === null || _b === void 0 ? void 0 : _b.trim()) || '', event);
|
|
5182
5196
|
}
|
|
5183
5197
|
}, [onAction, onActionListAction, selectionType, actionKey]);
|
|
5184
5198
|
var listItemRole = undefined;
|
|
@@ -5202,7 +5216,7 @@ var ActionListItem = React.forwardRef(function (_a, ref) {
|
|
|
5202
5216
|
// istanbul ignore next
|
|
5203
5217
|
React.useLayoutEffect(function () {
|
|
5204
5218
|
var intersectionEntry = intersectionRef.current;
|
|
5205
|
-
if (!intersectionEntry || !isActive) {
|
|
5219
|
+
if (!intersectionEntry || !isActive || !actionListItemRef.current) {
|
|
5206
5220
|
return;
|
|
5207
5221
|
}
|
|
5208
5222
|
var rect = actionListItemRef.current.getBoundingClientRect();
|
|
@@ -5301,9 +5315,10 @@ var ActionMenu = React.forwardRef(function (_a, ref) {
|
|
|
5301
5315
|
var _e = tslib.__read(React.useState('first'), 2), focusStrategy = _e[0], setFocusStrategy = _e[1];
|
|
5302
5316
|
var triggerRef = React.useRef(null);
|
|
5303
5317
|
var actionMenuRef = useSharedRef(ref);
|
|
5304
|
-
var
|
|
5305
|
-
var
|
|
5306
|
-
var _g = tslib.__read(nextId.useId(1, 'menu'), 1),
|
|
5318
|
+
var _f = actionMenuList.props, actionListRef = _f.ref, actionListOnAction = _f.onAction;
|
|
5319
|
+
var actionMenuListRef = useSharedRef(actionListRef !== null && actionListRef !== void 0 ? actionListRef : null);
|
|
5320
|
+
var _g = tslib.__read(nextId.useId(1, 'menu-trigger'), 1), triggerId = _g[0];
|
|
5321
|
+
var _h = tslib.__read(nextId.useId(1, 'menu'), 1), menuId = _h[0];
|
|
5307
5322
|
var handleTriggerClick = React.useCallback(function (event) {
|
|
5308
5323
|
// istanbul ignore else
|
|
5309
5324
|
if (!event.defaultPrevented) {
|
|
@@ -5350,11 +5365,10 @@ var ActionMenu = React.forwardRef(function (_a, ref) {
|
|
|
5350
5365
|
if (!event.defaultPrevented) {
|
|
5351
5366
|
setOpen(false);
|
|
5352
5367
|
}
|
|
5353
|
-
|
|
5354
|
-
|
|
5355
|
-
onAction(key, event);
|
|
5368
|
+
if (typeof actionListOnAction === 'function') {
|
|
5369
|
+
actionListOnAction(key, event);
|
|
5356
5370
|
}
|
|
5357
|
-
}, [
|
|
5371
|
+
}, [actionListOnAction]);
|
|
5358
5372
|
React.useEffect(function () {
|
|
5359
5373
|
var _a, _b;
|
|
5360
5374
|
if (open) {
|
|
@@ -5420,49 +5434,181 @@ var TreeViewItem = function (_a) {
|
|
|
5420
5434
|
var checkboxId = React.useMemo(function () { return nextId__default["default"]('tree-view-item-'); }, []);
|
|
5421
5435
|
return (React__default["default"].createElement(reactAriaComponents.TreeItem, { id: id, textValue: textValue, className: "TreeView__item" },
|
|
5422
5436
|
React__default["default"].createElement(reactAriaComponents.TreeItemContent, null, function (_a) {
|
|
5423
|
-
var selectionMode = _a.selectionMode, isSelected = _a.isSelected;
|
|
5437
|
+
var selectionMode = _a.selectionMode, isSelected = _a.isSelected, isDisabled = _a.isDisabled;
|
|
5424
5438
|
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
5425
5439
|
React__default["default"].createElement(reactAriaComponents.Button, { slot: "chevron", className: "TreeView__chevron" },
|
|
5426
5440
|
React__default["default"].createElement(Icon, { type: "chevron-right" })),
|
|
5427
|
-
selectionMode !== 'none' ? (React__default["default"].createElement(Checkbox, { id: checkboxId, label: textValue, checked: isSelected, controlled: true, tabIndex: -1 })) : (React__default["default"].createElement(React__default["default"].Fragment, null, textValue))));
|
|
5441
|
+
selectionMode !== 'none' ? (React__default["default"].createElement(Checkbox, { id: checkboxId, label: textValue, checked: isSelected, disabled: isDisabled, controlled: true, tabIndex: -1 })) : (React__default["default"].createElement(React__default["default"].Fragment, null, textValue))));
|
|
5428
5442
|
}),
|
|
5429
5443
|
children && children.length > 0 && (React__default["default"].createElement(reactAriaComponents.Collection, null, children.map(function (child) { return (React__default["default"].createElement(TreeViewItem, tslib.__assign({ key: child.id }, child))); })))));
|
|
5430
5444
|
};
|
|
5431
5445
|
TreeViewItem.displayName = 'TreeViewItem';
|
|
5432
5446
|
|
|
5447
|
+
/** Every node id in the tree, flattened depth-first. */
|
|
5433
5448
|
function collectAllKeys(nodes) {
|
|
5434
5449
|
return nodes.flatMap(function (node) { return tslib.__spreadArray([
|
|
5435
5450
|
node.id
|
|
5436
5451
|
], tslib.__read((node.children ? collectAllKeys(node.children) : [])), false); });
|
|
5437
5452
|
}
|
|
5438
|
-
|
|
5439
|
-
|
|
5440
|
-
|
|
5441
|
-
|
|
5442
|
-
|
|
5443
|
-
|
|
5444
|
-
|
|
5445
|
-
|
|
5446
|
-
|
|
5453
|
+
/** Normalize react-aria's `Selection` ("all" | Set) into a concrete Set of keys. */
|
|
5454
|
+
function toKeySet(selection, nodes) {
|
|
5455
|
+
if (selection !== 'all') {
|
|
5456
|
+
return new Set(selection);
|
|
5457
|
+
}
|
|
5458
|
+
// "Select all" only includes selectable (non-disabled) nodes.
|
|
5459
|
+
var disabled = new Set(collectDisabledKeys(nodes));
|
|
5460
|
+
return new Set(collectAllKeys(nodes).filter(function (key) { return !disabled.has(key); }));
|
|
5461
|
+
}
|
|
5462
|
+
/** Locate a node anywhere in the tree by its id. */
|
|
5463
|
+
function findNode(nodes, key) {
|
|
5464
|
+
var e_1, _a;
|
|
5465
|
+
try {
|
|
5466
|
+
for (var nodes_1 = tslib.__values(nodes), nodes_1_1 = nodes_1.next(); !nodes_1_1.done; nodes_1_1 = nodes_1.next()) {
|
|
5467
|
+
var node = nodes_1_1.value;
|
|
5468
|
+
if (node.id === key) {
|
|
5469
|
+
return node;
|
|
5447
5470
|
}
|
|
5448
|
-
|
|
5449
|
-
|
|
5450
|
-
|
|
5471
|
+
if (node.children) {
|
|
5472
|
+
var found = findNode(node.children, key);
|
|
5473
|
+
if (found) {
|
|
5474
|
+
return found;
|
|
5451
5475
|
}
|
|
5452
|
-
next.add(key);
|
|
5453
5476
|
}
|
|
5454
|
-
|
|
5477
|
+
}
|
|
5478
|
+
}
|
|
5479
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
5480
|
+
finally {
|
|
5481
|
+
try {
|
|
5482
|
+
if (nodes_1_1 && !nodes_1_1.done && (_a = nodes_1.return)) _a.call(nodes_1);
|
|
5483
|
+
}
|
|
5484
|
+
finally { if (e_1) throw e_1.error; }
|
|
5485
|
+
}
|
|
5486
|
+
return undefined;
|
|
5487
|
+
}
|
|
5488
|
+
/** All descendant ids of a node (not including the node itself). */
|
|
5489
|
+
function collectDescendantKeys(node) {
|
|
5490
|
+
if (!node.children) {
|
|
5491
|
+
return [];
|
|
5492
|
+
}
|
|
5493
|
+
return node.children.flatMap(function (child) { return tslib.__spreadArray([
|
|
5494
|
+
child.id
|
|
5495
|
+
], tslib.__read(collectDescendantKeys(child)), false); });
|
|
5496
|
+
}
|
|
5497
|
+
/** Ids of all disabled nodes (rendered disabled / non-selectable). */
|
|
5498
|
+
function collectDisabledKeys(nodes) {
|
|
5499
|
+
return nodes.flatMap(function (node) { return tslib.__spreadArray(tslib.__spreadArray([], tslib.__read((node.disabled ? [node.id] : [])), false), tslib.__read((node.children ? collectDisabledKeys(node.children) : [])), false); });
|
|
5500
|
+
}
|
|
5501
|
+
/**
|
|
5502
|
+
* Toggle a single node, applying cascade per the options (multiple mode only):
|
|
5503
|
+
* - selecting + `cascadeSelect`: also selects all (non-disabled) descendants.
|
|
5504
|
+
* - deselecting + `cascadeDeselect`: also deselects all descendants.
|
|
5505
|
+
*
|
|
5506
|
+
* In `single` mode only the clicked node is selected (clicking it again clears
|
|
5507
|
+
* it); cascade does not apply.
|
|
5508
|
+
*/
|
|
5509
|
+
function toggleSelection(nodes, previous, key, selectionMode, _a) {
|
|
5510
|
+
var cascadeSelect = _a.cascadeSelect, cascadeDeselect = _a.cascadeDeselect;
|
|
5511
|
+
if (selectionMode === 'single') {
|
|
5512
|
+
var result_1 = new Set();
|
|
5513
|
+
if (!previous.has(key)) {
|
|
5514
|
+
result_1.add(key);
|
|
5515
|
+
}
|
|
5516
|
+
return result_1;
|
|
5517
|
+
}
|
|
5518
|
+
var result = new Set(previous);
|
|
5519
|
+
var node = findNode(nodes, key);
|
|
5520
|
+
var descendants = node ? collectDescendantKeys(node) : [];
|
|
5521
|
+
var disabled = new Set(collectDisabledKeys(nodes));
|
|
5522
|
+
if (!previous.has(key)) {
|
|
5523
|
+
result.add(key);
|
|
5524
|
+
if (cascadeSelect) {
|
|
5525
|
+
descendants.forEach(function (k) {
|
|
5526
|
+
if (!disabled.has(k)) {
|
|
5527
|
+
result.add(k);
|
|
5528
|
+
}
|
|
5529
|
+
});
|
|
5530
|
+
}
|
|
5531
|
+
}
|
|
5532
|
+
else {
|
|
5533
|
+
result.delete(key);
|
|
5534
|
+
if (cascadeDeselect) {
|
|
5535
|
+
descendants.forEach(function (k) { return result.delete(k); });
|
|
5536
|
+
}
|
|
5537
|
+
}
|
|
5538
|
+
return result;
|
|
5539
|
+
}
|
|
5540
|
+
/**
|
|
5541
|
+
* Apply react-aria's proposed selection while enforcing cascade. Each key
|
|
5542
|
+
* react-aria added cascades to its descendants when `cascadeSelect` is set; each
|
|
5543
|
+
* key it removed cascades when `cascadeDeselect` is set. In non-multiple modes
|
|
5544
|
+
* (or with both toggles off) the proposed selection is used as-is.
|
|
5545
|
+
*/
|
|
5546
|
+
function applyCascade(nodes, previous, next, selectionMode, _a) {
|
|
5547
|
+
var cascadeSelect = _a.cascadeSelect, cascadeDeselect = _a.cascadeDeselect;
|
|
5548
|
+
if (selectionMode !== 'multiple' || (!cascadeSelect && !cascadeDeselect)) {
|
|
5549
|
+
return next;
|
|
5550
|
+
}
|
|
5551
|
+
var result = new Set(previous);
|
|
5552
|
+
var added = tslib.__spreadArray([], tslib.__read(next), false).filter(function (key) { return !previous.has(key); });
|
|
5553
|
+
var removed = tslib.__spreadArray([], tslib.__read(previous), false).filter(function (key) { return !next.has(key); });
|
|
5554
|
+
var disabled = new Set(collectDisabledKeys(nodes));
|
|
5555
|
+
added.forEach(function (key) {
|
|
5556
|
+
result.add(key);
|
|
5557
|
+
if (cascadeSelect) {
|
|
5558
|
+
var node = findNode(nodes, key);
|
|
5559
|
+
(node ? collectDescendantKeys(node) : []).forEach(function (k) {
|
|
5560
|
+
if (!disabled.has(k)) {
|
|
5561
|
+
result.add(k);
|
|
5562
|
+
}
|
|
5563
|
+
});
|
|
5564
|
+
}
|
|
5565
|
+
});
|
|
5566
|
+
removed.forEach(function (key) {
|
|
5567
|
+
result.delete(key);
|
|
5568
|
+
if (cascadeDeselect) {
|
|
5569
|
+
var node = findNode(nodes, key);
|
|
5570
|
+
(node ? collectDescendantKeys(node) : []).forEach(function (k) {
|
|
5571
|
+
return result.delete(k);
|
|
5572
|
+
});
|
|
5573
|
+
}
|
|
5574
|
+
});
|
|
5575
|
+
return result;
|
|
5576
|
+
}
|
|
5577
|
+
|
|
5578
|
+
var TreeView = React.forwardRef(function (_a, ref) {
|
|
5579
|
+
var items = _a.items, onAction = _a.onAction, _b = _a.selectionMode, selectionMode = _b === void 0 ? 'none' : _b, _c = _a.cascadeSelect, cascadeSelect = _c === void 0 ? false : _c, _d = _a.cascadeDeselect, cascadeDeselect = _d === void 0 ? false : _d, defaultExpandedKeys = _a.defaultExpandedKeys, className = _a.className, other = tslib.__rest(_a, ["items", "onAction", "selectionMode", "cascadeSelect", "cascadeDeselect", "defaultExpandedKeys", "className"]);
|
|
5580
|
+
var _e = tslib.__read(React.useState(new Set()), 2), selectedKeys = _e[0], setSelectedKeys = _e[1];
|
|
5581
|
+
var cascade = { cascadeSelect: cascadeSelect, cascadeDeselect: cascadeDeselect };
|
|
5582
|
+
// Cascade only applies to multiple selection.
|
|
5583
|
+
var isCascade = selectionMode === 'multiple' && (cascadeSelect || cascadeDeselect);
|
|
5584
|
+
// Selection driven by react-aria (row/checkbox press, keyboard). When
|
|
5585
|
+
// cascading, reconcile the proposed change; otherwise store react-aria's
|
|
5586
|
+
// selection as-is so the `'all'` sentinel (Ctrl+A) is preserved.
|
|
5587
|
+
var handleSelectionChange = function (selection) {
|
|
5588
|
+
setSelectedKeys(function (prev) {
|
|
5589
|
+
return isCascade
|
|
5590
|
+
? applyCascade(items, toKeySet(prev, items), toKeySet(selection, items), selectionMode, cascade)
|
|
5591
|
+
: selection;
|
|
5455
5592
|
});
|
|
5456
|
-
onAction === null || onAction === void 0 ? void 0 : onAction(key);
|
|
5457
5593
|
};
|
|
5458
|
-
|
|
5459
|
-
|
|
5460
|
-
|
|
5461
|
-
|
|
5462
|
-
|
|
5594
|
+
// When `onAction` is set, react-aria treats a row press as an action rather
|
|
5595
|
+
// than a selection, so we toggle selection here ourselves.
|
|
5596
|
+
var handleAction = function (key) {
|
|
5597
|
+
if (selectionMode !== 'none') {
|
|
5598
|
+
setSelectedKeys(function (prev) {
|
|
5599
|
+
return toggleSelection(items, toKeySet(prev, items), key, selectionMode, cascade);
|
|
5600
|
+
});
|
|
5463
5601
|
}
|
|
5602
|
+
onAction === null || onAction === void 0 ? void 0 : onAction(key);
|
|
5603
|
+
};
|
|
5604
|
+
// Disabled nodes are non-selectable; react-aria disables them via disabledKeys.
|
|
5605
|
+
var disabledKeys = React.useMemo(function () { return collectDisabledKeys(items); }, [items]);
|
|
5606
|
+
// Cascade requires controlling selection. Without it, preserve the original
|
|
5607
|
+
// behavior: selection is only controlled when an `onAction` handler is set.
|
|
5608
|
+
var selectionProps = selectionMode !== 'none' && (isCascade || onAction)
|
|
5609
|
+
? { selectedKeys: selectedKeys, onSelectionChange: handleSelectionChange }
|
|
5464
5610
|
: {};
|
|
5465
|
-
return (React__default["default"].createElement(reactAriaComponents.Tree, tslib.__assign({ ref: ref, className: classNames__default["default"]('TreeView', className), selectionMode: selectionMode, defaultExpandedKeys: defaultExpandedKeys },
|
|
5611
|
+
return (React__default["default"].createElement(reactAriaComponents.Tree, tslib.__assign({ ref: ref, className: classNames__default["default"]('TreeView', className), selectionMode: selectionMode, defaultExpandedKeys: defaultExpandedKeys }, (disabledKeys.length > 0 ? { disabledKeys: disabledKeys } : {}), (onAction ? { onAction: handleAction } : {}), selectionProps, other), items.map(function (item) { return (React__default["default"].createElement(TreeViewItem, tslib.__assign({ key: item.id }, item))); })));
|
|
5466
5612
|
});
|
|
5467
5613
|
TreeView.displayName = 'TreeView';
|
|
5468
5614
|
|