@deque/cauldron-react 7.0.0 → 7.1.0-canary.038917f6
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/ActionList/ActionList.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/Checkbox/index.d.ts +2 -0
- 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/Listbox/Listbox.d.ts +7 -2
- package/lib/components/MenuBar/index.d.ts +1 -0
- 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/Toast/index.d.ts +7 -27
- package/lib/components/Tooltip/index.d.ts +2 -2
- package/lib/components/TreeView/TreeViewItem.d.ts +7 -0
- package/lib/components/TreeView/helpers.d.ts +33 -0
- package/lib/components/TreeView/index.d.ts +19 -0
- package/lib/components/TreeView/types.d.ts +8 -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.d.ts +1 -0
- package/lib/index.js +413 -227
- 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.js +1 -1
- 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 +36 -29
package/lib/index.js
CHANGED
|
@@ -16,6 +16,7 @@ var js = require('react-syntax-highlighter/dist/cjs/languages/hljs/javascript');
|
|
|
16
16
|
var css = require('react-syntax-highlighter/dist/cjs/languages/hljs/css');
|
|
17
17
|
var xml = require('react-syntax-highlighter/dist/cjs/languages/hljs/xml');
|
|
18
18
|
var yaml = require('react-syntax-highlighter/dist/cjs/languages/hljs/yaml');
|
|
19
|
+
var reactAriaComponents = require('react-aria-components');
|
|
19
20
|
|
|
20
21
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
21
22
|
|
|
@@ -494,24 +495,25 @@ var Accordion = function (_a) {
|
|
|
494
495
|
var childrenArray = React__default["default"].Children.toArray(children);
|
|
495
496
|
var trigger = childrenArray.find(function (child) {
|
|
496
497
|
return typeof child === 'string' ||
|
|
497
|
-
child.type === AccordionTrigger;
|
|
498
|
+
(React__default["default"].isValidElement(child) && child.type === AccordionTrigger);
|
|
498
499
|
});
|
|
499
500
|
var panelElement = childrenArray.find(function (child) {
|
|
500
501
|
return typeof child === 'string' ||
|
|
501
|
-
child.type === AccordionContent;
|
|
502
|
+
(React__default["default"].isValidElement(child) && child.type === AccordionContent);
|
|
502
503
|
});
|
|
503
|
-
|
|
504
|
-
|
|
504
|
+
if (!React__default["default"].isValidElement(trigger) ||
|
|
505
|
+
!React__default["default"].isValidElement(panelElement)) {
|
|
505
506
|
console.warn('Must provide <AccordionTrigger /> and <AccordionContent /> element(s). You provided:', {
|
|
506
507
|
trigger: trigger,
|
|
507
508
|
panelElement: panelElement,
|
|
508
|
-
isValid:
|
|
509
|
+
isValid: false
|
|
509
510
|
});
|
|
510
511
|
return null;
|
|
511
512
|
}
|
|
513
|
+
var panelProps = panelElement.props;
|
|
512
514
|
return (React__default["default"].createElement("div", tslib.__assign({ className: "Accordion" }, props),
|
|
513
|
-
React__default["default"].createElement(ExpandCollapsePanel, tslib.__assign({ id:
|
|
514
|
-
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":
|
|
515
|
+
React__default["default"].createElement(ExpandCollapsePanel, tslib.__assign({ id: panelProps.id || "".concat(elementId, "-panel"), open: open, onToggle: onToggle, animationTiming: animationTiming }, panelProps),
|
|
516
|
+
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),
|
|
515
517
|
panelElement)));
|
|
516
518
|
};
|
|
517
519
|
Accordion.displayName = 'Accordion';
|
|
@@ -577,7 +579,9 @@ var Scrim = /** @class */ (function (_super) {
|
|
|
577
579
|
if (destroy) {
|
|
578
580
|
return null;
|
|
579
581
|
}
|
|
580
|
-
return (React__default["default"].createElement("div", { ref: function (el) {
|
|
582
|
+
return (React__default["default"].createElement("div", { ref: function (el) {
|
|
583
|
+
_this.el = el;
|
|
584
|
+
}, className: "Scrim ".concat(animationClass) }));
|
|
581
585
|
};
|
|
582
586
|
return Scrim;
|
|
583
587
|
}(React__default["default"].Component));
|
|
@@ -619,16 +623,16 @@ var MenuItem = /** @class */ (function (_super) {
|
|
|
619
623
|
if (autoClickLink) {
|
|
620
624
|
clickLink(e.target, this.item);
|
|
621
625
|
}
|
|
622
|
-
onClick(e);
|
|
626
|
+
onClick === null || onClick === void 0 ? void 0 : onClick(e);
|
|
623
627
|
};
|
|
624
628
|
MenuItem.prototype.onKeyDown = function (e) {
|
|
625
|
-
var _a;
|
|
629
|
+
var _a, _b, _c;
|
|
626
630
|
var key = keyname__default["default"](e.which);
|
|
627
631
|
if (key === 'enter' || key === 'space') {
|
|
628
632
|
e.preventDefault();
|
|
629
633
|
(_a = this.item) === null || _a === void 0 ? void 0 : _a.click();
|
|
630
634
|
}
|
|
631
|
-
this.props.onKeyDown(e);
|
|
635
|
+
(_c = (_b = this.props).onKeyDown) === null || _c === void 0 ? void 0 : _c.call(_b, e);
|
|
632
636
|
};
|
|
633
637
|
MenuItem.prototype.render = function () {
|
|
634
638
|
var _this = this;
|
|
@@ -641,12 +645,6 @@ var MenuItem = /** @class */ (function (_super) {
|
|
|
641
645
|
};
|
|
642
646
|
MenuItem.displayName = 'MenuItem';
|
|
643
647
|
MenuItem.defaultProps = {
|
|
644
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
645
|
-
menuItemRef: function () { },
|
|
646
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
647
|
-
onClick: function () { },
|
|
648
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
649
|
-
onKeyDown: function () { },
|
|
650
648
|
autoClickLink: true
|
|
651
649
|
};
|
|
652
650
|
return MenuItem;
|
|
@@ -671,6 +669,7 @@ var TopBar$1 = /** @class */ (function (_super) {
|
|
|
671
669
|
tslib.__extends(TopBar, _super);
|
|
672
670
|
function TopBar(props) {
|
|
673
671
|
var _this = _super.call(this, props) || this;
|
|
672
|
+
_this.menuBarRef = React__default["default"].createRef();
|
|
674
673
|
_this.onResize = function () {
|
|
675
674
|
var wide = isWide();
|
|
676
675
|
if (wide === _this.state.wide) {
|
|
@@ -719,10 +718,10 @@ var TopBar$1 = /** @class */ (function (_super) {
|
|
|
719
718
|
};
|
|
720
719
|
TopBar.prototype.onKeyDown = function (e) {
|
|
721
720
|
var key = keyname__default["default"](e.which);
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
721
|
+
var menuBarElement = this.menuBarRef.current;
|
|
722
|
+
if (!menuBarElement) {
|
|
723
|
+
return;
|
|
724
|
+
}
|
|
726
725
|
var menuItems = Array.from(menuBarElement.children);
|
|
727
726
|
// account for hidden side bar trigger (hamburger)
|
|
728
727
|
if (this.state.wide && this.props.hasTrigger) {
|
|
@@ -749,7 +748,7 @@ var TopBar$1 = /** @class */ (function (_super) {
|
|
|
749
748
|
// disabling no-unused-vars to prevent thin/hasTrigger from being passed through to div
|
|
750
749
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
751
750
|
var _a = this.props, children = _a.children, className = _a.className; _a.thin; _a.hasTrigger; tslib.__rest(_a, ["children", "className", "thin", "hasTrigger"]);
|
|
752
|
-
return (React__default["default"].createElement("ul", { role: "menubar", onKeyDown: this.onKeyDown, className: className }, React.Children.map(children, this.renderChild)));
|
|
751
|
+
return (React__default["default"].createElement("ul", { role: "menubar", onKeyDown: this.onKeyDown, className: className, ref: this.menuBarRef }, React.Children.map(children, this.renderChild)));
|
|
753
752
|
};
|
|
754
753
|
TopBar.defaultProps = {
|
|
755
754
|
thin: false,
|
|
@@ -805,9 +804,16 @@ function resolveElement(elementOrRef) {
|
|
|
805
804
|
return null;
|
|
806
805
|
}
|
|
807
806
|
|
|
807
|
+
function getChildRef(child, version) {
|
|
808
|
+
if (version === void 0) { version = React__default["default"].version; }
|
|
809
|
+
return parseInt(version, 10) >= 19
|
|
810
|
+
? child.props.ref
|
|
811
|
+
: child.ref;
|
|
812
|
+
}
|
|
813
|
+
|
|
808
814
|
function ClickOutsideListener(_a, ref) {
|
|
809
815
|
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;
|
|
810
|
-
var childElementRef = React.useRef();
|
|
816
|
+
var childElementRef = React.useRef(null);
|
|
811
817
|
var handleEvent = function (event) {
|
|
812
818
|
if (event.defaultPrevented) {
|
|
813
819
|
return;
|
|
@@ -830,9 +836,8 @@ function ClickOutsideListener(_a, ref) {
|
|
|
830
836
|
childElementRef.current = node;
|
|
831
837
|
// Ref for this component should pass-through to the child node
|
|
832
838
|
setRef(ref, node);
|
|
833
|
-
//
|
|
834
|
-
|
|
835
|
-
var childRef = children.ref;
|
|
839
|
+
// Forward the child's own ref. In React 19 ref lives in props; in 16–18 it's element.ref.
|
|
840
|
+
var childRef = getChildRef(children);
|
|
836
841
|
setRef(childRef, node);
|
|
837
842
|
};
|
|
838
843
|
React.useEffect(function () {
|
|
@@ -1341,7 +1346,7 @@ var AriaIsolate = /** @class */ (function () {
|
|
|
1341
1346
|
|
|
1342
1347
|
/**
|
|
1343
1348
|
* When a component needs to track an internal ref on a component that has a
|
|
1344
|
-
* forwarded ref, useSharedRef will return a
|
|
1349
|
+
* forwarded ref, useSharedRef will return a RefObject<T | null> that will
|
|
1345
1350
|
* correctly invoke the parent ref as well providing an internal ref.
|
|
1346
1351
|
*
|
|
1347
1352
|
* @example
|
|
@@ -1354,9 +1359,10 @@ var AriaIsolate = /** @class */ (function () {
|
|
|
1354
1359
|
* })
|
|
1355
1360
|
*/
|
|
1356
1361
|
function useSharedRef(ref) {
|
|
1357
|
-
var internalRef = React.useRef();
|
|
1362
|
+
var internalRef = React.useRef(null);
|
|
1358
1363
|
React.useEffect(function () {
|
|
1359
1364
|
setRef(ref, internalRef.current);
|
|
1365
|
+
return function () { return setRef(ref, null); };
|
|
1360
1366
|
}, [ref]);
|
|
1361
1367
|
return internalRef;
|
|
1362
1368
|
}
|
|
@@ -1486,7 +1492,7 @@ function useFocusTrap(target, options) {
|
|
|
1486
1492
|
if (options === void 0) { options = {}; }
|
|
1487
1493
|
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;
|
|
1488
1494
|
var focusTrap = React.useRef(null);
|
|
1489
|
-
var returnFocusElementRef = React.useRef();
|
|
1495
|
+
var returnFocusElementRef = React.useRef(null);
|
|
1490
1496
|
function restoreFocusToReturnFocusElement() {
|
|
1491
1497
|
var _a;
|
|
1492
1498
|
var resolvedReturnFocusElement = resolveElement(returnFocusElement);
|
|
@@ -1536,7 +1542,7 @@ var Dialog = React.forwardRef(function (_a, ref) {
|
|
|
1536
1542
|
var dialogRef = useSharedRef(dialogRefProp || ref);
|
|
1537
1543
|
var _g = tslib.__read(nextId.useId(1, 'dialog-title-'), 1), headingId = _g[0];
|
|
1538
1544
|
var headingRef = React.useRef(null);
|
|
1539
|
-
var isolatorRef = React.useRef();
|
|
1545
|
+
var isolatorRef = React.useRef(null);
|
|
1540
1546
|
var headingLevel = typeof heading === 'object' && 'level' in heading && heading.level
|
|
1541
1547
|
? heading.level
|
|
1542
1548
|
: 2;
|
|
@@ -2033,10 +2039,17 @@ function Tooltip(_a) {
|
|
|
2033
2039
|
fireCustomEvent(false, targetElement);
|
|
2034
2040
|
}, TIP_HIDE_DELAY);
|
|
2035
2041
|
}
|
|
2042
|
+
}, [target]);
|
|
2043
|
+
// Cancel any pending hide timeout when the Tooltip unmounts so it
|
|
2044
|
+
// does not fire setShowTooltip on an unmounted component.
|
|
2045
|
+
React.useEffect(function () {
|
|
2036
2046
|
return function () {
|
|
2037
|
-
|
|
2047
|
+
if (hideTimeoutRef.current) {
|
|
2048
|
+
clearTimeout(hideTimeoutRef.current);
|
|
2049
|
+
hideTimeoutRef.current = null;
|
|
2050
|
+
}
|
|
2038
2051
|
};
|
|
2039
|
-
}, [
|
|
2052
|
+
}, []);
|
|
2040
2053
|
React.useEffect(function () {
|
|
2041
2054
|
if (typeof showProp === 'boolean') {
|
|
2042
2055
|
setShowTooltip(showProp);
|
|
@@ -2124,7 +2137,7 @@ var looksLikeLink = function (props) {
|
|
|
2124
2137
|
};
|
|
2125
2138
|
var IconButton = React.forwardRef(function (_a, ref) {
|
|
2126
2139
|
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"]);
|
|
2127
|
-
var internalRef = React.useRef();
|
|
2140
|
+
var internalRef = React.useRef(null);
|
|
2128
2141
|
React.useImperativeHandle(ref, function () { return internalRef.current; });
|
|
2129
2142
|
// Configure additional properties based on the type of the Component
|
|
2130
2143
|
// for accessibility
|
|
@@ -2199,7 +2212,7 @@ var typeMap = {
|
|
|
2199
2212
|
};
|
|
2200
2213
|
var tabIndexHandler = function (reset, toast) {
|
|
2201
2214
|
if (reset) {
|
|
2202
|
-
// restore tab
|
|
2215
|
+
// restore tab indices that we clobbered
|
|
2203
2216
|
return queryAll('[data-cached-tabindex]').forEach(function (el) {
|
|
2204
2217
|
el.tabIndex = Number(el.getAttribute('data-cached-tabindex'));
|
|
2205
2218
|
});
|
|
@@ -2213,126 +2226,118 @@ var tabIndexHandler = function (reset, toast) {
|
|
|
2213
2226
|
};
|
|
2214
2227
|
|
|
2215
2228
|
/**
|
|
2216
|
-
*
|
|
2229
|
+
* Hook to be used similarly to the React.Component#componentDidMount.
|
|
2230
|
+
* Executes the provided `effect` when `dependencies` change but does not
|
|
2231
|
+
* execute the effect initially (on mount) - only on update.
|
|
2232
|
+
*
|
|
2233
|
+
* @param effect {Function} function to be executed when dependencies update
|
|
2234
|
+
* @param dependencies {Any} any valid dependency argument to React.useEffect
|
|
2217
2235
|
*/
|
|
2218
|
-
var
|
|
2219
|
-
|
|
2220
|
-
function
|
|
2221
|
-
|
|
2222
|
-
|
|
2223
|
-
|
|
2224
|
-
};
|
|
2225
|
-
_this.dismissToast = _this.dismissToast.bind(_this);
|
|
2226
|
-
_this.showToast = _this.showToast.bind(_this);
|
|
2227
|
-
return _this;
|
|
2228
|
-
}
|
|
2229
|
-
Toast.prototype.componentDidMount = function () {
|
|
2230
|
-
var show = this.props.show;
|
|
2231
|
-
if (show) {
|
|
2232
|
-
// Timeout because CSS display: none/block and opacity:
|
|
2233
|
-
// 0/1 properties cannot be toggled in the same tick
|
|
2234
|
-
// see: https://codepen.io/isnerms/pen/eyQaLP
|
|
2235
|
-
setTimeout(this.showToast);
|
|
2236
|
+
var useDidUpdate = function (effect, dependencies) {
|
|
2237
|
+
var mounted = React__default["default"].useRef(false);
|
|
2238
|
+
React__default["default"].useEffect(function () {
|
|
2239
|
+
if (!mounted.current) {
|
|
2240
|
+
mounted.current = true;
|
|
2241
|
+
return;
|
|
2236
2242
|
}
|
|
2243
|
+
effect();
|
|
2244
|
+
}, dependencies);
|
|
2245
|
+
};
|
|
2246
|
+
|
|
2247
|
+
/**
|
|
2248
|
+
* The cauldron toast notification component
|
|
2249
|
+
*/
|
|
2250
|
+
var Toast = React.forwardRef(function (_a, ref) {
|
|
2251
|
+
var type = _a.type, children = _a.children, _b = _a.onDismiss, onDismiss = _b === void 0 ? function () {
|
|
2252
|
+
// noop
|
|
2253
|
+
} : _b, _c = _a.dismissText, dismissText = _c === void 0 ? 'Dismiss' : _c, toastRef = _a.toastRef, _d = _a.focus, focus = _d === void 0 ? true : _d, _e = _a.show, show = _e === void 0 ? false : _e, _f = _a.dismissible, dismissible = _f === void 0 ? true : _f, className = _a.className, otherProps = tslib.__rest(_a, ["type", "children", "onDismiss", "dismissText", "toastRef", "focus", "show", "dismissible", "className"]);
|
|
2254
|
+
var elRef = useSharedRef(ref);
|
|
2255
|
+
var isolatorRef = React.useRef(null);
|
|
2256
|
+
var timeoutsRef = React.useRef(new Set());
|
|
2257
|
+
var _g = tslib.__read(React.useState(show ? 'FadeIn--flex' : 'is--hidden'), 2), animationClass = _g[0], setAnimationClass = _g[1];
|
|
2258
|
+
// Backwards-compat: propagate to the deprecated toastRef prop as well
|
|
2259
|
+
React.useEffect(function () {
|
|
2260
|
+
var _a;
|
|
2261
|
+
if (!toastRef)
|
|
2262
|
+
return;
|
|
2263
|
+
setRef(toastRef, (_a = elRef.current) !== null && _a !== void 0 ? _a : null);
|
|
2264
|
+
return function () { return setRef(toastRef, null); };
|
|
2265
|
+
}, [toastRef]);
|
|
2266
|
+
// Timeout because CSS display: none/block and opacity:
|
|
2267
|
+
// 0/1 properties cannot be toggled in the same tick
|
|
2268
|
+
// see: https://codepen.io/isnerms/pen/eyQaLP
|
|
2269
|
+
var scheduleNextTick = function (fn) {
|
|
2270
|
+
var id = setTimeout(function () {
|
|
2271
|
+
timeoutsRef.current.delete(id);
|
|
2272
|
+
fn();
|
|
2273
|
+
});
|
|
2274
|
+
timeoutsRef.current.add(id);
|
|
2237
2275
|
};
|
|
2238
|
-
|
|
2239
|
-
|
|
2240
|
-
|
|
2241
|
-
|
|
2242
|
-
|
|
2243
|
-
|
|
2244
|
-
|
|
2245
|
-
});
|
|
2246
|
-
}
|
|
2247
|
-
else {
|
|
2248
|
-
this.dismissToast();
|
|
2249
|
-
}
|
|
2276
|
+
var showToast = React.useCallback(function () {
|
|
2277
|
+
setAnimationClass('FadeIn--flex FadeIn');
|
|
2278
|
+
if (type === 'action-needed' && elRef.current) {
|
|
2279
|
+
var isolator = new AriaIsolate(elRef.current);
|
|
2280
|
+
tabIndexHandler(false, elRef.current);
|
|
2281
|
+
isolatorRef.current = isolator;
|
|
2282
|
+
isolator.activate();
|
|
2250
2283
|
}
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
var isolator = this.state.isolator;
|
|
2254
|
-
isolator === null || isolator === void 0 ? void 0 : isolator.deactivate();
|
|
2255
|
-
};
|
|
2256
|
-
Toast.prototype.render = function () {
|
|
2257
|
-
var _this = this;
|
|
2258
|
-
var animationClass = this.state.animationClass;
|
|
2259
|
-
var _a = this.props, type = _a.type, children = _a.children;
|
|
2260
|
-
// prevent `onDismiss` from being passed-through to DOM
|
|
2261
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
2262
|
-
_a.onDismiss; var dismissText = _a.dismissText, toastRef = _a.toastRef, focus = _a.focus, show = _a.show, dismissible = _a.dismissible, className = _a.className, otherProps = tslib.__rest(_a, ["type", "children", "onDismiss", "dismissText", "toastRef", "focus", "show", "dismissible", "className"]);
|
|
2263
|
-
var scrim = type === 'action-needed' && show ? (React__default["default"].createElement("div", { className: "Scrim--light Scrim--show Scrim--fade-in" })) : null;
|
|
2264
|
-
var defaultProps = {
|
|
2265
|
-
tabIndex: -1,
|
|
2266
|
-
className: classNames__default["default"]('Toast', "Toast--".concat(typeMap[type].className), animationClass, { 'Toast--non-dismissible': !dismissible }, className)
|
|
2267
|
-
};
|
|
2268
|
-
if (!focus) {
|
|
2269
|
-
defaultProps.role = 'alert';
|
|
2284
|
+
if (elRef.current && !!focus) {
|
|
2285
|
+
elRef.current.focus();
|
|
2270
2286
|
}
|
|
2271
|
-
|
|
2272
|
-
|
|
2273
|
-
|
|
2274
|
-
setRef(toastRef, el);
|
|
2275
|
-
} }, defaultProps, otherProps),
|
|
2276
|
-
React__default["default"].createElement("div", { className: "Toast__message" },
|
|
2277
|
-
React__default["default"].createElement(Icon, { type: typeMap[type].icon }),
|
|
2278
|
-
React__default["default"].createElement("div", { className: "Toast__message-content" }, children)),
|
|
2279
|
-
type !== 'action-needed' && dismissible && (React__default["default"].createElement("button", { type: "button", className: 'Toast__dismiss', "aria-label": dismissText, onClick: this.dismissToast },
|
|
2280
|
-
React__default["default"].createElement(Icon, { type: "close" })))),
|
|
2281
|
-
scrim));
|
|
2282
|
-
};
|
|
2283
|
-
Toast.prototype.dismissToast = function () {
|
|
2284
|
-
var _this = this;
|
|
2285
|
-
if (!this.el) {
|
|
2287
|
+
}, [type, focus]);
|
|
2288
|
+
var dismissToast = React.useCallback(function () {
|
|
2289
|
+
if (!elRef.current) {
|
|
2286
2290
|
return;
|
|
2287
2291
|
}
|
|
2288
|
-
|
|
2289
|
-
|
|
2290
|
-
|
|
2291
|
-
animationClass: 'FadeIn--flex'
|
|
2292
|
-
}, function () {
|
|
2293
|
-
// Timeout because CSS display: none/block and opacity:
|
|
2294
|
-
// 0/1 properties cannot be toggled in the same tick
|
|
2295
|
-
// see: https://codepen.io/isnerms/pen/eyQaLP
|
|
2296
|
-
setTimeout(function () {
|
|
2297
|
-
if (type === 'action-needed') {
|
|
2298
|
-
tabIndexHandler(true, _this.el);
|
|
2299
|
-
isolator === null || isolator === void 0 ? void 0 : isolator.deactivate();
|
|
2300
|
-
}
|
|
2301
|
-
_this.setState({ animationClass: 'is--hidden' }, onDismiss);
|
|
2302
|
-
});
|
|
2303
|
-
});
|
|
2304
|
-
};
|
|
2305
|
-
Toast.prototype.showToast = function () {
|
|
2306
|
-
var _this = this;
|
|
2307
|
-
var _a = this.props, type = _a.type, focus = _a.focus;
|
|
2308
|
-
this.setState({
|
|
2309
|
-
animationClass: 'FadeIn--flex FadeIn'
|
|
2310
|
-
}, function () {
|
|
2292
|
+
setAnimationClass('FadeIn--flex');
|
|
2293
|
+
scheduleNextTick(function () {
|
|
2294
|
+
var _a;
|
|
2311
2295
|
if (type === 'action-needed') {
|
|
2312
|
-
|
|
2313
|
-
|
|
2314
|
-
_this.setState({ isolator: isolator });
|
|
2315
|
-
isolator.activate();
|
|
2316
|
-
}
|
|
2317
|
-
if (_this.el && !!focus) {
|
|
2318
|
-
// focus the toast
|
|
2319
|
-
_this.el.focus();
|
|
2296
|
+
tabIndexHandler(true, elRef.current);
|
|
2297
|
+
(_a = isolatorRef.current) === null || _a === void 0 ? void 0 : _a.deactivate();
|
|
2320
2298
|
}
|
|
2299
|
+
setAnimationClass('is--hidden');
|
|
2300
|
+
onDismiss();
|
|
2321
2301
|
});
|
|
2302
|
+
}, [type, onDismiss]);
|
|
2303
|
+
React.useEffect(function () {
|
|
2304
|
+
if (show) {
|
|
2305
|
+
scheduleNextTick(showToast);
|
|
2306
|
+
}
|
|
2307
|
+
return function () {
|
|
2308
|
+
var _a;
|
|
2309
|
+
timeoutsRef.current.forEach(clearTimeout);
|
|
2310
|
+
timeoutsRef.current.clear();
|
|
2311
|
+
(_a = isolatorRef.current) === null || _a === void 0 ? void 0 : _a.deactivate();
|
|
2312
|
+
};
|
|
2313
|
+
}, []);
|
|
2314
|
+
useDidUpdate(function () {
|
|
2315
|
+
if (show) {
|
|
2316
|
+
setAnimationClass('FadeIn--flex');
|
|
2317
|
+
scheduleNextTick(showToast);
|
|
2318
|
+
}
|
|
2319
|
+
else {
|
|
2320
|
+
dismissToast();
|
|
2321
|
+
}
|
|
2322
|
+
}, [show]);
|
|
2323
|
+
var scrim = type === 'action-needed' && show ? (React__default["default"].createElement("div", { className: "Scrim--light Scrim--show Scrim--fade-in" })) : null;
|
|
2324
|
+
var defaultProps = {
|
|
2325
|
+
tabIndex: -1,
|
|
2326
|
+
className: classNames__default["default"]('Toast', "Toast--".concat(typeMap[type].className), animationClass, { 'Toast--non-dismissible': !dismissible }, className)
|
|
2322
2327
|
};
|
|
2323
|
-
|
|
2324
|
-
|
|
2325
|
-
|
|
2326
|
-
|
|
2327
|
-
|
|
2328
|
-
|
|
2329
|
-
|
|
2330
|
-
|
|
2331
|
-
|
|
2332
|
-
|
|
2333
|
-
|
|
2334
|
-
|
|
2335
|
-
|
|
2328
|
+
if (!focus) {
|
|
2329
|
+
defaultProps.role = 'alert';
|
|
2330
|
+
}
|
|
2331
|
+
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
2332
|
+
React__default["default"].createElement("div", tslib.__assign({ ref: elRef }, defaultProps, otherProps),
|
|
2333
|
+
React__default["default"].createElement("div", { className: "Toast__message" },
|
|
2334
|
+
React__default["default"].createElement(Icon, { type: typeMap[type].icon }),
|
|
2335
|
+
React__default["default"].createElement("div", { className: "Toast__message-content" }, children)),
|
|
2336
|
+
type !== 'action-needed' && dismissible && (React__default["default"].createElement("button", { type: "button", className: "Toast__dismiss", "aria-label": dismissText, onClick: dismissToast },
|
|
2337
|
+
React__default["default"].createElement(Icon, { type: "close" })))),
|
|
2338
|
+
scrim));
|
|
2339
|
+
});
|
|
2340
|
+
Toast.displayName = 'Toast';
|
|
2336
2341
|
|
|
2337
2342
|
var Link = React.forwardRef(function (_a, ref) {
|
|
2338
2343
|
var children = _a.children, linkRef = _a.linkRef, className = _a.className, variant = _a.variant, thin = _a.thin, other = tslib.__rest(_a, ["children", "linkRef", "className", "variant", "thin"]);
|
|
@@ -2599,10 +2604,10 @@ var RadioCardGroup = function (_a) {
|
|
|
2599
2604
|
RadioCardGroup.displayName = 'RadioCardGroup';
|
|
2600
2605
|
|
|
2601
2606
|
var Checkbox = React.forwardRef(function (_a, ref) {
|
|
2602
|
-
var id = _a.id, label = _a.label, labelDescription = _a.labelDescription, error = _a.error, checkboxRef = _a.checkboxRef, className = _a.className, onChange = _a.onChange, onFocus = _a.onFocus, onBlur = _a.onBlur, ariaDescribedby = _a["aria-describedby"],
|
|
2603
|
-
var
|
|
2604
|
-
var
|
|
2605
|
-
var
|
|
2607
|
+
var id = _a.id, label = _a.label, labelDescription = _a.labelDescription, error = _a.error, checkboxRef = _a.checkboxRef, className = _a.className, onChange = _a.onChange, _b = _a.controlled, controlled = _b === void 0 ? false : _b, onFocus = _a.onFocus, onBlur = _a.onBlur, ariaDescribedby = _a["aria-describedby"], _c = _a.disabled, disabled = _c === void 0 ? false : _c, _d = _a.checked, checked = _d === void 0 ? false : _d, _e = _a.indeterminate, indeterminate = _e === void 0 ? false : _e; _a.children; var other = tslib.__rest(_a, ["id", "label", "labelDescription", "error", "checkboxRef", "className", "onChange", "controlled", "onFocus", "onBlur", 'aria-describedby', "disabled", "checked", "indeterminate", "children"]);
|
|
2608
|
+
var _f = tslib.__read(React.useState(checked), 2), isChecked = _f[0], setIsChecked = _f[1];
|
|
2609
|
+
var _g = tslib.__read(React.useState(indeterminate), 2), isIndeterminate = _g[0], setIsIndeterminate = _g[1];
|
|
2610
|
+
var _h = tslib.__read(React.useState(false), 2), focused = _h[0], setFocused = _h[1];
|
|
2606
2611
|
var checkRef = React.useRef(null);
|
|
2607
2612
|
React.useEffect(function () {
|
|
2608
2613
|
setIsChecked(checked);
|
|
@@ -2614,12 +2619,12 @@ var Checkbox = React.forwardRef(function (_a, ref) {
|
|
|
2614
2619
|
if (typeof refProp === 'function') {
|
|
2615
2620
|
refProp(checkRef.current);
|
|
2616
2621
|
}
|
|
2617
|
-
var
|
|
2622
|
+
var _j = React.useMemo(function () {
|
|
2618
2623
|
return {
|
|
2619
2624
|
labelDescriptionId: nextId__default["default"](),
|
|
2620
2625
|
errorId: nextId__default["default"]()
|
|
2621
2626
|
};
|
|
2622
|
-
}, []), errorId =
|
|
2627
|
+
}, []), errorId = _j.errorId, labelDescriptionId = _j.labelDescriptionId;
|
|
2623
2628
|
var ariaDescribedbyId = ariaDescribedby;
|
|
2624
2629
|
if (error) {
|
|
2625
2630
|
ariaDescribedbyId = addIdRef(ariaDescribedbyId, errorId);
|
|
@@ -2658,7 +2663,9 @@ var Checkbox = React.forwardRef(function (_a, ref) {
|
|
|
2658
2663
|
if (isIndeterminate) {
|
|
2659
2664
|
setIsIndeterminate(false);
|
|
2660
2665
|
}
|
|
2661
|
-
|
|
2666
|
+
if (!controlled) {
|
|
2667
|
+
setIsChecked(e.target.checked);
|
|
2668
|
+
}
|
|
2662
2669
|
if (onChange) {
|
|
2663
2670
|
onChange(e);
|
|
2664
2671
|
}
|
|
@@ -2692,7 +2699,7 @@ Checkbox.displayName = 'Checkbox';
|
|
|
2692
2699
|
*/
|
|
2693
2700
|
function TooltipTabstop(_a) {
|
|
2694
2701
|
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"]);
|
|
2695
|
-
var buttonRef = React.useRef();
|
|
2702
|
+
var buttonRef = React.useRef(null);
|
|
2696
2703
|
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
2697
2704
|
React__default["default"].createElement("button", tslib.__assign({ type: "button", ref: buttonRef, "aria-disabled": "true", className: classNames__default["default"]('TooltipTabstop', className) }, buttonProps), children),
|
|
2698
2705
|
React__default["default"].createElement(Tooltip, { target: buttonRef, variant: variant, association: association, show: show, placement: placement, portal: portal, hideElementOnHidden: hideElementOnHidden }, tooltip)));
|
|
@@ -3231,25 +3238,6 @@ var Tab = React__default["default"].forwardRef(function (_a, ref) {
|
|
|
3231
3238
|
});
|
|
3232
3239
|
Tab.displayName = 'Tab';
|
|
3233
3240
|
|
|
3234
|
-
/**
|
|
3235
|
-
* Hook to be used similarly to the React.Component#componentDidMount.
|
|
3236
|
-
* Executes the provided `effect` when `dependencies` change but does not
|
|
3237
|
-
* execute the effect initially (on mount) - only on update.
|
|
3238
|
-
*
|
|
3239
|
-
* @param effect {Function} function to be executed when dependencies update
|
|
3240
|
-
* @param dependencies {Any} any valid dependency argument to React.useEffect
|
|
3241
|
-
*/
|
|
3242
|
-
var useDidUpdate = function (effect, dependencies) {
|
|
3243
|
-
var mounted = React__default["default"].useRef(false);
|
|
3244
|
-
React__default["default"].useEffect(function () {
|
|
3245
|
-
if (!mounted.current) {
|
|
3246
|
-
mounted.current = true;
|
|
3247
|
-
return;
|
|
3248
|
-
}
|
|
3249
|
-
effect();
|
|
3250
|
-
}, dependencies);
|
|
3251
|
-
};
|
|
3252
|
-
|
|
3253
3241
|
var Tabs = function (_a) {
|
|
3254
3242
|
var children = _a.children, thin = _a.thin, _b = _a.orientation, orientation = _b === void 0 ? 'horizontal' : _b, _c = _a.initialActiveIndex, initialActiveIndex = _c === void 0 ? 0 : _c, className = _a.className, onChange = _a.onChange, labelProp = tslib.__rest(_a, ["children", "thin", "orientation", "initialActiveIndex", "className", "onChange"]);
|
|
3255
3243
|
var _d = tslib.__read(React.useState(initialActiveIndex), 2), activeIndex = _d[0], setActiveIndex = _d[1];
|
|
@@ -3555,7 +3543,7 @@ var TwoColumnPanel = React.forwardRef(function (_a, ref) {
|
|
|
3555
3543
|
var closeButtonRef = React.useRef(null);
|
|
3556
3544
|
var columnLeftRef = React.useRef(null);
|
|
3557
3545
|
var columnRightRef = React.useRef(null);
|
|
3558
|
-
var columnLeft = React__default["default"].Children.toArray(children).find(function (child) { return child.type === ColumnLeft; });
|
|
3546
|
+
var columnLeft = React__default["default"].Children.toArray(children).find(function (child) { return React__default["default"].isValidElement(child) && child.type === ColumnLeft; });
|
|
3559
3547
|
var togglePanel = function () {
|
|
3560
3548
|
var prefersReducedMotion = 'matchMedia' in window &&
|
|
3561
3549
|
typeof matchMedia === 'function' &&
|
|
@@ -3588,16 +3576,17 @@ var TwoColumnPanel = React.forwardRef(function (_a, ref) {
|
|
|
3588
3576
|
var ColumnLeftComponent;
|
|
3589
3577
|
var columnLeftId;
|
|
3590
3578
|
if (React.isValidElement(columnLeft)) {
|
|
3591
|
-
var
|
|
3579
|
+
var columnLeftProps = columnLeft.props;
|
|
3580
|
+
var ref_1 = columnLeftProps.ref || columnLeftRef;
|
|
3592
3581
|
var id = (columnLeftId =
|
|
3593
|
-
|
|
3582
|
+
columnLeftProps.id || nextId.useId(undefined, 'sidebar-')[0]);
|
|
3594
3583
|
var CloseButton = (React__default["default"].createElement("div", { className: "TwoColumnPanel__Close" },
|
|
3595
3584
|
React__default["default"].createElement("button", { type: "button", onClick: togglePanel, ref: closeButtonRef, "aria-label": hideCollapsedPanelLabel },
|
|
3596
3585
|
React__default["default"].createElement(Icon, { type: "close" })),
|
|
3597
3586
|
React__default["default"].createElement(Tooltip, { target: closeButtonRef, association: "aria-labelledby", hideElementOnHidden: true }, hideCollapsedPanelLabel)));
|
|
3598
3587
|
var children_1 = tslib.__spreadArray([
|
|
3599
3588
|
CloseButton
|
|
3600
|
-
], tslib.__read(React__default["default"].Children.toArray(
|
|
3589
|
+
], tslib.__read(React__default["default"].Children.toArray(columnLeftProps.children)), false);
|
|
3601
3590
|
ColumnLeftComponent = React.cloneElement(columnLeft, { id: id, ref: ref_1, tabIndex: -1 }, children_1.map(function (child, index) {
|
|
3602
3591
|
return React.cloneElement(child, {
|
|
3603
3592
|
key: child.key
|
|
@@ -3606,17 +3595,18 @@ var TwoColumnPanel = React.forwardRef(function (_a, ref) {
|
|
|
3606
3595
|
});
|
|
3607
3596
|
}));
|
|
3608
3597
|
}
|
|
3609
|
-
var columnRight = React__default["default"].Children.toArray(children).find(function (child) { return child.type === ColumnRight; });
|
|
3598
|
+
var columnRight = React__default["default"].Children.toArray(children).find(function (child) { return React__default["default"].isValidElement(child) && child.type === ColumnRight; });
|
|
3610
3599
|
var ColumnRightComponent;
|
|
3611
3600
|
if (React.isValidElement(columnRight)) {
|
|
3612
|
-
var
|
|
3601
|
+
var columnRightProps = columnRight.props;
|
|
3602
|
+
var ref_2 = columnRightProps.ref || columnRightRef;
|
|
3613
3603
|
var ToggleButton = (React__default["default"].createElement("div", { className: "TwoColumnPanel__ButtonToggle" },
|
|
3614
3604
|
React__default["default"].createElement("button", { type: "button", onClick: togglePanel, ref: toggleButtonRef, "aria-label": !isCollapsed ? hideCollapsedPanelLabel : showCollapsedPanelLabel, "aria-expanded": !isCollapsed, "aria-controls": columnLeftId },
|
|
3615
3605
|
React__default["default"].createElement(Icon, { type: !isCollapsed ? 'chevron-double-left' : 'chevron-double-right' })),
|
|
3616
3606
|
React__default["default"].createElement(Tooltip, { target: toggleButtonRef, association: "aria-labelledby", hideElementOnHidden: true }, !isCollapsed ? hideCollapsedPanelLabel : showCollapsedPanelLabel)));
|
|
3617
3607
|
var children_2 = tslib.__spreadArray([
|
|
3618
3608
|
ToggleButton
|
|
3619
|
-
], tslib.__read(React__default["default"].Children.toArray(
|
|
3609
|
+
], tslib.__read(React__default["default"].Children.toArray(columnRightProps.children)), false);
|
|
3620
3610
|
ColumnRightComponent = React.cloneElement(columnRight, { ref: ref_2, tabIndex: -1 }, children_2.map(function (child, index) {
|
|
3621
3611
|
return React.cloneElement(child, {
|
|
3622
3612
|
key: child.key
|
|
@@ -3638,7 +3628,7 @@ var TwoColumnPanel = React.forwardRef(function (_a, ref) {
|
|
|
3638
3628
|
(_a = columnLeftRef.current) === null || _a === void 0 ? void 0 : _a.removeEventListener('transitionend', handleTransitionEnd);
|
|
3639
3629
|
};
|
|
3640
3630
|
}, [columnLeftRef.current, isCollapsed]);
|
|
3641
|
-
// When the
|
|
3631
|
+
// When the collapsible panel starts to overlay content, it needs to become a focus trap and collapsed by default
|
|
3642
3632
|
React.useLayoutEffect(function () {
|
|
3643
3633
|
var mediaQueryList = matchMedia(collapsedMediaQuery);
|
|
3644
3634
|
var handleMatch = function (matches) {
|
|
@@ -3802,7 +3792,8 @@ var Listbox = React.forwardRef(function (_a, ref) {
|
|
|
3802
3792
|
}
|
|
3803
3793
|
}, [activeOption]);
|
|
3804
3794
|
React.useEffect(function () {
|
|
3805
|
-
if (isActiveControlled &&
|
|
3795
|
+
if (isActiveControlled &&
|
|
3796
|
+
(controlledActiveOption === null || controlledActiveOption === void 0 ? void 0 : controlledActiveOption.element) !== (activeOption === null || activeOption === void 0 ? void 0 : activeOption.element)) {
|
|
3806
3797
|
setActiveOption(controlledActiveOption || null);
|
|
3807
3798
|
}
|
|
3808
3799
|
}, [isActiveControlled, controlledActiveOption]);
|
|
@@ -3948,11 +3939,11 @@ function isElementPreceding(a, b) {
|
|
|
3948
3939
|
}
|
|
3949
3940
|
var ListboxOption = React.forwardRef(function (_a, ref) {
|
|
3950
3941
|
var _b;
|
|
3951
|
-
var _c;
|
|
3952
|
-
var propId = _a.id, className = _a.className,
|
|
3953
|
-
var
|
|
3942
|
+
var _c, _d;
|
|
3943
|
+
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"]);
|
|
3944
|
+
var _g = useListboxContext(), active = _g.active, selected = _g.selected, setOptions = _g.setOptions, onSelect = _g.onSelect;
|
|
3954
3945
|
var listboxOptionRef = useSharedRef(ref);
|
|
3955
|
-
var
|
|
3946
|
+
var _h = tslib.__read(propId ? [propId] : nextId.useId(1, 'listbox-option'), 1), id = _h[0];
|
|
3956
3947
|
var isActive = (active === null || active === void 0 ? void 0 : active.element) === listboxOptionRef.current;
|
|
3957
3948
|
var isSelected = typeof selectedProp === 'boolean'
|
|
3958
3949
|
? selectedProp
|
|
@@ -3960,15 +3951,15 @@ var ListboxOption = React.forwardRef(function (_a, ref) {
|
|
|
3960
3951
|
!!selected.find(function (option) { return option.element === listboxOptionRef.current; });
|
|
3961
3952
|
var optionValue = typeof value !== 'undefined'
|
|
3962
3953
|
? value
|
|
3963
|
-
: (_c = listboxOptionRef.current) === null || _c === void 0 ? void 0 : _c.
|
|
3954
|
+
: ((_d = (_c = listboxOptionRef.current) === null || _c === void 0 ? void 0 : _c.textContent) !== null && _d !== void 0 ? _d : undefined);
|
|
3964
3955
|
React.useEffect(function () {
|
|
3965
3956
|
var element = listboxOptionRef.current;
|
|
3966
3957
|
setOptions(function (options) {
|
|
3967
3958
|
var e_1, _a;
|
|
3968
|
-
var option = { element: element, value: optionValue };
|
|
3969
3959
|
// istanbul ignore next
|
|
3970
3960
|
if (!element)
|
|
3971
3961
|
return options;
|
|
3962
|
+
var option = { element: element, value: optionValue };
|
|
3972
3963
|
// Elements are frequently appended, so check to see if the newly rendered
|
|
3973
3964
|
// element follows the last element first before any other checks
|
|
3974
3965
|
if (!options.length ||
|
|
@@ -4155,7 +4146,7 @@ var ComboboxOption = React.forwardRef(function (_a, ref) {
|
|
|
4155
4146
|
// istanbul ignore next
|
|
4156
4147
|
React.useLayoutEffect(function () {
|
|
4157
4148
|
var intersectionEntry = intersectionRef.current;
|
|
4158
|
-
if (!intersectionEntry || !isActive) {
|
|
4149
|
+
if (!intersectionEntry || !isActive || !comboboxOptionRef.current) {
|
|
4159
4150
|
return;
|
|
4160
4151
|
}
|
|
4161
4152
|
var rect = comboboxOptionRef.current.getBoundingClientRect();
|
|
@@ -4171,10 +4162,10 @@ var ComboboxOption = React.forwardRef(function (_a, ref) {
|
|
|
4171
4162
|
}
|
|
4172
4163
|
}, [isActive]);
|
|
4173
4164
|
React.useEffect(function () {
|
|
4174
|
-
var _a;
|
|
4165
|
+
var _a, _b;
|
|
4175
4166
|
var comboboxValue = typeof propValue !== 'undefined'
|
|
4176
4167
|
? propValue
|
|
4177
|
-
: (_a = comboboxOptionRef.current) === null || _a === void 0 ? void 0 : _a.
|
|
4168
|
+
: ((_b = (_a = comboboxOptionRef.current) === null || _a === void 0 ? void 0 : _a.textContent) !== null && _b !== void 0 ? _b : undefined);
|
|
4178
4169
|
var value = typeof formValue === 'undefined' ? comboboxValue : formValue;
|
|
4179
4170
|
setFormValues(function (prev) {
|
|
4180
4171
|
var formValues = prev.filter(function (fv) { return fv !== value; });
|
|
@@ -4193,12 +4184,14 @@ var ComboboxOption = React.forwardRef(function (_a, ref) {
|
|
|
4193
4184
|
});
|
|
4194
4185
|
}, [selectedValues, formValue]);
|
|
4195
4186
|
React.useEffect(function () {
|
|
4196
|
-
var _a;
|
|
4187
|
+
var _a, _b;
|
|
4197
4188
|
if (isMatching) {
|
|
4198
4189
|
var comboboxValue_1 = typeof propValue !== 'undefined'
|
|
4199
4190
|
? propValue
|
|
4200
|
-
: (_a = comboboxOptionRef.current) === null || _a === void 0 ? void 0 : _a.
|
|
4191
|
+
: ((_b = (_a = comboboxOptionRef.current) === null || _a === void 0 ? void 0 : _a.textContent) !== null && _b !== void 0 ? _b : undefined);
|
|
4201
4192
|
setMatchingOptions(function (options) {
|
|
4193
|
+
if (!comboboxOptionRef.current)
|
|
4194
|
+
return options;
|
|
4202
4195
|
return new Map(options.set(comboboxOptionRef.current, {
|
|
4203
4196
|
value: comboboxValue_1,
|
|
4204
4197
|
displayValue: children,
|
|
@@ -4338,6 +4331,17 @@ var Combobox = React.forwardRef(function (_a, ref) {
|
|
|
4338
4331
|
return value === lastSelectedValue;
|
|
4339
4332
|
}) || [], 2), element = _a[0], option = _a[1];
|
|
4340
4333
|
if (autocomplete === 'manual') {
|
|
4334
|
+
// In multiselect, the listbox manages its own active option via
|
|
4335
|
+
// keyboard navigation. When the last-selected value no longer
|
|
4336
|
+
// matches any option (e.g. after deselecting the only selected
|
|
4337
|
+
// option), preserve the existing active descendant so the next
|
|
4338
|
+
// Enter keypress can re-toggle the highlighted option.
|
|
4339
|
+
if (multiselect &&
|
|
4340
|
+
!element &&
|
|
4341
|
+
activeDescendant &&
|
|
4342
|
+
matchingOptions.has(activeDescendant.element)) {
|
|
4343
|
+
return;
|
|
4344
|
+
}
|
|
4341
4345
|
setActiveDescendant(!element ? null : tslib.__assign({ element: element }, option));
|
|
4342
4346
|
}
|
|
4343
4347
|
else if (autocomplete === 'automatic' &&
|
|
@@ -4517,6 +4521,7 @@ var Combobox = React.forwardRef(function (_a, ref) {
|
|
|
4517
4521
|
});
|
|
4518
4522
|
}, [disabled, selectedValues, onSelectionChange]);
|
|
4519
4523
|
var handlePillKeyDown = React.useCallback(function (event) {
|
|
4524
|
+
var _a, _b;
|
|
4520
4525
|
if (!PillKeys.includes(event.key)) {
|
|
4521
4526
|
return;
|
|
4522
4527
|
}
|
|
@@ -4534,7 +4539,7 @@ var Combobox = React.forwardRef(function (_a, ref) {
|
|
|
4534
4539
|
handleRemovePill(pillsRef.current[focusedIndex], selectedValues[focusedIndex]);
|
|
4535
4540
|
var nextIndex = focusedIndex + 1;
|
|
4536
4541
|
if (nextIndex == pillsLength) {
|
|
4537
|
-
inputRef.current.focus();
|
|
4542
|
+
(_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
4538
4543
|
}
|
|
4539
4544
|
else {
|
|
4540
4545
|
pillsRef.current[nextIndex].focus();
|
|
@@ -4543,7 +4548,7 @@ var Combobox = React.forwardRef(function (_a, ref) {
|
|
|
4543
4548
|
else if (isArrowLeft || isArrowRight) {
|
|
4544
4549
|
var nextIndex = Math.max(focusedIndex + (isArrowLeft ? -1 : 1), 0);
|
|
4545
4550
|
if (isArrowRight && nextIndex === pillsLength) {
|
|
4546
|
-
inputRef.current.focus();
|
|
4551
|
+
(_b = inputRef.current) === null || _b === void 0 ? void 0 : _b.focus();
|
|
4547
4552
|
}
|
|
4548
4553
|
else {
|
|
4549
4554
|
pillsRef.current[nextIndex].focus();
|
|
@@ -4831,10 +4836,12 @@ var TextEllipsis = React__default["default"].forwardRef(function (_a, ref) {
|
|
|
4831
4836
|
: overflowElement.clientWidth < overflowElement.scrollWidth);
|
|
4832
4837
|
});
|
|
4833
4838
|
};
|
|
4839
|
+
if (!sharedRef.current)
|
|
4840
|
+
return;
|
|
4834
4841
|
var observer = new ResizeObserver(listener);
|
|
4835
4842
|
observer.observe(sharedRef.current);
|
|
4836
4843
|
return function () {
|
|
4837
|
-
observer
|
|
4844
|
+
observer.disconnect();
|
|
4838
4845
|
};
|
|
4839
4846
|
}, []);
|
|
4840
4847
|
React.useEffect(function () {
|
|
@@ -4879,7 +4886,7 @@ var Drawer = React.forwardRef(function (_a, ref) {
|
|
|
4879
4886
|
openRef.current = open;
|
|
4880
4887
|
}, [open, setIsTransitioning]);
|
|
4881
4888
|
React.useEffect(function () {
|
|
4882
|
-
if (!isModal) {
|
|
4889
|
+
if (!isModal || !drawerRef.current) {
|
|
4883
4890
|
return;
|
|
4884
4891
|
}
|
|
4885
4892
|
var isolator = new AriaIsolate(drawerRef.current);
|
|
@@ -5060,7 +5067,7 @@ function getActiveElement(root) {
|
|
|
5060
5067
|
*/
|
|
5061
5068
|
function useMnemonics(_a) {
|
|
5062
5069
|
var elementOrRef = _a.elementOrRef, matchingElementsSelector = _a.matchingElementsSelector, onMatch = _a.onMatch, _b = _a.enabled, enabled = _b === void 0 ? true : _b;
|
|
5063
|
-
var containerRef = React.useRef();
|
|
5070
|
+
var containerRef = React.useRef(null);
|
|
5064
5071
|
React.useEffect(function () {
|
|
5065
5072
|
if (elementOrRef instanceof HTMLElement) {
|
|
5066
5073
|
containerRef.current = elementOrRef;
|
|
@@ -5070,7 +5077,8 @@ function useMnemonics(_a) {
|
|
|
5070
5077
|
}
|
|
5071
5078
|
}, [elementOrRef]);
|
|
5072
5079
|
React.useEffect(function () {
|
|
5073
|
-
|
|
5080
|
+
var listenerTarget = containerRef.current;
|
|
5081
|
+
if (!enabled || !listenerTarget) {
|
|
5074
5082
|
return;
|
|
5075
5083
|
}
|
|
5076
5084
|
var keyboardHandler = function (event) {
|
|
@@ -5083,14 +5091,14 @@ function useMnemonics(_a) {
|
|
|
5083
5091
|
if (event.key.length !== 1 || !/[a-z\d]/i.test(event.key)) {
|
|
5084
5092
|
return;
|
|
5085
5093
|
}
|
|
5086
|
-
var
|
|
5087
|
-
if (!
|
|
5094
|
+
var currentContainer = containerRef.current;
|
|
5095
|
+
if (!currentContainer) {
|
|
5088
5096
|
return;
|
|
5089
5097
|
}
|
|
5090
5098
|
// Prevent default behavior and stop propagation for mnemonic keys
|
|
5091
5099
|
event.preventDefault();
|
|
5092
5100
|
event.stopPropagation();
|
|
5093
|
-
var elements = Array.from(
|
|
5101
|
+
var elements = Array.from(currentContainer.querySelectorAll(matchingElementsSelector !== null && matchingElementsSelector !== void 0 ? matchingElementsSelector : focusable__default["default"]));
|
|
5094
5102
|
var matchingElements = elements.filter(function (element) {
|
|
5095
5103
|
return getAccessibleLabel(element).toLowerCase()[0] ===
|
|
5096
5104
|
event.key.toLowerCase();
|
|
@@ -5098,7 +5106,7 @@ function useMnemonics(_a) {
|
|
|
5098
5106
|
if (!matchingElements.length) {
|
|
5099
5107
|
return;
|
|
5100
5108
|
}
|
|
5101
|
-
var currentActiveElement = getActiveElement(
|
|
5109
|
+
var currentActiveElement = getActiveElement(currentContainer);
|
|
5102
5110
|
var nextActiveElement = null;
|
|
5103
5111
|
if (currentActiveElement) {
|
|
5104
5112
|
nextActiveElement = matchingElements.find(function (element) {
|
|
@@ -5112,17 +5120,15 @@ function useMnemonics(_a) {
|
|
|
5112
5120
|
onMatch(nextActiveElement !== null && nextActiveElement !== void 0 ? nextActiveElement : matchingElements[0]);
|
|
5113
5121
|
}
|
|
5114
5122
|
};
|
|
5115
|
-
|
|
5116
|
-
|
|
5117
|
-
return function () { return container.removeEventListener('keydown', keyboardHandler); };
|
|
5123
|
+
listenerTarget.addEventListener('keydown', keyboardHandler);
|
|
5124
|
+
return function () { return listenerTarget.removeEventListener('keydown', keyboardHandler); };
|
|
5118
5125
|
}, [enabled, containerRef, matchingElementsSelector, onMatch]);
|
|
5119
5126
|
return containerRef;
|
|
5120
5127
|
}
|
|
5121
5128
|
|
|
5122
5129
|
var ActionList = React.forwardRef(function (_a, ref) {
|
|
5123
5130
|
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"]);
|
|
5124
|
-
var
|
|
5125
|
-
var activeElement = React.useRef();
|
|
5131
|
+
var activeElement = React.useRef(null);
|
|
5126
5132
|
var _c = tslib.__read(React.useState(), 2), activeOption = _c[0], setActiveOption = _c[1];
|
|
5127
5133
|
var handleActiveChange = React.useCallback(function (value) {
|
|
5128
5134
|
activeElement.current = value === null || value === void 0 ? void 0 : value.element;
|
|
@@ -5133,22 +5139,18 @@ var ActionList = React.forwardRef(function (_a, ref) {
|
|
|
5133
5139
|
onAction(key, event);
|
|
5134
5140
|
}
|
|
5135
5141
|
}, [onAction]);
|
|
5142
|
+
var handleMnemonicMatch = React.useCallback(function (element) {
|
|
5143
|
+
setActiveOption(function (prev) {
|
|
5144
|
+
return (prev === null || prev === void 0 ? void 0 : prev.element) === element ? prev : { element: element };
|
|
5145
|
+
});
|
|
5146
|
+
}, []);
|
|
5136
5147
|
var containerRef = useMnemonics({
|
|
5137
|
-
onMatch:
|
|
5138
|
-
setActiveOption({
|
|
5139
|
-
element: element
|
|
5140
|
-
});
|
|
5141
|
-
},
|
|
5148
|
+
onMatch: handleMnemonicMatch,
|
|
5142
5149
|
matchingElementsSelector: props.role === 'menu'
|
|
5143
5150
|
? '[role=menuitem],[role=menuitemcheckbox],[role=menuitemradio]'
|
|
5144
5151
|
: '[role=option]'
|
|
5145
5152
|
});
|
|
5146
|
-
return (
|
|
5147
|
-
// Note: we should be able to use listbox without passing a prop
|
|
5148
|
-
// value for "multiselect"
|
|
5149
|
-
// see: https://github.com/dequelabs/cauldron/issues/1890
|
|
5150
|
-
// @ts-expect-error this should be allowed
|
|
5151
|
-
React__default["default"].createElement(Listbox, tslib.__assign({ ref: function (element) {
|
|
5153
|
+
return (React__default["default"].createElement(Listbox, tslib.__assign({ ref: function (element) {
|
|
5152
5154
|
if (ref) {
|
|
5153
5155
|
setRef(ref, element);
|
|
5154
5156
|
}
|
|
@@ -5157,7 +5159,7 @@ var ActionList = React.forwardRef(function (_a, ref) {
|
|
|
5157
5159
|
/* Listbox comes with an explicit role of "listbox", but we want to either
|
|
5158
5160
|
* use the role from props, or default to the intrinsic role */
|
|
5159
5161
|
// eslint-disable-next-line jsx-a11y/aria-role
|
|
5160
|
-
role: undefined, "aria-multiselectable":
|
|
5162
|
+
role: undefined, "aria-multiselectable": undefined, className: classNames__default["default"]('ActionList', className), activeOption: activeOption }, props, { onActiveChange: handleActiveChange, navigation: "bound" }),
|
|
5161
5163
|
React__default["default"].createElement(ActionListProvider, { role: props.role || 'list', onAction: handleAction, selectionType: selectionType }, children)));
|
|
5162
5164
|
});
|
|
5163
5165
|
ActionList.displayName = 'ActionList';
|
|
@@ -5175,7 +5177,7 @@ var ActionListItem = React.forwardRef(function (_a, ref) {
|
|
|
5175
5177
|
});
|
|
5176
5178
|
var isActive = !!(active === null || active === void 0 ? void 0 : active.element) && active.element === actionListItemRef.current;
|
|
5177
5179
|
var handleAction = React.useCallback(function (event) {
|
|
5178
|
-
var _a;
|
|
5180
|
+
var _a, _b;
|
|
5179
5181
|
if (event.defaultPrevented) {
|
|
5180
5182
|
return;
|
|
5181
5183
|
}
|
|
@@ -5188,7 +5190,7 @@ var ActionListItem = React.forwardRef(function (_a, ref) {
|
|
|
5188
5190
|
}
|
|
5189
5191
|
// istanbul ignore else
|
|
5190
5192
|
if (typeof onActionListAction === 'function') {
|
|
5191
|
-
onActionListAction(actionKey || ((_a = labelRef === null ||
|
|
5193
|
+
onActionListAction(actionKey || ((_b = (_a = labelRef.current) === null || _a === void 0 ? void 0 : _a.textContent) === null || _b === void 0 ? void 0 : _b.trim()) || '', event);
|
|
5192
5194
|
}
|
|
5193
5195
|
}, [onAction, onActionListAction, selectionType, actionKey]);
|
|
5194
5196
|
var listItemRole = undefined;
|
|
@@ -5212,7 +5214,7 @@ var ActionListItem = React.forwardRef(function (_a, ref) {
|
|
|
5212
5214
|
// istanbul ignore next
|
|
5213
5215
|
React.useLayoutEffect(function () {
|
|
5214
5216
|
var intersectionEntry = intersectionRef.current;
|
|
5215
|
-
if (!intersectionEntry || !isActive) {
|
|
5217
|
+
if (!intersectionEntry || !isActive || !actionListItemRef.current) {
|
|
5216
5218
|
return;
|
|
5217
5219
|
}
|
|
5218
5220
|
var rect = actionListItemRef.current.getBoundingClientRect();
|
|
@@ -5311,9 +5313,10 @@ var ActionMenu = React.forwardRef(function (_a, ref) {
|
|
|
5311
5313
|
var _e = tslib.__read(React.useState('first'), 2), focusStrategy = _e[0], setFocusStrategy = _e[1];
|
|
5312
5314
|
var triggerRef = React.useRef(null);
|
|
5313
5315
|
var actionMenuRef = useSharedRef(ref);
|
|
5314
|
-
var
|
|
5315
|
-
var
|
|
5316
|
-
var _g = tslib.__read(nextId.useId(1, 'menu'), 1),
|
|
5316
|
+
var _f = actionMenuList.props, actionListRef = _f.ref, actionListOnAction = _f.onAction;
|
|
5317
|
+
var actionMenuListRef = useSharedRef(actionListRef !== null && actionListRef !== void 0 ? actionListRef : null);
|
|
5318
|
+
var _g = tslib.__read(nextId.useId(1, 'menu-trigger'), 1), triggerId = _g[0];
|
|
5319
|
+
var _h = tslib.__read(nextId.useId(1, 'menu'), 1), menuId = _h[0];
|
|
5317
5320
|
var handleTriggerClick = React.useCallback(function (event) {
|
|
5318
5321
|
// istanbul ignore else
|
|
5319
5322
|
if (!event.defaultPrevented) {
|
|
@@ -5360,11 +5363,10 @@ var ActionMenu = React.forwardRef(function (_a, ref) {
|
|
|
5360
5363
|
if (!event.defaultPrevented) {
|
|
5361
5364
|
setOpen(false);
|
|
5362
5365
|
}
|
|
5363
|
-
|
|
5364
|
-
|
|
5365
|
-
onAction(key, event);
|
|
5366
|
+
if (typeof actionListOnAction === 'function') {
|
|
5367
|
+
actionListOnAction(key, event);
|
|
5366
5368
|
}
|
|
5367
|
-
}, [
|
|
5369
|
+
}, [actionListOnAction]);
|
|
5368
5370
|
React.useEffect(function () {
|
|
5369
5371
|
var _a, _b;
|
|
5370
5372
|
if (open) {
|
|
@@ -5425,6 +5427,189 @@ var ActionMenu = React.forwardRef(function (_a, ref) {
|
|
|
5425
5427
|
});
|
|
5426
5428
|
ActionMenu.displayName = 'ActionMenu';
|
|
5427
5429
|
|
|
5430
|
+
var TreeViewItem = function (_a) {
|
|
5431
|
+
var id = _a.id, textValue = _a.textValue, children = _a.children;
|
|
5432
|
+
var checkboxId = React.useMemo(function () { return nextId__default["default"]('tree-view-item-'); }, []);
|
|
5433
|
+
return (React__default["default"].createElement(reactAriaComponents.TreeItem, { id: id, textValue: textValue, className: "TreeView__item" },
|
|
5434
|
+
React__default["default"].createElement(reactAriaComponents.TreeItemContent, null, function (_a) {
|
|
5435
|
+
var selectionMode = _a.selectionMode, isSelected = _a.isSelected, isDisabled = _a.isDisabled;
|
|
5436
|
+
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
5437
|
+
React__default["default"].createElement(reactAriaComponents.Button, { slot: "chevron", className: "TreeView__chevron" },
|
|
5438
|
+
React__default["default"].createElement(Icon, { type: "chevron-right" })),
|
|
5439
|
+
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))));
|
|
5440
|
+
}),
|
|
5441
|
+
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))); })))));
|
|
5442
|
+
};
|
|
5443
|
+
TreeViewItem.displayName = 'TreeViewItem';
|
|
5444
|
+
|
|
5445
|
+
/** Every node id in the tree, flattened depth-first. */
|
|
5446
|
+
function collectAllKeys(nodes) {
|
|
5447
|
+
return nodes.flatMap(function (node) { return tslib.__spreadArray([
|
|
5448
|
+
node.id
|
|
5449
|
+
], tslib.__read((node.children ? collectAllKeys(node.children) : [])), false); });
|
|
5450
|
+
}
|
|
5451
|
+
/** Normalize react-aria's `Selection` ("all" | Set) into a concrete Set of keys. */
|
|
5452
|
+
function toKeySet(selection, nodes) {
|
|
5453
|
+
if (selection !== 'all') {
|
|
5454
|
+
return new Set(selection);
|
|
5455
|
+
}
|
|
5456
|
+
// "Select all" only includes selectable (non-disabled) nodes.
|
|
5457
|
+
var disabled = new Set(collectDisabledKeys(nodes));
|
|
5458
|
+
return new Set(collectAllKeys(nodes).filter(function (key) { return !disabled.has(key); }));
|
|
5459
|
+
}
|
|
5460
|
+
/** Locate a node anywhere in the tree by its id. */
|
|
5461
|
+
function findNode(nodes, key) {
|
|
5462
|
+
var e_1, _a;
|
|
5463
|
+
try {
|
|
5464
|
+
for (var nodes_1 = tslib.__values(nodes), nodes_1_1 = nodes_1.next(); !nodes_1_1.done; nodes_1_1 = nodes_1.next()) {
|
|
5465
|
+
var node = nodes_1_1.value;
|
|
5466
|
+
if (node.id === key) {
|
|
5467
|
+
return node;
|
|
5468
|
+
}
|
|
5469
|
+
if (node.children) {
|
|
5470
|
+
var found = findNode(node.children, key);
|
|
5471
|
+
if (found) {
|
|
5472
|
+
return found;
|
|
5473
|
+
}
|
|
5474
|
+
}
|
|
5475
|
+
}
|
|
5476
|
+
}
|
|
5477
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
5478
|
+
finally {
|
|
5479
|
+
try {
|
|
5480
|
+
if (nodes_1_1 && !nodes_1_1.done && (_a = nodes_1.return)) _a.call(nodes_1);
|
|
5481
|
+
}
|
|
5482
|
+
finally { if (e_1) throw e_1.error; }
|
|
5483
|
+
}
|
|
5484
|
+
return undefined;
|
|
5485
|
+
}
|
|
5486
|
+
/** All descendant ids of a node (not including the node itself). */
|
|
5487
|
+
function collectDescendantKeys(node) {
|
|
5488
|
+
if (!node.children) {
|
|
5489
|
+
return [];
|
|
5490
|
+
}
|
|
5491
|
+
return node.children.flatMap(function (child) { return tslib.__spreadArray([
|
|
5492
|
+
child.id
|
|
5493
|
+
], tslib.__read(collectDescendantKeys(child)), false); });
|
|
5494
|
+
}
|
|
5495
|
+
/** Ids of all disabled nodes (rendered disabled / non-selectable). */
|
|
5496
|
+
function collectDisabledKeys(nodes) {
|
|
5497
|
+
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); });
|
|
5498
|
+
}
|
|
5499
|
+
/**
|
|
5500
|
+
* Toggle a single node, applying cascade per the options (multiple mode only):
|
|
5501
|
+
* - selecting + `cascadeSelect`: also selects all (non-disabled) descendants.
|
|
5502
|
+
* - deselecting + `cascadeDeselect`: also deselects all descendants.
|
|
5503
|
+
*
|
|
5504
|
+
* In `single` mode only the clicked node is selected (clicking it again clears
|
|
5505
|
+
* it); cascade does not apply.
|
|
5506
|
+
*/
|
|
5507
|
+
function toggleSelection(nodes, previous, key, selectionMode, _a) {
|
|
5508
|
+
var cascadeSelect = _a.cascadeSelect, cascadeDeselect = _a.cascadeDeselect;
|
|
5509
|
+
if (selectionMode === 'single') {
|
|
5510
|
+
var result_1 = new Set();
|
|
5511
|
+
if (!previous.has(key)) {
|
|
5512
|
+
result_1.add(key);
|
|
5513
|
+
}
|
|
5514
|
+
return result_1;
|
|
5515
|
+
}
|
|
5516
|
+
var result = new Set(previous);
|
|
5517
|
+
var node = findNode(nodes, key);
|
|
5518
|
+
var descendants = node ? collectDescendantKeys(node) : [];
|
|
5519
|
+
var disabled = new Set(collectDisabledKeys(nodes));
|
|
5520
|
+
if (!previous.has(key)) {
|
|
5521
|
+
result.add(key);
|
|
5522
|
+
if (cascadeSelect) {
|
|
5523
|
+
descendants.forEach(function (k) {
|
|
5524
|
+
if (!disabled.has(k)) {
|
|
5525
|
+
result.add(k);
|
|
5526
|
+
}
|
|
5527
|
+
});
|
|
5528
|
+
}
|
|
5529
|
+
}
|
|
5530
|
+
else {
|
|
5531
|
+
result.delete(key);
|
|
5532
|
+
if (cascadeDeselect) {
|
|
5533
|
+
descendants.forEach(function (k) { return result.delete(k); });
|
|
5534
|
+
}
|
|
5535
|
+
}
|
|
5536
|
+
return result;
|
|
5537
|
+
}
|
|
5538
|
+
/**
|
|
5539
|
+
* Apply react-aria's proposed selection while enforcing cascade. Each key
|
|
5540
|
+
* react-aria added cascades to its descendants when `cascadeSelect` is set; each
|
|
5541
|
+
* key it removed cascades when `cascadeDeselect` is set. In non-multiple modes
|
|
5542
|
+
* (or with both toggles off) the proposed selection is used as-is.
|
|
5543
|
+
*/
|
|
5544
|
+
function applyCascade(nodes, previous, next, selectionMode, _a) {
|
|
5545
|
+
var cascadeSelect = _a.cascadeSelect, cascadeDeselect = _a.cascadeDeselect;
|
|
5546
|
+
if (selectionMode !== 'multiple' || (!cascadeSelect && !cascadeDeselect)) {
|
|
5547
|
+
return next;
|
|
5548
|
+
}
|
|
5549
|
+
var result = new Set(previous);
|
|
5550
|
+
var added = tslib.__spreadArray([], tslib.__read(next), false).filter(function (key) { return !previous.has(key); });
|
|
5551
|
+
var removed = tslib.__spreadArray([], tslib.__read(previous), false).filter(function (key) { return !next.has(key); });
|
|
5552
|
+
var disabled = new Set(collectDisabledKeys(nodes));
|
|
5553
|
+
added.forEach(function (key) {
|
|
5554
|
+
result.add(key);
|
|
5555
|
+
if (cascadeSelect) {
|
|
5556
|
+
var node = findNode(nodes, key);
|
|
5557
|
+
(node ? collectDescendantKeys(node) : []).forEach(function (k) {
|
|
5558
|
+
if (!disabled.has(k)) {
|
|
5559
|
+
result.add(k);
|
|
5560
|
+
}
|
|
5561
|
+
});
|
|
5562
|
+
}
|
|
5563
|
+
});
|
|
5564
|
+
removed.forEach(function (key) {
|
|
5565
|
+
result.delete(key);
|
|
5566
|
+
if (cascadeDeselect) {
|
|
5567
|
+
var node = findNode(nodes, key);
|
|
5568
|
+
(node ? collectDescendantKeys(node) : []).forEach(function (k) {
|
|
5569
|
+
return result.delete(k);
|
|
5570
|
+
});
|
|
5571
|
+
}
|
|
5572
|
+
});
|
|
5573
|
+
return result;
|
|
5574
|
+
}
|
|
5575
|
+
|
|
5576
|
+
var TreeView = React.forwardRef(function (_a, ref) {
|
|
5577
|
+
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"]);
|
|
5578
|
+
var _e = tslib.__read(React.useState(new Set()), 2), selectedKeys = _e[0], setSelectedKeys = _e[1];
|
|
5579
|
+
var cascade = { cascadeSelect: cascadeSelect, cascadeDeselect: cascadeDeselect };
|
|
5580
|
+
// Cascade only applies to multiple selection.
|
|
5581
|
+
var isCascade = selectionMode === 'multiple' && (cascadeSelect || cascadeDeselect);
|
|
5582
|
+
// Selection driven by react-aria (row/checkbox press, keyboard). When
|
|
5583
|
+
// cascading, reconcile the proposed change; otherwise store react-aria's
|
|
5584
|
+
// selection as-is so the `'all'` sentinel (Ctrl+A) is preserved.
|
|
5585
|
+
var handleSelectionChange = function (selection) {
|
|
5586
|
+
setSelectedKeys(function (prev) {
|
|
5587
|
+
return isCascade
|
|
5588
|
+
? applyCascade(items, toKeySet(prev, items), toKeySet(selection, items), selectionMode, cascade)
|
|
5589
|
+
: selection;
|
|
5590
|
+
});
|
|
5591
|
+
};
|
|
5592
|
+
// When `onAction` is set, react-aria treats a row press as an action rather
|
|
5593
|
+
// than a selection, so we toggle selection here ourselves.
|
|
5594
|
+
var handleAction = function (key) {
|
|
5595
|
+
if (selectionMode !== 'none') {
|
|
5596
|
+
setSelectedKeys(function (prev) {
|
|
5597
|
+
return toggleSelection(items, toKeySet(prev, items), key, selectionMode, cascade);
|
|
5598
|
+
});
|
|
5599
|
+
}
|
|
5600
|
+
onAction === null || onAction === void 0 ? void 0 : onAction(key);
|
|
5601
|
+
};
|
|
5602
|
+
// Disabled nodes are non-selectable; react-aria disables them via disabledKeys.
|
|
5603
|
+
var disabledKeys = React.useMemo(function () { return collectDisabledKeys(items); }, [items]);
|
|
5604
|
+
// Cascade requires controlling selection. Without it, preserve the original
|
|
5605
|
+
// behavior: selection is only controlled when an `onAction` handler is set.
|
|
5606
|
+
var selectionProps = selectionMode !== 'none' && (isCascade || onAction)
|
|
5607
|
+
? { selectedKeys: selectedKeys, onSelectionChange: handleSelectionChange }
|
|
5608
|
+
: {};
|
|
5609
|
+
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))); })));
|
|
5610
|
+
});
|
|
5611
|
+
TreeView.displayName = 'TreeView';
|
|
5612
|
+
|
|
5428
5613
|
var LIGHT_THEME_CLASS = 'cauldron--theme-light';
|
|
5429
5614
|
var DARK_THEME_CLASS = 'cauldron--theme-dark';
|
|
5430
5615
|
var ThemeContext = React.createContext({
|
|
@@ -5620,6 +5805,7 @@ exports.TopBar = TopBar;
|
|
|
5620
5805
|
exports.TopBarItem = MenuItem;
|
|
5621
5806
|
exports.TopBarMenu = TopBarMenu;
|
|
5622
5807
|
exports.TopBarTrigger = TopBarTrigger;
|
|
5808
|
+
exports.TreeView = TreeView;
|
|
5623
5809
|
exports.TwoColumnPanel = TwoColumnPanel;
|
|
5624
5810
|
exports.Workspace = Workspace;
|
|
5625
5811
|
exports.focusableSelector = focusableSelector;
|