primereact
Version:
PrimeReact is an open source UI library for React featuring a rich set of 90+ components, a theme designer, various theme alternatives such as Material, Bootstrap, Tailwind, premium templates and professional support. In addition, it integrates with Prime
1,102 lines (1,075 loc) • 45.9 kB
JavaScript
this.primereact = this.primereact || {};
this.primereact.treeselect = (function (exports, React, PrimeReact, componentbase, hooks, chevrondown, search, times, overlayservice, ripple, tooltip, tree, utils, csstransition, portal) {
'use strict';
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
function _interopNamespace(e) {
if (e && e.__esModule) return e;
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function () { return e[k]; }
});
}
});
}
n["default"] = e;
return Object.freeze(n);
}
var React__namespace = /*#__PURE__*/_interopNamespace(React);
var PrimeReact__default = /*#__PURE__*/_interopDefaultLegacy(PrimeReact);
function _extends() {
return _extends = Object.assign ? Object.assign.bind() : function (n) {
for (var e = 1; e < arguments.length; e++) {
var t = arguments[e];
for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
}
return n;
}, _extends.apply(null, arguments);
}
function _arrayLikeToArray$1(r, a) {
(null == a || a > r.length) && (a = r.length);
for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
return n;
}
function _arrayWithoutHoles(r) {
if (Array.isArray(r)) return _arrayLikeToArray$1(r);
}
function _iterableToArray(r) {
if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r);
}
function _unsupportedIterableToArray$1(r, a) {
if (r) {
if ("string" == typeof r) return _arrayLikeToArray$1(r, a);
var t = {}.toString.call(r).slice(8, -1);
return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$1(r, a) : void 0;
}
}
function _nonIterableSpread() {
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
function _toConsumableArray(r) {
return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray$1(r) || _nonIterableSpread();
}
function _typeof(o) {
"@babel/helpers - typeof";
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
return typeof o;
} : function (o) {
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
}, _typeof(o);
}
function toPrimitive(t, r) {
if ("object" != _typeof(t) || !t) return t;
var e = t[Symbol.toPrimitive];
if (void 0 !== e) {
var i = e.call(t, r || "default");
if ("object" != _typeof(i)) return i;
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return ("string" === r ? String : Number)(t);
}
function toPropertyKey(t) {
var i = toPrimitive(t, "string");
return "symbol" == _typeof(i) ? i : i + "";
}
function _defineProperty(e, r, t) {
return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
value: t,
enumerable: !0,
configurable: !0,
writable: !0
}) : e[r] = t, e;
}
function _arrayWithHoles(r) {
if (Array.isArray(r)) return r;
}
function _iterableToArrayLimit(r, l) {
var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
if (null != t) {
var e,
n,
i,
u,
a = [],
f = !0,
o = !1;
try {
if (i = (t = t.call(r)).next, 0 === l) {
if (Object(t) !== t) return;
f = !1;
} else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
} catch (r) {
o = !0, n = r;
} finally {
try {
if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return;
} finally {
if (o) throw n;
}
}
return a;
}
}
function _nonIterableRest() {
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
function _slicedToArray(r, e) {
return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray$1(r, e) || _nonIterableRest();
}
var classes = {
root: function root(_ref) {
var props = _ref.props,
focusedState = _ref.focusedState,
context = _ref.context,
overlayVisibleState = _ref.overlayVisibleState,
isValueEmpty = _ref.isValueEmpty;
return utils.classNames('p-treeselect p-component p-inputwrapper', {
'p-treeselect-chip': props.display === 'chip',
'p-treeselect-clearable': props.showClear && !props.disabled,
'p-disabled': props.disabled,
'p-invalid': props.invalid,
'p-focus': focusedState,
'p-variant-filled': props.variant ? props.variant === 'filled' : context && context.inputStyle === 'filled',
'p-inputwrapper-filled': !isValueEmpty,
'p-inputwrapper-focus': focusedState || overlayVisibleState
});
},
label: function label(_ref2) {
var props = _ref2.props,
isValueEmpty = _ref2.isValueEmpty,
getLabel = _ref2.getLabel;
return utils.classNames('p-treeselect-label', {
'p-placeholder': getLabel() === props.placeholder,
'p-treeselect-label-empty': !props.placeholder && isValueEmpty
});
},
panel: function panel(_ref3) {
var props = _ref3.panelProps,
context = _ref3.context;
return utils.classNames('p-treeselect-panel p-component', props.panelClassName, {
'p-input-filled': context && context.inputStyle === 'filled' || PrimeReact__default["default"].inputStyle === 'filled',
'p-ripple-disabled': context && context.ripple === false || PrimeReact__default["default"].ripple === false
});
},
labelContainer: 'p-treeselect-label-container',
tokenLabel: 'p-treeselect-token-label',
token: 'p-treeselect-token',
trigger: 'p-treeselect-trigger',
triggerIcon: 'p-treeselect-trigger-icon p-clickable',
emptyMessage: 'p-treeselect-empty-message',
filterContainer: 'p-treeselect-filter-container',
filter: 'p-treeselect-filter p-inputtext p-component',
filterIcon: 'p-treeselect-filter-icon',
closeIcon: 'p-treeselect-close-icon',
clearIcon: 'p-treeselect-clear-icon p-clickable',
closeButton: 'p-treeselect-close p-link',
header: 'p-treeselect-header',
wrapper: 'p-treeselect-items-wrapper',
transition: 'p-connected-overlay'
};
var styles = "\n@layer primereact {\n .p-treeselect {\n display: inline-flex;\n cursor: pointer;\n position: relative;\n user-select: none;\n }\n\n .p-treeselect-trigger {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n }\n\n .p-treeselect-label-container {\n overflow: hidden;\n flex: 1 1 auto;\n cursor: pointer;\n }\n\n .p-treeselect-label {\n display: block;\n white-space: nowrap;\n cursor: pointer;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .p-treeselect-label-empty {\n overflow: hidden;\n visibility: hidden;\n }\n\n .p-treeselect-token {\n cursor: default;\n display: inline-flex;\n align-items: center;\n flex: 0 0 auto;\n }\n\n .p-treeselect .p-treeselect-panel {\n min-width: 100%;\n }\n\n .p-treeselect-items-wrapper {\n overflow: auto;\n }\n\n .p-treeselect-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n\n .p-treeselect-filter-container {\n position: relative;\n flex: 1 1 auto;\n }\n\n .p-treeselect-filter-icon {\n position: absolute;\n top: 50%;\n margin-top: -.5rem;\n }\n\n .p-treeselect-filter-container .p-inputtext {\n width: 100%;\n }\n\n .p-treeselect-close {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n overflow: hidden;\n position: relative;\n margin-left: auto;\n }\n\n .p-treeselect-clear-icon {\n position: absolute;\n top: 50%;\n margin-top: -.5rem;\n }\n\n .p-fluid .p-treeselect {\n display: flex;\n}\n}\n";
var TreeSelectBase = componentbase.ComponentBase.extend({
defaultProps: {
__TYPE: 'TreeSelect',
appendTo: null,
ariaLabel: null,
ariaLabelledBy: null,
className: null,
closeIcon: null,
clearIcon: null,
disabled: false,
display: 'comma',
dropdownIcon: null,
emptyMessage: null,
expandedKeys: null,
filter: false,
filterBy: 'label',
filterDelay: 300,
filterIcon: null,
filterInputAutoFocus: true,
filterLocale: undefined,
filterMode: 'lenient',
filterPlaceholder: null,
filterTemplate: null,
filterValue: null,
inputId: null,
inputRef: null,
invalid: false,
variant: null,
metaKeySelection: false,
name: null,
nodeTemplate: null,
onChange: null,
onFocus: null,
onBlur: null,
onFilterValueChange: null,
onHide: null,
onNodeCollapse: null,
onNodeExpand: null,
onNodeSelect: null,
onNodeUnselect: null,
onShow: null,
options: null,
panelClassName: null,
panelFooterTemplate: null,
panelHeaderTemplate: null,
panelStyle: null,
placeholder: null,
resetFilterOnHide: false,
scrollHeight: '400px',
selectionMode: 'single',
showClear: false,
style: null,
tabIndex: null,
togglerTemplate: null,
transitionOptions: null,
value: null,
valueTemplate: null,
children: undefined
},
css: {
classes: classes,
styles: styles
}
});
function ownKeys$1(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread$1(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
var TreeSelectPanel = /*#__PURE__*/React__namespace.forwardRef(function (props, ref) {
var mergeProps = hooks.useMergeProps();
var context = React__namespace.useContext(PrimeReact.PrimeReactContext);
var ptm = props.ptm,
cx = props.cx;
var getPTOptions = function getPTOptions(key, options) {
return ptm(key, _objectSpread$1({
hostName: props.hostName
}, options));
};
var onKeyDown = function onKeyDown(event) {
if (event.key === 'Escape') {
event.preventDefault();
props.hide();
}
};
var createElement = function createElement() {
var wrapperStyle = {
maxHeight: props.scrollHeight || 'auto'
};
var panelProps = mergeProps({
className: cx('panel', {
panelProps: props,
context: context
}),
style: props.panelStyle,
onKeyDown: onKeyDown,
onClick: props.onClick
}, getPTOptions('panel'));
var wrapperProps = mergeProps({
className: cx('wrapper'),
style: wrapperStyle
}, getPTOptions('wrapper'));
var transitionProps = mergeProps({
classNames: cx('transition'),
"in": props["in"],
timeout: {
enter: 120,
exit: 100
},
options: props.transitionOptions,
unmountOnExit: true,
onEnter: props.onEnter,
onEntered: props.onEntered,
onExit: props.onExit,
onExited: props.onExited
}, getPTOptions('transition'));
return /*#__PURE__*/React__namespace.createElement(csstransition.CSSTransition, _extends({
nodeRef: ref
}, transitionProps), /*#__PURE__*/React__namespace.createElement("div", _extends({
ref: ref
}, panelProps), props.firstHiddenFocusableElementOnOverlay, props.header, /*#__PURE__*/React__namespace.createElement("div", wrapperProps, props.children), props.footer, props.lastHiddenFocusableElementOnOverlay));
};
var element = createElement();
return /*#__PURE__*/React__namespace.createElement(portal.Portal, {
element: element,
appendTo: props.appendTo
});
});
TreeSelectPanel.displayName = 'TreeSelectPanel';
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
var TreeSelect = /*#__PURE__*/React__namespace.memo(/*#__PURE__*/React__namespace.forwardRef(function (inProps, ref) {
var mergeProps = hooks.useMergeProps();
var context = React__namespace.useContext(PrimeReact.PrimeReactContext);
var props = TreeSelectBase.getProps(inProps, context);
var _React$useState = React__namespace.useState(false),
_React$useState2 = _slicedToArray(_React$useState, 2),
focusedState = _React$useState2[0],
setFocusedState = _React$useState2[1];
var _React$useState3 = React__namespace.useState(false),
_React$useState4 = _slicedToArray(_React$useState3, 2),
overlayVisibleState = _React$useState4[0],
setOverlayVisibleState = _React$useState4[1];
var _React$useState5 = React__namespace.useState(props.expandedKeys),
_React$useState6 = _slicedToArray(_React$useState5, 2),
expandedKeysState = _React$useState6[0],
setExpandedKeysState = _React$useState6[1];
var _useDebounce = hooks.useDebounce('', props.filterDelay || 0),
_useDebounce2 = _slicedToArray(_useDebounce, 3),
filterValue = _useDebounce2[0],
filterValueState = _useDebounce2[1],
setFilterValueState = _useDebounce2[2];
var elementRef = React__namespace.useRef(null);
var overlayRef = React__namespace.useRef(null);
var filterInputRef = React__namespace.useRef(null);
var focusInputRef = React__namespace.useRef(props.inputRef);
var triggerRef = React__namespace.useRef(null);
var selfChange = React__namespace.useRef(null);
var treeRef = React__namespace.useRef(null);
var firstHiddenFocusableElementOnOverlay = React__namespace.useRef(null);
var lastHiddenFocusableElementOnOverlay = React__namespace.useRef(null);
var focusToTree = React__namespace.useRef(false);
var listId = React__namespace.useRef('');
var expandedKeys = props.onToggle ? props.expandedKeys : expandedKeysState;
var filteredValue = props.onFilterValueChange ? props.filterValue : filterValueState;
var isValueEmpty = utils.ObjectUtils.isEmpty(props.value);
var isSingleSelectionMode = props.selectionMode === 'single';
var isCheckboxSelectionMode = props.selectionMode === 'checkbox';
var hasTooltip = utils.ObjectUtils.isNotEmpty(props.tooltip);
var metaData = {
props: props,
state: {
focused: focusedState,
overlayVisible: overlayVisibleState,
expandedKeys: expandedKeys,
filterValue: filteredValue
}
};
var _TreeSelectBase$setMe = TreeSelectBase.setMetaData(metaData),
ptm = _TreeSelectBase$setMe.ptm,
cx = _TreeSelectBase$setMe.cx,
isUnstyled = _TreeSelectBase$setMe.isUnstyled;
componentbase.useHandleStyle(TreeSelectBase.css.styles, isUnstyled, {
name: 'treeselect'
});
var filterOptions = {
filter: function filter(e) {
return onFilterInputChange(e);
},
reset: function reset() {
return resetFilter();
}
};
var _useOverlayListener = hooks.useOverlayListener({
target: elementRef,
overlay: overlayRef,
listener: function listener(event, _ref) {
var valid = _ref.valid,
type = _ref.type;
if (valid) {
if (type === 'outside' || context.hideOverlaysOnDocumentScrolling) {
hide();
} else if (!utils.DomHandler.isDocument(event.target)) {
alignOverlay();
}
}
},
when: overlayVisibleState
}),
_useOverlayListener2 = _slicedToArray(_useOverlayListener, 2),
bindOverlayListener = _useOverlayListener2[0],
unbindOverlayListener = _useOverlayListener2[1];
var getLabel = function getLabel() {
return selectedNodes.length ? selectedNodes.map(function (node) {
return node.label;
}).join(', ') : props.placeholder;
};
var show = function show() {
setOverlayVisibleState(true);
};
var hide = function hide() {
setOverlayVisibleState(false);
focusInputRef.current && utils.DomHandler.focus(focusInputRef.current);
};
var onInputFocus = function onInputFocus() {
setFocusedState(true);
props.onFocus && props.onFocus();
};
var onInputBlur = function onInputBlur() {
setFocusedState(false);
props.onBlur && props.onBlur();
};
var onClick = function onClick(event) {
if (!props.disabled && (!overlayRef.current || !overlayRef.current.contains(event.target)) && !utils.DomHandler.isAttributeEquals(event.target, 'data-pc-section', 'closebutton')) {
utils.DomHandler.focus(focusInputRef.current);
overlayVisibleState ? hide() : show();
}
};
var onSelectionChange = function onSelectionChange(event) {
if (props.onChange) {
selfChange.current = true;
props.onChange({
originalEvent: event.originalEvent,
value: event.value,
stopPropagation: function stopPropagation() {
event.originalEvent.stopPropagation();
},
preventDefault: function preventDefault() {
event.originalEvent.preventDefault();
},
target: {
name: props.name,
id: props.id,
value: event.value
}
});
}
};
var clear = function clear(event) {
if (props.onChange) {
selfChange.current = true;
props.onChange({
originalEvent: event,
value: undefined,
stopPropagation: function stopPropagation() {
event === null || event === void 0 || event.stopPropagation();
},
preventDefault: function preventDefault() {
event === null || event === void 0 || event.preventDefault();
},
target: {
name: props.name,
id: props.id,
value: undefined
}
});
}
};
var onClearIconKeyDown = function onClearIconKeyDown(event) {
if (event.key === 'Enter' || event.code === 'Space') {
clear(event);
event.preventDefault();
}
};
var onNodeSelect = function onNodeSelect(node) {
props.onNodeSelect && props.onNodeSelect(node);
isSingleSelectionMode && hide();
};
var onNodeUnselect = function onNodeUnselect(node) {
props.onNodeUnselect && props.onNodeUnselect(node);
isCheckboxSelectionMode && node.originalEvent.stopPropagation();
};
var onNodeToggle = function onNodeToggle(e) {
if (props.onToggle) {
props.onToggle(e);
} else {
setExpandedKeysState(e.value);
}
};
var onFilterValueChange = function onFilterValueChange(e) {
setFilterValueState(e.value);
};
var onOverlayClick = function onOverlayClick(event) {
overlayservice.OverlayService.emit('overlay-click', {
originalEvent: event,
target: elementRef.current
});
};
var onFirstHiddenFocus = function onFirstHiddenFocus(event) {
var focusableEl = event.relatedTarget === focusInputRef.current ? utils.DomHandler.getFirstFocusableElement(overlayRef.current, ':not([data-p-hidden-focusable="true"])') : focusInputRef.current;
utils.DomHandler.focus(focusableEl);
};
var onLastHiddenFocus = function onLastHiddenFocus(event) {
var focusableEl = event.relatedTarget === focusInputRef.current ? utils.DomHandler.getLastFocusableElement(overlayRef.current, ':not([data-p-hidden-focusable="true"])') : focusInputRef.current;
utils.DomHandler.focus(focusableEl);
};
var onHeaderElementKeyDown = function onHeaderElementKeyDown(event, isHideButton) {
switch (event.code) {
case 'ArrowDown':
event.preventDefault();
setFocusToFocusableFirstNode();
break;
case 'ArrowUp':
event.preventDefault();
focusInputRef.current && utils.DomHandler.focus(focusInputRef.current);
break;
case 'Enter':
case 'NumpadEnter':
event.preventDefault();
if (isHideButton) {
hide();
}
break;
case 'Escape':
onEscapeKey(event);
break;
}
};
var onKeyDown = function onKeyDown(event) {
switch (event.code) {
case 'ArrowDown':
onArrowDownKey(event);
break;
case 'Space':
case 'Enter':
case 'NumpadEnter':
onEnterKey(event);
break;
case 'Escape':
onEscapeKey(event);
break;
case 'Tab':
if (overlayVisibleState) {
event.preventDefault();
if (event.shiftKey) {
setFocusToFocusableFirstNode();
} else {
onTabKey(event);
}
}
break;
}
};
var onArrowDownKey = function onArrowDownKey(event) {
if (overlayVisibleState) {
return;
}
focusToTree.current = true;
show();
event.preventDefault();
};
var onEnterKey = function onEnterKey(event) {
if (overlayVisibleState) {
hide();
} else {
onArrowDownKey(event);
}
event.preventDefault();
};
var onEscapeKey = function onEscapeKey(event) {
if (overlayVisibleState) {
hide();
event.preventDefault();
}
};
var onTabKey = function onTabKey(event) {
var pressedInInputText = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
if (!pressedInInputText) {
if (overlayVisibleState && hasFocusableElements()) {
utils.DomHandler.focus(firstHiddenFocusableElementOnOverlay.current);
event.preventDefault();
}
}
};
var hasFocusableElements = function hasFocusableElements() {
return utils.DomHandler.getFocusableElements(overlayRef.current, ':not([data-p-hidden-focusable="true"])').length > 0;
};
var onFilterInputChange = function onFilterInputChange(event) {
var value = event.target.value;
if (props.onFilterValueChange) {
props.onFilterValueChange({
originalEvent: event,
value: value
});
} else {
setFilterValueState(value);
}
};
var resetFilter = function resetFilter() {
setFilterValueState('');
};
var onOverlayEnter = function onOverlayEnter() {
utils.ZIndexUtils.set('overlay', overlayRef.current, context && context.autoZIndex || PrimeReact__default["default"].autoZIndex, context && context.zIndex.overlay || PrimeReact__default["default"].zIndex.overlay);
utils.DomHandler.addStyles(overlayRef.current, {
position: 'absolute',
top: '0',
left: '0'
});
setFocusToFocusableFirstNode();
alignOverlay();
scrollInView();
};
var onOverlayEntered = function onOverlayEntered() {
bindOverlayListener();
if (props.filter && props.filterInputAutoFocus) {
utils.DomHandler.focus(filterInputRef.current, props.filterInputAutoFocus);
}
props.onShow && props.onShow();
};
var onOverlayExit = function onOverlayExit() {
unbindOverlayListener();
};
var onOverlayExited = function onOverlayExited() {
if (props.filter && props.resetFilterOnHide) {
resetFilter();
}
utils.ZIndexUtils.clear(overlayRef.current);
props.onHide && props.onHide();
};
var alignOverlay = function alignOverlay() {
utils.DomHandler.alignOverlay(overlayRef.current, triggerRef.current.parentElement, props.appendTo || context && context.appendTo || PrimeReact__default["default"].appendTo);
};
var scrollInView = function scrollInView() {
var highlightItem = utils.DomHandler.findSingle(overlayRef.current, '[data-pc-section="content"][data-p-highlight="true"]');
if (highlightItem && highlightItem.scrollIntoView) {
highlightItem.scrollIntoView({
block: 'nearest',
inline: 'start'
});
}
};
var _findSelectedNodes = function findSelectedNodes(node, keys, selectedNodes) {
if (node) {
if (isSelected(node, keys)) {
selectedNodes.push(node);
delete keys[node.key];
}
if (Object.keys(keys).length && node.children) {
var _iterator = _createForOfIteratorHelper(node.children),
_step;
try {
for (_iterator.s(); !(_step = _iterator.n()).done;) {
var childNode = _step.value;
_findSelectedNodes(childNode, keys, selectedNodes);
}
} catch (err) {
_iterator.e(err);
} finally {
_iterator.f();
}
}
} else {
var _iterator2 = _createForOfIteratorHelper(props.options),
_step2;
try {
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
var _childNode = _step2.value;
_findSelectedNodes(_childNode, keys, selectedNodes);
}
} catch (err) {
_iterator2.e(err);
} finally {
_iterator2.f();
}
}
};
var isSelected = function isSelected(node, keys) {
return isCheckboxSelectionMode ? keys[node.key] && keys[node.key].checked : keys[node.key];
};
var updateTreeState = function updateTreeState() {
var keys = isSingleSelectionMode ? _defineProperty({}, "".concat(props.value), true) : _objectSpread({}, props.value);
setExpandedKeysState({});
if (keys && props.options) {
_updateTreeBranchState(null, null, keys);
}
};
var setFocusToFocusableFirstNode = function setFocusToFocusableFirstNode() {
var _treeRef$current;
var treeNodeEl = utils.DomHandler.find((_treeRef$current = treeRef.current) === null || _treeRef$current === void 0 ? void 0 : _treeRef$current.getElement(), '[data-pc-section="node"]');
var focusedElement = _toConsumableArray(treeNodeEl).find(function (item) {
return item.getAttribute('tabindex') === '0';
});
utils.DomHandler.focus(focusedElement);
};
var _updateTreeBranchState = function updateTreeBranchState(node, path, keys) {
if (node) {
if (isSelected(node, keys)) {
expandPath(path);
delete keys[node.key];
}
if (Object.keys(keys).length && node.children) {
var _iterator3 = _createForOfIteratorHelper(node.children),
_step3;
try {
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
var childNode = _step3.value;
path.push(node.key);
_updateTreeBranchState(childNode, path, keys);
}
} catch (err) {
_iterator3.e(err);
} finally {
_iterator3.f();
}
}
} else {
var _iterator4 = _createForOfIteratorHelper(props.options),
_step4;
try {
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
var _childNode2 = _step4.value;
_updateTreeBranchState(_childNode2, [], keys);
}
} catch (err) {
_iterator4.e(err);
} finally {
_iterator4.f();
}
}
};
var expandPath = function expandPath(path) {
if (path.length > 0) {
var _expandedKeys = _objectSpread({}, expandedKeysState || {});
var _iterator5 = _createForOfIteratorHelper(path),
_step5;
try {
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
var key = _step5.value;
_expandedKeys[key] = true;
}
} catch (err) {
_iterator5.e(err);
} finally {
_iterator5.f();
}
setExpandedKeysState(_expandedKeys);
}
};
var getSelectedNodes = function getSelectedNodes() {
var selectedNodes = [];
if (utils.ObjectUtils.isNotEmpty(props.value) && props.options) {
var keys = isSingleSelectionMode ? _defineProperty({}, "".concat(props.value), true) : _objectSpread({}, props.value);
_findSelectedNodes(null, keys, selectedNodes);
}
return selectedNodes;
};
React__namespace.useImperativeHandle(ref, function () {
return {
props: props,
clear: clear,
show: show,
hide: hide,
focus: function focus() {
return utils.DomHandler.focus(focusInputRef.current);
},
getElement: function getElement() {
return elementRef.current;
}
};
});
React__namespace.useEffect(function () {
utils.ObjectUtils.combinedRefs(focusInputRef, props.inputRef);
}, [focusInputRef, props.inputRef]);
hooks.useMountEffect(function () {
updateTreeState();
listId.current = utils.UniqueComponentId() + '_list';
if (props.autoFocus) {
utils.DomHandler.focus(focusInputRef.current, props.autoFocus);
}
alignOverlay();
});
hooks.useUpdateEffect(function () {
if (overlayVisibleState && props.filter) {
alignOverlay();
}
});
hooks.useUpdateEffect(function () {
updateTreeState();
}, [props.options]);
hooks.useUpdateEffect(function () {
if (focusToTree.current && overlayVisibleState) {
focusToTree.current = false;
setFocusToFocusableFirstNode();
}
}, [overlayVisibleState]);
hooks.useUpdateEffect(function () {
if (overlayVisibleState && expandedKeysState) {
alignOverlay();
}
}, [expandedKeysState]);
hooks.useUpdateEffect(function () {
if (overlayVisibleState) {
if (!selfChange.current) {
updateTreeState();
}
selfChange.current = false;
}
}, [props.value]);
hooks.useUnmountEffect(function () {
utils.ZIndexUtils.clear(overlayRef.current);
});
var createKeyboardHelper = function createKeyboardHelper() {
var hiddenInputWrapperProps = mergeProps({
className: 'p-hidden-accessible'
}, ptm('hiddenInputWrapper'));
var hiddenInputProps = mergeProps(_objectSpread({
ref: focusInputRef,
role: 'listbox',
id: props.inputId,
type: 'text',
'aria-expanded': overlayVisibleState,
'aria-label': props.ariaLabel,
'aria-labelledby': props.ariaLabelledBy,
'aria-haspopup': 'tree',
'aria-controls': listId.current,
onFocus: onInputFocus,
onBlur: onInputBlur,
onKeyDown: onKeyDown,
disabled: props.disabled,
tabIndex: props.tabIndex
}, ariaProps), ptm('hiddenInput'));
return /*#__PURE__*/React__namespace.createElement("div", hiddenInputWrapperProps, /*#__PURE__*/React__namespace.createElement("input", _extends({}, hiddenInputProps, {
readOnly: true
})));
};
var createLabel = function createLabel() {
var tokenProps = mergeProps({
className: cx('token')
}, ptm('token'));
var tokenLabelProps = mergeProps({
className: cx('tokenLabel')
}, ptm('tokenLabel'));
var labelContainerProps = mergeProps({
className: cx('labelContainer')
}, ptm('labelContainer'));
var labelProps = mergeProps({
className: cx('label', {
isValueEmpty: isValueEmpty,
getLabel: getLabel
})
}, ptm('label'));
var content = null;
if (props.valueTemplate) {
content = utils.ObjectUtils.getJSXElement(props.valueTemplate, selectedNodes, props);
} else if (props.display === 'comma') {
content = getLabel() || 'empty';
} else if (props.display === 'chip') {
content = /*#__PURE__*/React__namespace.createElement(React__namespace.Fragment, null, selectedNodes && selectedNodes.map(function (node, index) {
return /*#__PURE__*/React__namespace.createElement("div", _extends({}, tokenProps, {
key: "".concat(node.key, "_").concat(index)
}), /*#__PURE__*/React__namespace.createElement("span", tokenLabelProps, node.label));
}), isValueEmpty && (props.placeholder || 'empty'));
}
return /*#__PURE__*/React__namespace.createElement("div", labelContainerProps, /*#__PURE__*/React__namespace.createElement("div", labelProps, content));
};
var createDropdownIcon = function createDropdownIcon() {
var triggerProps = mergeProps({
ref: triggerRef,
className: cx('trigger'),
role: 'button',
'aria-haspopup': 'tree',
'aria-expanded': overlayVisibleState
}, ptm('trigger'));
var triggerIconProps = mergeProps({
className: cx('triggerIcon')
}, ptm('triggerIcon'));
var icon = props.dropdownIcon || /*#__PURE__*/React__namespace.createElement(chevrondown.ChevronDownIcon, triggerIconProps);
var dropdownIcon = utils.IconUtils.getJSXIcon(icon, _objectSpread({}, triggerIconProps), {
props: props
});
return /*#__PURE__*/React__namespace.createElement("div", triggerProps, dropdownIcon);
};
var createClearIcon = function createClearIcon() {
if (props.value != null && props.showClear && !props.disabled) {
var clearIconProps = mergeProps({
className: cx('clearIcon'),
onPointerUp: clear,
tabIndex: props.tabIndex || '0',
onKeyDown: onClearIconKeyDown,
'aria-label': PrimeReact.localeOption('clear')
}, ptm('clearIcon'));
var icon = props.clearIcon || /*#__PURE__*/React__namespace.createElement(times.TimesIcon, clearIconProps);
return utils.IconUtils.getJSXIcon(icon, _objectSpread({}, clearIconProps), {
props: props
});
}
return null;
};
var createContent = function createContent() {
return /*#__PURE__*/React__namespace.createElement(tree.Tree, {
ref: treeRef,
id: listId.current,
emptyMessage: props.emptyMessage,
expandedKeys: expandedKeys,
filter: props.filter,
filterBy: props.filterBy,
filterDelay: props.filterDelay,
filterLocale: props.filterLocale,
filterMode: props.filterMode,
filterPlaceholder: props.filterPlaceholder,
filterValue: filteredValue,
metaKeySelection: props.metaKeySelection,
nodeTemplate: props.nodeTemplate,
onCollapse: props.onNodeCollapse,
onExpand: props.onNodeExpand,
onFilterValueChange: onFilterValueChange,
onSelect: onNodeSelect,
onSelectionChange: onSelectionChange,
onToggle: onNodeToggle,
onUnselect: onNodeUnselect,
selectionKeys: props.value,
selectionMode: props.selectionMode,
showHeader: false,
togglerTemplate: props.togglerTemplate,
value: props.options,
pt: ptm('tree'),
__parentMetadata: {
parent: metaData
}
});
};
var createFilterElement = function createFilterElement() {
if (props.filter) {
var newValue = props.onFilterValueChange ? props.filterValue : filterValue;
newValue = utils.ObjectUtils.isNotEmpty(newValue) ? newValue : '';
var filterContainerProps = mergeProps({
className: cx('filterContainer')
}, ptm('filterContainer'));
var filterProps = mergeProps({
ref: filterInputRef,
type: 'text',
value: newValue,
autoComplete: 'off',
className: cx('filter'),
placeholder: props.filterPlaceholder,
onKeyDown: function onKeyDown(event) {
return onHeaderElementKeyDown(event, false);
},
onChange: onFilterInputChange,
disabled: props.disabled
}, ptm('filter'));
var filterIconProps = mergeProps({
className: cx('filterIcon')
}, ptm('filterIcon'));
var icon = props.filterIcon || /*#__PURE__*/React__namespace.createElement(search.SearchIcon, filterIconProps);
var filterIcon = utils.IconUtils.getJSXIcon(icon, _objectSpread({}, filterIconProps), {
props: props
});
var filterContent = /*#__PURE__*/React__namespace.createElement("div", filterContainerProps, /*#__PURE__*/React__namespace.createElement("input", filterProps), filterIcon);
if (props.filterTemplate) {
var defaultContentOptions = {
className: 'p-treeselect-filter-container',
element: filterContent,
filterOptions: filterOptions,
filterInputKeyDown: function filterInputKeyDown(event) {
return onHeaderElementKeyDown(event, function () {});
},
filterInputChange: onFilterInputChange,
filterIconClassName: 'p-dropdown-filter-icon',
props: props
};
filterContent = utils.ObjectUtils.getJSXElement(props.filterTemplate, defaultContentOptions);
}
return /*#__PURE__*/React__namespace.createElement(React__namespace.Fragment, null, filterContent);
}
};
var createHeader = function createHeader() {
var filterElement = createFilterElement();
var closeIconProps = mergeProps({
className: cx('closeIcon'),
'aria-hidden': true
}, ptm('closeIcon'));
var icon = props.closeIcon || /*#__PURE__*/React__namespace.createElement(times.TimesIcon, closeIconProps);
var closeIcon = utils.IconUtils.getJSXIcon(icon, _objectSpread({}, closeIconProps), {
props: props
});
var closeButtonProps = mergeProps({
type: 'button',
className: cx('closeButton'),
onKeyDown: function onKeyDown(event) {
return onHeaderElementKeyDown(event, true);
},
onClick: hide,
'aria-label': PrimeReact.ariaLabel('close')
}, ptm('closeButton'));
var headerProps = mergeProps({
className: cx('header')
}, ptm('header'));
var closeElement = /*#__PURE__*/React__namespace.createElement("button", closeButtonProps, closeIcon, /*#__PURE__*/React__namespace.createElement(ripple.Ripple, null));
var content = /*#__PURE__*/React__namespace.createElement("div", headerProps, filterElement, closeElement);
if (props.panelHeaderTemplate) {
var defaultOptions = {
className: 'p-treeselect-header',
filterElement: filterElement,
closeElement: closeElement,
closeElementClassName: 'p-treeselect-close p-link',
closeIconClassName: 'p-treeselect-close-icon',
onCloseClick: hide,
element: content,
props: props
};
return /*#__PURE__*/React__namespace.createElement("div", null, content, utils.ObjectUtils.getJSXElement(props.panelHeaderTemplate, defaultOptions));
}
return content;
};
var createFooter = function createFooter() {
return utils.ObjectUtils.getJSXElement(props.panelFooterTemplate, props);
};
var selectedNodes = getSelectedNodes();
var otherProps = TreeSelectBase.getOtherProps(props);
var ariaProps = utils.ObjectUtils.reduceKeys(otherProps, utils.DomHandler.ARIA_PROPS);
var firstHiddenFocusableElementOnOverlayProps = mergeProps({
ref: firstHiddenFocusableElementOnOverlay,
role: 'presentation',
className: 'p-hidden-accessible p-hidden-focusable',
tabIndex: 0,
onFocus: onFirstHiddenFocus,
'aria-hidden': true,
'data-p-hidden-accessible': true,
'data-p-hidden-focusable': true
}, ptm('firstHiddenFocusableElementOnOverlay'));
var lastHiddenFocusableElementOnOverlayProps = mergeProps({
ref: lastHiddenFocusableElementOnOverlay,
role: 'presentation',
className: 'p-hidden-accessible p-hidden-focusable',
tabIndex: 0,
onFocus: onLastHiddenFocus,
'aria-hidden': true,
'data-p-hidden-accessible': true,
'data-p-hidden-focusable': true
}, ptm('lastHiddenFocusableElementOnOverlay'));
var rootProps = mergeProps({
ref: elementRef,
className: utils.classNames(props.className, cx('root', {
context: context,
focusedState: focusedState,
overlayVisibleState: overlayVisibleState,
isValueEmpty: isValueEmpty
})),
style: props.style,
onClick: onClick
}, TreeSelectBase.getOtherProps(props), ptm('root'));
var keyboardHelper = createKeyboardHelper();
var labelElement = createLabel();
var dropdownIcon = createDropdownIcon();
var clearIcon = createClearIcon();
var content = createContent();
var header = createHeader();
var footer = createFooter();
return /*#__PURE__*/React__namespace.createElement("div", rootProps, keyboardHelper, labelElement, clearIcon, dropdownIcon, /*#__PURE__*/React__namespace.createElement(TreeSelectPanel, {
hostName: "TreeSelect",
ref: overlayRef,
appendTo: props.appendTo,
panelStyle: props.panelStyle,
panelClassName: props.panelClassName,
scrollHeight: props.scrollHeight,
onClick: onOverlayClick,
header: header,
hide: hide,
footer: footer,
firstHiddenFocusableElementOnOverlay: /*#__PURE__*/React__namespace.createElement("span", firstHiddenFocusableElementOnOverlayProps),
lastHiddenFocusableElementOnOverlay: /*#__PURE__*/React__namespace.createElement("span", lastHiddenFocusableElementOnOverlayProps),
transitionOptions: props.transitionOptions,
"in": overlayVisibleState,
onEnter: onOverlayEnter,
onEntered: onOverlayEntered,
onExit: onOverlayExit,
onExited: onOverlayExited,
ptm: ptm,
cx: cx
}, content), hasTooltip && /*#__PURE__*/React__namespace.createElement(tooltip.Tooltip, _extends({
target: elementRef,
content: props.tooltip,
pt: ptm('tooltip')
}, props.tooltipOptions)));
}));
TreeSelect.displayName = 'TreeSelect';
exports.TreeSelect = TreeSelect;
Object.defineProperty(exports, '__esModule', { value: true });
return exports;
})({}, React, primereact.api, primereact.componentbase, primereact.hooks, primereact.icons.chevrondown, primereact.icons.search, primereact.icons.times, primereact.overlayservice, primereact.ripple, primereact.tooltip, primereact.tree, primereact.utils, primereact.csstransition, primereact.portal);