primereact 9.1.1 → 9.2.0
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/api/api.d.ts +2 -2
- package/autocomplete/autocomplete.cjs.js +1 -0
- package/autocomplete/autocomplete.cjs.min.js +1 -1
- package/autocomplete/autocomplete.esm.js +1 -0
- package/autocomplete/autocomplete.esm.min.js +1 -1
- package/autocomplete/autocomplete.js +1 -0
- package/autocomplete/autocomplete.min.js +1 -1
- package/avatar/avatar.cjs.js +2 -2
- package/avatar/avatar.cjs.min.js +1 -1
- package/avatar/avatar.esm.js +2 -2
- package/avatar/avatar.esm.min.js +1 -1
- package/avatar/avatar.js +2 -2
- package/avatar/avatar.min.js +1 -1
- package/calendar/calendar.cjs.js +2 -2
- package/calendar/calendar.cjs.min.js +1 -1
- package/calendar/calendar.esm.js +2 -2
- package/calendar/calendar.esm.min.js +1 -1
- package/calendar/calendar.js +2 -2
- package/calendar/calendar.min.js +1 -1
- package/contextmenu/contextmenu.cjs.js +61 -18
- package/contextmenu/contextmenu.cjs.min.js +1 -1
- package/contextmenu/contextmenu.d.ts +9 -0
- package/contextmenu/contextmenu.esm.js +63 -20
- package/contextmenu/contextmenu.esm.min.js +1 -1
- package/contextmenu/contextmenu.js +61 -18
- package/contextmenu/contextmenu.min.js +1 -1
- package/core/core.js +226 -115
- package/core/core.min.js +4 -4
- package/datatable/datatable.cjs.js +84 -79
- package/datatable/datatable.cjs.min.js +1 -1
- package/datatable/datatable.d.ts +2 -11
- package/datatable/datatable.esm.js +85 -80
- package/datatable/datatable.esm.min.js +1 -1
- package/datatable/datatable.js +84 -79
- package/datatable/datatable.min.css +1 -1
- package/datatable/datatable.min.js +1 -1
- package/dropdown/dropdown.cjs.js +1 -0
- package/dropdown/dropdown.cjs.min.js +1 -1
- package/dropdown/dropdown.esm.js +1 -0
- package/dropdown/dropdown.esm.min.js +1 -1
- package/dropdown/dropdown.js +1 -0
- package/dropdown/dropdown.min.js +1 -1
- package/hooks/hooks.cjs.js +34 -2
- package/hooks/hooks.cjs.min.js +1 -1
- package/hooks/hooks.d.ts +13 -0
- package/hooks/hooks.esm.js +34 -3
- package/hooks/hooks.esm.min.js +1 -1
- package/hooks/hooks.js +34 -2
- package/hooks/hooks.min.js +1 -1
- package/inputtext/inputtext.min.css +1 -1
- package/listbox/listbox.cjs.js +5 -4
- package/listbox/listbox.cjs.min.js +1 -1
- package/listbox/listbox.esm.js +5 -4
- package/listbox/listbox.esm.min.js +1 -1
- package/listbox/listbox.js +5 -4
- package/listbox/listbox.min.js +1 -1
- package/megamenu/megamenu.cjs.js +91 -6
- package/megamenu/megamenu.cjs.min.js +1 -1
- package/megamenu/megamenu.d.ts +9 -0
- package/megamenu/megamenu.esm.js +93 -8
- package/megamenu/megamenu.esm.min.js +1 -1
- package/megamenu/megamenu.js +91 -6
- package/megamenu/megamenu.min.css +1 -1
- package/megamenu/megamenu.min.js +1 -1
- package/multiselect/multiselect.cjs.js +1 -0
- package/multiselect/multiselect.cjs.min.js +1 -1
- package/multiselect/multiselect.esm.js +1 -0
- package/multiselect/multiselect.esm.min.js +1 -1
- package/multiselect/multiselect.js +1 -0
- package/multiselect/multiselect.min.js +1 -1
- package/package.json +1 -1
- package/primereact.all.cjs.js +554 -244
- package/primereact.all.cjs.min.js +1 -1
- package/primereact.all.esm.js +554 -245
- package/primereact.all.esm.min.js +1 -1
- package/primereact.all.js +554 -244
- package/primereact.all.min.js +1 -1
- package/resources/primereact.css +616 -667
- package/resources/primereact.min.css +1 -1
- package/resources/themes/arya-blue/theme.css +130 -2
- package/resources/themes/arya-green/theme.css +130 -2
- package/resources/themes/arya-orange/theme.css +130 -2
- package/resources/themes/arya-purple/theme.css +130 -2
- package/resources/themes/bootstrap4-dark-blue/theme.css +131 -2
- package/resources/themes/bootstrap4-dark-purple/theme.css +131 -2
- package/resources/themes/bootstrap4-light-blue/theme.css +131 -2
- package/resources/themes/bootstrap4-light-purple/theme.css +131 -2
- package/resources/themes/fluent-light/theme.css +131 -2
- package/resources/themes/lara-dark-blue/theme.css +131 -2
- package/resources/themes/lara-dark-indigo/theme.css +131 -2
- package/resources/themes/lara-dark-purple/theme.css +131 -2
- package/resources/themes/lara-dark-teal/theme.css +131 -2
- package/resources/themes/lara-light-blue/theme.css +131 -2
- package/resources/themes/lara-light-indigo/theme.css +131 -2
- package/resources/themes/lara-light-purple/theme.css +131 -2
- package/resources/themes/lara-light-teal/theme.css +131 -2
- package/resources/themes/luna-amber/theme.css +131 -2
- package/resources/themes/luna-blue/theme.css +131 -2
- package/resources/themes/luna-green/theme.css +131 -2
- package/resources/themes/luna-pink/theme.css +131 -2
- package/resources/themes/md-dark-deeppurple/theme.css +131 -2
- package/resources/themes/md-dark-indigo/theme.css +131 -2
- package/resources/themes/md-light-deeppurple/theme.css +131 -2
- package/resources/themes/md-light-indigo/theme.css +131 -2
- package/resources/themes/mdc-dark-deeppurple/theme.css +131 -2
- package/resources/themes/mdc-dark-indigo/theme.css +131 -2
- package/resources/themes/mdc-light-deeppurple/theme.css +131 -2
- package/resources/themes/mdc-light-indigo/theme.css +131 -2
- package/resources/themes/mira/theme.css +131 -2
- package/resources/themes/nano/theme.css +131 -2
- package/resources/themes/nova/theme.css +131 -2
- package/resources/themes/nova-accent/theme.css +131 -2
- package/resources/themes/nova-alt/theme.css +131 -2
- package/resources/themes/rhea/theme.css +131 -2
- package/resources/themes/saga-blue/theme.css +131 -2
- package/resources/themes/saga-green/theme.css +131 -2
- package/resources/themes/saga-orange/theme.css +131 -2
- package/resources/themes/saga-purple/theme.css +131 -2
- package/resources/themes/soho-dark/theme.css +131 -2
- package/resources/themes/soho-light/theme.css +131 -2
- package/resources/themes/tailwind-light/theme.css +131 -2
- package/resources/themes/vela-blue/theme.css +131 -2
- package/resources/themes/vela-green/theme.css +131 -2
- package/resources/themes/vela-orange/theme.css +131 -2
- package/resources/themes/vela-purple/theme.css +131 -2
- package/resources/themes/viva-dark/theme.css +131 -2
- package/resources/themes/viva-light/theme.css +131 -2
- package/tieredmenu/tieredmenu.cjs.js +69 -9
- package/tieredmenu/tieredmenu.cjs.min.js +1 -1
- package/tieredmenu/tieredmenu.d.ts +9 -0
- package/tieredmenu/tieredmenu.esm.js +71 -11
- package/tieredmenu/tieredmenu.esm.min.js +1 -1
- package/tieredmenu/tieredmenu.js +69 -9
- package/tieredmenu/tieredmenu.min.js +1 -1
- package/toast/toast.min.css +1 -1
- package/treetable/treetable.cjs.js +12 -9
- package/treetable/treetable.cjs.min.js +1 -1
- package/treetable/treetable.d.ts +0 -5
- package/treetable/treetable.esm.js +12 -9
- package/treetable/treetable.esm.min.js +1 -1
- package/treetable/treetable.js +12 -9
- package/treetable/treetable.min.css +1 -1
- package/treetable/treetable.min.js +1 -1
- package/utils/utils.cjs.js +14 -9
- package/utils/utils.cjs.min.js +1 -1
- package/utils/utils.esm.js +14 -9
- package/utils/utils.esm.min.js +1 -1
- package/utils/utils.js +14 -9
- package/utils/utils.min.js +1 -1
- package/virtualscroller/virtualscroller.cjs.js +177 -104
- package/virtualscroller/virtualscroller.cjs.min.js +1 -1
- package/virtualscroller/virtualscroller.d.ts +20 -0
- package/virtualscroller/virtualscroller.esm.js +177 -104
- package/virtualscroller/virtualscroller.esm.min.js +1 -1
- package/virtualscroller/virtualscroller.js +177 -104
- package/virtualscroller/virtualscroller.min.css +1 -1
- package/virtualscroller/virtualscroller.min.js +1 -1
- package/web-types.json +1 -1
|
@@ -114,6 +114,8 @@ var TieredMenuBase = {
|
|
|
114
114
|
className: null,
|
|
115
115
|
autoZIndex: true,
|
|
116
116
|
baseZIndex: 0,
|
|
117
|
+
breakpoint: undefined,
|
|
118
|
+
scrollHeight: '400px',
|
|
117
119
|
appendTo: null,
|
|
118
120
|
transitionOptions: null,
|
|
119
121
|
onShow: null,
|
|
@@ -137,13 +139,20 @@ var TieredMenuSub = /*#__PURE__*/React__namespace.memo(function (props) {
|
|
|
137
139
|
var _useEventListener = hooks.useEventListener({
|
|
138
140
|
type: 'click',
|
|
139
141
|
listener: function listener(event) {
|
|
140
|
-
if (elementRef.current && !elementRef.current.contains(event.target)) {
|
|
142
|
+
if (!props.isMobileMode && elementRef.current && !elementRef.current.contains(event.target)) {
|
|
141
143
|
setActiveItemState(null);
|
|
142
144
|
}
|
|
143
145
|
}
|
|
144
146
|
}),
|
|
145
147
|
_useEventListener2 = _slicedToArray(_useEventListener, 1),
|
|
146
148
|
bindDocumentClickListener = _useEventListener2[0];
|
|
149
|
+
var _useResizeListener = hooks.useResizeListener({
|
|
150
|
+
listener: function listener() {
|
|
151
|
+
!props.isMobileMode && setActiveItemState(null);
|
|
152
|
+
}
|
|
153
|
+
}),
|
|
154
|
+
_useResizeListener2 = _slicedToArray(_useResizeListener, 1),
|
|
155
|
+
bindDocumentResizeListener = _useResizeListener2[0];
|
|
147
156
|
var position = function position() {
|
|
148
157
|
if (elementRef.current) {
|
|
149
158
|
var parentItem = elementRef.current.parentElement;
|
|
@@ -163,7 +172,7 @@ var TieredMenuSub = /*#__PURE__*/React__namespace.memo(function (props) {
|
|
|
163
172
|
}
|
|
164
173
|
};
|
|
165
174
|
var onItemMouseEnter = function onItemMouseEnter(event, item) {
|
|
166
|
-
if (item.disabled) {
|
|
175
|
+
if (item.disabled || props.isMobileMode) {
|
|
167
176
|
event.preventDefault();
|
|
168
177
|
return;
|
|
169
178
|
}
|
|
@@ -189,7 +198,7 @@ var TieredMenuSub = /*#__PURE__*/React__namespace.memo(function (props) {
|
|
|
189
198
|
item: item
|
|
190
199
|
});
|
|
191
200
|
}
|
|
192
|
-
if (props.root) {
|
|
201
|
+
if (props.root || props.isMobileMode) {
|
|
193
202
|
if (item.items) {
|
|
194
203
|
if (activeItemState && item === activeItemState) setActiveItemState(null);else setActiveItemState(item);
|
|
195
204
|
}
|
|
@@ -244,21 +253,27 @@ var TieredMenuSub = /*#__PURE__*/React__namespace.memo(function (props) {
|
|
|
244
253
|
return prevItem ? utils.DomHandler.hasClass(prevItem, 'p-disabled') || !utils.DomHandler.hasClass(prevItem, 'p-menuitem') ? findPrevItem(prevItem) : prevItem : null;
|
|
245
254
|
};
|
|
246
255
|
var onLeafClick = function onLeafClick(event) {
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
256
|
+
if (!props.isMobileMode || props.popup) {
|
|
257
|
+
setActiveItemState(null);
|
|
258
|
+
props.onLeafClick && props.onLeafClick(event);
|
|
259
|
+
props.onHide && props.onHide(event);
|
|
260
|
+
}
|
|
250
261
|
};
|
|
251
262
|
hooks.useMountEffect(function () {
|
|
252
263
|
bindDocumentClickListener();
|
|
264
|
+
bindDocumentResizeListener();
|
|
253
265
|
});
|
|
254
266
|
hooks.useUpdateEffect(function () {
|
|
255
267
|
if (!props.parentActive) {
|
|
256
268
|
setActiveItemState(null);
|
|
257
269
|
}
|
|
258
|
-
if (!props.root && props.parentActive) {
|
|
270
|
+
if (!props.root && props.parentActive && !props.isMobileMode) {
|
|
259
271
|
position();
|
|
260
272
|
}
|
|
261
273
|
}, [props.parentActive]);
|
|
274
|
+
hooks.useUpdateEffect(function () {
|
|
275
|
+
props.onItemToggle && props.onItemToggle();
|
|
276
|
+
}, [activeItemState]);
|
|
262
277
|
var createSeparator = function createSeparator(index) {
|
|
263
278
|
var key = 'separator_' + index;
|
|
264
279
|
return /*#__PURE__*/React__namespace.createElement("li", {
|
|
@@ -275,7 +290,9 @@ var TieredMenuSub = /*#__PURE__*/React__namespace.memo(function (props) {
|
|
|
275
290
|
onLeafClick: onLeafClick,
|
|
276
291
|
popup: props.popup,
|
|
277
292
|
onKeyDown: onChildItemKeyDown,
|
|
278
|
-
parentActive: item === activeItemState
|
|
293
|
+
parentActive: item === activeItemState,
|
|
294
|
+
isMobileMode: props.isMobileMode,
|
|
295
|
+
onItemToggle: props.onItemToggle
|
|
279
296
|
});
|
|
280
297
|
}
|
|
281
298
|
return null;
|
|
@@ -385,8 +402,14 @@ var TieredMenu = /*#__PURE__*/React__namespace.memo( /*#__PURE__*/React__namespa
|
|
|
385
402
|
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
386
403
|
visibleState = _React$useState2[0],
|
|
387
404
|
setVisibleState = _React$useState2[1];
|
|
405
|
+
var _React$useState3 = React__namespace.useState(null),
|
|
406
|
+
_React$useState4 = _slicedToArray(_React$useState3, 2),
|
|
407
|
+
attributeSelectorState = _React$useState4[0],
|
|
408
|
+
setAttributeSelectorState = _React$useState4[1];
|
|
388
409
|
var menuRef = React__namespace.useRef(null);
|
|
389
410
|
var targetRef = React__namespace.useRef(null);
|
|
411
|
+
var styleElementRef = React__namespace.useRef(null);
|
|
412
|
+
var isMobileMode = hooks.useMatchMedia("screen and (max-width: ".concat(props.breakpoint, ")"), !!props.breakpoint);
|
|
390
413
|
var _useOverlayListener = hooks.useOverlayListener({
|
|
391
414
|
target: targetRef,
|
|
392
415
|
overlay: menuRef,
|
|
@@ -424,11 +447,31 @@ var TieredMenu = /*#__PURE__*/React__namespace.memo( /*#__PURE__*/React__namespa
|
|
|
424
447
|
props.onHide && props.onHide(event);
|
|
425
448
|
}
|
|
426
449
|
};
|
|
450
|
+
var onItemToggle = function onItemToggle() {
|
|
451
|
+
if (props.popup && isMobileMode) {
|
|
452
|
+
utils.DomHandler.absolutePosition(menuRef.current, targetRef.current);
|
|
453
|
+
}
|
|
454
|
+
};
|
|
455
|
+
var createStyle = function createStyle() {
|
|
456
|
+
if (!styleElementRef.current) {
|
|
457
|
+
styleElementRef.current = utils.DomHandler.createInlineStyle(PrimeReact__default["default"].nonce);
|
|
458
|
+
var selector = "".concat(attributeSelectorState);
|
|
459
|
+
var innerHTML = "\n@media screen and (max-width: ".concat(props.breakpoint, ") {\n .p-tieredmenu[").concat(selector, "] > ul {\n max-height: ").concat(props.scrollHeight, ";\n overflow: ").concat(props.scrollHeight ? 'auto' : '', ";\n }\n\n .p-tieredmenu[").concat(selector, "] .p-submenu-list {\n position: relative;\n }\n\n .p-tieredmenu[").concat(selector, "] .p-menuitem-active > .p-submenu-list {\n left: 0 !important;\n box-shadow: none;\n border-radius: 0;\n padding: 0 0 0 calc(var(--inline-spacing) * 2); /* @todo */\n }\n\n .p-tieredmenu[").concat(selector, "] .p-menuitem-active > .p-menuitem-link > .p-submenu-icon {\n transform: rotate(-180deg);\n }\n\n .p-tieredmenu[").concat(selector, "] .p-submenu-icon:before {\n content: \"\\e930\";\n }\n\n ").concat(!props.popup ? ".p-tieredmenu[".concat(selector, "] { width: 100%; }") : '', "\n}\n");
|
|
460
|
+
styleElementRef.current.innerHTML = innerHTML;
|
|
461
|
+
}
|
|
462
|
+
};
|
|
463
|
+
var destroyStyle = function destroyStyle() {
|
|
464
|
+
styleElementRef.current = utils.DomHandler.removeInlineStyle(styleElementRef.current);
|
|
465
|
+
};
|
|
427
466
|
var onEnter = function onEnter() {
|
|
428
467
|
if (props.autoZIndex) {
|
|
429
468
|
utils.ZIndexUtils.set('menu', menuRef.current, PrimeReact__default["default"].autoZIndex, props.baseZIndex || PrimeReact__default["default"].zIndex['menu']);
|
|
430
469
|
}
|
|
431
470
|
utils.DomHandler.absolutePosition(menuRef.current, targetRef.current);
|
|
471
|
+
if (attributeSelectorState && props.breakpoint) {
|
|
472
|
+
menuRef.current.setAttribute(attributeSelectorState, '');
|
|
473
|
+
createStyle();
|
|
474
|
+
}
|
|
432
475
|
};
|
|
433
476
|
var onEntered = function onEntered() {
|
|
434
477
|
bindOverlayListener();
|
|
@@ -439,7 +482,22 @@ var TieredMenu = /*#__PURE__*/React__namespace.memo( /*#__PURE__*/React__namespa
|
|
|
439
482
|
};
|
|
440
483
|
var onExited = function onExited() {
|
|
441
484
|
utils.ZIndexUtils.clear(menuRef.current);
|
|
485
|
+
destroyStyle();
|
|
442
486
|
};
|
|
487
|
+
hooks.useMountEffect(function () {
|
|
488
|
+
if (props.breakpoint) {
|
|
489
|
+
!attributeSelectorState && setAttributeSelectorState(utils.UniqueComponentId());
|
|
490
|
+
}
|
|
491
|
+
});
|
|
492
|
+
hooks.useUpdateEffect(function () {
|
|
493
|
+
if (attributeSelectorState && menuRef.current) {
|
|
494
|
+
menuRef.current.setAttribute(attributeSelectorState, '');
|
|
495
|
+
createStyle();
|
|
496
|
+
}
|
|
497
|
+
return function () {
|
|
498
|
+
destroyStyle();
|
|
499
|
+
};
|
|
500
|
+
}, [attributeSelectorState, props.breakpoint]);
|
|
443
501
|
hooks.useUnmountEffect(function () {
|
|
444
502
|
utils.ZIndexUtils.clear(menuRef.current);
|
|
445
503
|
});
|
|
@@ -487,7 +545,9 @@ var TieredMenu = /*#__PURE__*/React__namespace.memo( /*#__PURE__*/React__namespa
|
|
|
487
545
|
model: props.model,
|
|
488
546
|
root: true,
|
|
489
547
|
popup: props.popup,
|
|
490
|
-
onHide: hide
|
|
548
|
+
onHide: hide,
|
|
549
|
+
isMobileMode: isMobileMode,
|
|
550
|
+
onItemToggle: onItemToggle
|
|
491
551
|
})));
|
|
492
552
|
};
|
|
493
553
|
var element = createElement();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),n=require("primereact/api"),t=require("primereact/csstransition"),r=require("primereact/hooks"),o=require("primereact/overlayservice"),i=require("primereact/portal"),l=require("primereact/utils"),a=require("primereact/ripple");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function c(e){if(e&&e.__esModule)return e;var n=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var r=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(n,t,r.get?r:{enumerable:!0,get:function(){return e[t]}})}})),n.default=e,Object.freeze(n)}var s=c(e),p=u(n);function m(){return m=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e},m.apply(this,arguments)}function d(e){if(Array.isArray(e))return e}function f(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var r,o,i,l,a=[],u=!0,c=!1;try{if(i=(t=t.call(e)).next,0===n){if(Object(t)!==t)return;u=!1}else for(;!(u=(r=i.call(t)).done)&&(a.push(r.value),a.length!==n);u=!0);}catch(e){c=!0,o=e}finally{try{if(!u&&null!=t.return&&(l=t.return(),Object(l)!==l))return}finally{if(c)throw o}}return a}}function b(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=new Array(n);t<n;t++)r[t]=e[t];return r}function v(e,n){if(e){if("string"==typeof e)return b(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?b(e,n):void 0}}function g(){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 h(e,n){return d(e)||f(e,n)||v(e,n)||g()}var y={defaultProps:{__TYPE:"TieredMenu",id:null,model:null,popup:!1,style:null,className:null,autoZIndex:!0,baseZIndex:0,breakpoint:void 0,scrollHeight:"400px",appendTo:null,transitionOptions:null,onShow:null,onHide:null,children:void 0},getProps:function(e){return l.ObjectUtils.getMergedProps(e,y.defaultProps)},getOtherProps:function(e){return l.ObjectUtils.getDiffProps(e,y.defaultProps)}},E=s.memo((function(e){var n=h(s.useState(null),2),t=n[0],o=n[1],i=s.useRef(null),u=h(r.useEventListener({type:"click",listener:function(n){e.isMobileMode||!i.current||i.current.contains(n.target)||o(null)}}),1)[0],c=h(r.useResizeListener({listener:function(){!e.isMobileMode&&o(null)}}),1)[0],p=function(){if(i.current){var e=i.current.parentElement,n=l.DomHandler.getOffset(e),t=l.DomHandler.getViewport(),r=i.current.offsetParent?i.current.offsetWidth:l.DomHandler.getHiddenElementOuterWidth(i.current),o=l.DomHandler.getOuterWidth(e.children[0]),a=parseInt(n.top,10)+i.current.offsetHeight-l.DomHandler.getWindowScrollTop();i.current.style.top=a>t.height?t.height-a+"px":"0px",parseInt(n.left,10)+o+r>t.width-l.DomHandler.calculateScrollbarWidth()&&l.DomHandler.addClass(i.current,"p-submenu-list-flipped")}},m=function(n,r){r.disabled||e.isMobileMode?n.preventDefault():e.root?(t||e.popup)&&o(r):o(r)},d=function(n,r){r.disabled?n.preventDefault():(r.url||n.preventDefault(),r.command&&r.command({originalEvent:n,item:r}),(e.root||e.isMobileMode)&&r.items&&o(t&&r===t?null:r),r.items||y(n))},f=function(n,t){var r=n.currentTarget.parentElement;switch(n.which){case 40:var i=v(r);i&&i.children[0].focus(),n.preventDefault();break;case 38:var l=g(r);l&&l.children[0].focus(),n.preventDefault();break;case 39:t.items&&(o(t),setTimeout((function(){r.children[1].children[0].children[0].focus()}),50)),n.preventDefault()}e.onKeyDown&&e.onKeyDown(n,r)},b=function(e,n){37===e.which&&(o(null),n.parentElement.previousElementSibling.focus())},v=function e(n){var t=n.nextElementSibling;return t?l.DomHandler.hasClass(t,"p-disabled")||!l.DomHandler.hasClass(t,"p-menuitem")?e(t):t:null},g=function e(n){var t=n.previousElementSibling;return t?l.DomHandler.hasClass(t,"p-disabled")||!l.DomHandler.hasClass(t,"p-menuitem")?e(t):t:null},y=function(n){e.isMobileMode&&!e.popup||(o(null),e.onLeafClick&&e.onLeafClick(n),e.onHide&&e.onHide(n))};r.useMountEffect((function(){u(),c()})),r.useUpdateEffect((function(){e.parentActive||o(null),e.root||!e.parentActive||e.isMobileMode||p()}),[e.parentActive]),r.useUpdateEffect((function(){e.onItemToggle&&e.onItemToggle()}),[t]);var M=function(e){return s.createElement("li",{key:"separator_"+e,className:"p-menu-separator",role:"separator"})},w=function(n){return n.items?s.createElement(E,{menuProps:e.menuProps,model:n.items,onLeafClick:y,popup:e.popup,onKeyDown:b,parentActive:n===t,isMobileMode:e.isMobileMode,onItemToggle:e.onItemToggle}):null},D=function(n,r){if(!1===n.visible)return null;var o=n.style,i=n.disabled,u=n.icon,c=n.label,p=n.items,b=n.target,v=n.url,g=n.template,h=c+"_"+r,y=t===n,E=l.classNames("p-menuitem",{"p-menuitem-active":y},n.className),M=l.classNames("p-menuitem-link",{"p-disabled":i}),D=l.classNames("p-menuitem-icon",u),H="p-submenu-icon pi pi-angle-right",O=l.IconUtils.getJSXIcon(u,{className:"p-menuitem-icon"},{props:e.menuProps}),x=c&&s.createElement("span",{className:"p-menuitem-text"},c),I=p&&s.createElement("span",{className:H}),S=w(n),k=s.createElement("a",{href:v||"#",className:M,target:b,role:"menuitem","aria-haspopup":null!=p,onClick:function(e){return d(e,n)},onKeyDown:function(e){return f(e,n)},"aria-disabled":i},O,x,I,s.createElement(a.Ripple,null));g&&(k=l.ObjectUtils.getJSXElement(g,n,{onClick:function(e){return d(e,n)},onKeyDown:function(e){return f(e,n)},className:M,labelClassName:"p-menuitem-text",iconClassName:D,submenuIconClassName:H,element:k,props:e,active:y,disabled:i}));return s.createElement("li",{key:h,id:n,className:E,style:o,onMouseEnter:function(e){return m(e,n)},role:"none"},k,S)},H=function(e,n){return e.separator?M(n):D(e,n)},O=l.classNames({"p-submenu-list":!e.root}),x=e.model?e.model.map(H):null;return s.createElement("ul",{ref:i,className:O,role:e.root?"menubar":"menu","aria-orientation":"horizontal"},x)}));E.displayName="TieredMenuSub";var M=s.memo(s.forwardRef((function(e,n){var a=y.getProps(e),u=h(s.useState(!a.popup),2),c=u[0],d=u[1],f=h(s.useState(null),2),b=f[0],v=f[1],g=s.useRef(null),M=s.useRef(null),w=s.useRef(null),D=r.useMatchMedia("screen and (max-width: ".concat(a.breakpoint,")"),!!a.breakpoint),H=h(r.useOverlayListener({target:M,overlay:g,listener:function(e,n){n.valid&&N(e)},when:c}),2),O=H[0],x=H[1],I=function(e){a.popup&&o.OverlayService.emit("overlay-click",{originalEvent:e,target:M.current})},S=function(e){a.popup&&(c?N(e):k(e))},k=function(e){M.current=e.currentTarget,d(!0),a.onShow&&a.onShow(e)},N=function(e){a.popup&&(M.current=e.currentTarget,d(!1),a.onHide&&a.onHide(e))},P=function(){a.popup&&D&&l.DomHandler.absolutePosition(g.current,M.current)},T=function(){if(!w.current){w.current=l.DomHandler.createInlineStyle(p.default.nonce);var e="".concat(b),n="\n@media screen and (max-width: ".concat(a.breakpoint,") {\n .p-tieredmenu[").concat(e,"] > ul {\n max-height: ").concat(a.scrollHeight,";\n overflow: ").concat(a.scrollHeight?"auto":"",";\n }\n\n .p-tieredmenu[").concat(e,"] .p-submenu-list {\n position: relative;\n }\n\n .p-tieredmenu[").concat(e,"] .p-menuitem-active > .p-submenu-list {\n left: 0 !important;\n box-shadow: none;\n border-radius: 0;\n padding: 0 0 0 calc(var(--inline-spacing) * 2); /* @todo */\n }\n\n .p-tieredmenu[").concat(e,"] .p-menuitem-active > .p-menuitem-link > .p-submenu-icon {\n transform: rotate(-180deg);\n }\n\n .p-tieredmenu[").concat(e,'] .p-submenu-icon:before {\n content: "\\e930";\n }\n\n ').concat(a.popup?"":".p-tieredmenu[".concat(e,"] { width: 100%; }"),"\n}\n");w.current.innerHTML=n}},j=function(){w.current=l.DomHandler.removeInlineStyle(w.current)},C=function(){a.autoZIndex&&l.ZIndexUtils.set("menu",g.current,p.default.autoZIndex,a.baseZIndex||p.default.zIndex.menu),l.DomHandler.absolutePosition(g.current,M.current),b&&a.breakpoint&&(g.current.setAttribute(b,""),T())},U=function(){O()},A=function(){M.current=null,x()},q=function(){l.ZIndexUtils.clear(g.current),j()};r.useMountEffect((function(){a.breakpoint&&!b&&v(l.UniqueComponentId())})),r.useUpdateEffect((function(){return b&&g.current&&(g.current.setAttribute(b,""),T()),function(){j()}}),[b,a.breakpoint]),r.useUnmountEffect((function(){l.ZIndexUtils.clear(g.current)})),s.useImperativeHandle(n,(function(){return{props:a,toggle:S,show:k,hide:N,getElement:function(){return g.current}}}));var R,Z,_=(R=y.getOtherProps(a),Z=l.classNames("p-tieredmenu p-component",{"p-tieredmenu-overlay":a.popup,"p-input-filled":"filled"===p.default.inputStyle,"p-ripple-disabled":!1===p.default.ripple},a.className),s.createElement(t.CSSTransition,{nodeRef:g,classNames:"p-connected-overlay",in:c,timeout:{enter:120,exit:100},options:a.transitionOptions,unmountOnExit:!0,onEnter:C,onEntered:U,onExit:A,onExited:q},s.createElement("div",m({ref:g,id:a.id,className:Z,style:a.style},R,{onClick:I}),s.createElement(E,{menuProps:a,model:a.model,root:!0,popup:a.popup,onHide:N,isMobileMode:D,onItemToggle:P}))));return a.popup?s.createElement(i.Portal,{element:_,appendTo:a.appendTo}):_})));M.displayName="TieredMenu",exports.TieredMenu=M;
|
|
@@ -30,6 +30,15 @@ export interface TieredMenuProps extends Omit<React.DetailedHTMLProps<React.HTML
|
|
|
30
30
|
* @defaultValue true
|
|
31
31
|
*/
|
|
32
32
|
autoZIndex?: boolean | undefined;
|
|
33
|
+
/**
|
|
34
|
+
* The breakpoint to define the maximum width boundary when responsiveness is enabled.
|
|
35
|
+
*/
|
|
36
|
+
breakpoint?: string | undefined;
|
|
37
|
+
/**
|
|
38
|
+
* Maximum height of the options panel on responsive mode.
|
|
39
|
+
* @defaultValue 400px
|
|
40
|
+
*/
|
|
41
|
+
scrollHeight?: string | undefined;
|
|
33
42
|
/**
|
|
34
43
|
* Whether to automatically manage layering.
|
|
35
44
|
* @defaultValue 0
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import PrimeReact from 'primereact/api';
|
|
3
3
|
import { CSSTransition } from 'primereact/csstransition';
|
|
4
|
-
import { useEventListener, useMountEffect, useUpdateEffect, useOverlayListener, useUnmountEffect } from 'primereact/hooks';
|
|
4
|
+
import { useEventListener, useResizeListener, useMountEffect, useUpdateEffect, useMatchMedia, useOverlayListener, useUnmountEffect } from 'primereact/hooks';
|
|
5
5
|
import { OverlayService } from 'primereact/overlayservice';
|
|
6
6
|
import { Portal } from 'primereact/portal';
|
|
7
|
-
import { ObjectUtils, classNames, DomHandler, IconUtils, ZIndexUtils } from 'primereact/utils';
|
|
7
|
+
import { ObjectUtils, classNames, DomHandler, IconUtils, UniqueComponentId, ZIndexUtils } from 'primereact/utils';
|
|
8
8
|
import { Ripple } from 'primereact/ripple';
|
|
9
9
|
|
|
10
10
|
function _extends() {
|
|
@@ -87,6 +87,8 @@ var TieredMenuBase = {
|
|
|
87
87
|
className: null,
|
|
88
88
|
autoZIndex: true,
|
|
89
89
|
baseZIndex: 0,
|
|
90
|
+
breakpoint: undefined,
|
|
91
|
+
scrollHeight: '400px',
|
|
90
92
|
appendTo: null,
|
|
91
93
|
transitionOptions: null,
|
|
92
94
|
onShow: null,
|
|
@@ -110,13 +112,20 @@ var TieredMenuSub = /*#__PURE__*/React.memo(function (props) {
|
|
|
110
112
|
var _useEventListener = useEventListener({
|
|
111
113
|
type: 'click',
|
|
112
114
|
listener: function listener(event) {
|
|
113
|
-
if (elementRef.current && !elementRef.current.contains(event.target)) {
|
|
115
|
+
if (!props.isMobileMode && elementRef.current && !elementRef.current.contains(event.target)) {
|
|
114
116
|
setActiveItemState(null);
|
|
115
117
|
}
|
|
116
118
|
}
|
|
117
119
|
}),
|
|
118
120
|
_useEventListener2 = _slicedToArray(_useEventListener, 1),
|
|
119
121
|
bindDocumentClickListener = _useEventListener2[0];
|
|
122
|
+
var _useResizeListener = useResizeListener({
|
|
123
|
+
listener: function listener() {
|
|
124
|
+
!props.isMobileMode && setActiveItemState(null);
|
|
125
|
+
}
|
|
126
|
+
}),
|
|
127
|
+
_useResizeListener2 = _slicedToArray(_useResizeListener, 1),
|
|
128
|
+
bindDocumentResizeListener = _useResizeListener2[0];
|
|
120
129
|
var position = function position() {
|
|
121
130
|
if (elementRef.current) {
|
|
122
131
|
var parentItem = elementRef.current.parentElement;
|
|
@@ -136,7 +145,7 @@ var TieredMenuSub = /*#__PURE__*/React.memo(function (props) {
|
|
|
136
145
|
}
|
|
137
146
|
};
|
|
138
147
|
var onItemMouseEnter = function onItemMouseEnter(event, item) {
|
|
139
|
-
if (item.disabled) {
|
|
148
|
+
if (item.disabled || props.isMobileMode) {
|
|
140
149
|
event.preventDefault();
|
|
141
150
|
return;
|
|
142
151
|
}
|
|
@@ -162,7 +171,7 @@ var TieredMenuSub = /*#__PURE__*/React.memo(function (props) {
|
|
|
162
171
|
item: item
|
|
163
172
|
});
|
|
164
173
|
}
|
|
165
|
-
if (props.root) {
|
|
174
|
+
if (props.root || props.isMobileMode) {
|
|
166
175
|
if (item.items) {
|
|
167
176
|
if (activeItemState && item === activeItemState) setActiveItemState(null);else setActiveItemState(item);
|
|
168
177
|
}
|
|
@@ -217,21 +226,27 @@ var TieredMenuSub = /*#__PURE__*/React.memo(function (props) {
|
|
|
217
226
|
return prevItem ? DomHandler.hasClass(prevItem, 'p-disabled') || !DomHandler.hasClass(prevItem, 'p-menuitem') ? findPrevItem(prevItem) : prevItem : null;
|
|
218
227
|
};
|
|
219
228
|
var onLeafClick = function onLeafClick(event) {
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
229
|
+
if (!props.isMobileMode || props.popup) {
|
|
230
|
+
setActiveItemState(null);
|
|
231
|
+
props.onLeafClick && props.onLeafClick(event);
|
|
232
|
+
props.onHide && props.onHide(event);
|
|
233
|
+
}
|
|
223
234
|
};
|
|
224
235
|
useMountEffect(function () {
|
|
225
236
|
bindDocumentClickListener();
|
|
237
|
+
bindDocumentResizeListener();
|
|
226
238
|
});
|
|
227
239
|
useUpdateEffect(function () {
|
|
228
240
|
if (!props.parentActive) {
|
|
229
241
|
setActiveItemState(null);
|
|
230
242
|
}
|
|
231
|
-
if (!props.root && props.parentActive) {
|
|
243
|
+
if (!props.root && props.parentActive && !props.isMobileMode) {
|
|
232
244
|
position();
|
|
233
245
|
}
|
|
234
246
|
}, [props.parentActive]);
|
|
247
|
+
useUpdateEffect(function () {
|
|
248
|
+
props.onItemToggle && props.onItemToggle();
|
|
249
|
+
}, [activeItemState]);
|
|
235
250
|
var createSeparator = function createSeparator(index) {
|
|
236
251
|
var key = 'separator_' + index;
|
|
237
252
|
return /*#__PURE__*/React.createElement("li", {
|
|
@@ -248,7 +263,9 @@ var TieredMenuSub = /*#__PURE__*/React.memo(function (props) {
|
|
|
248
263
|
onLeafClick: onLeafClick,
|
|
249
264
|
popup: props.popup,
|
|
250
265
|
onKeyDown: onChildItemKeyDown,
|
|
251
|
-
parentActive: item === activeItemState
|
|
266
|
+
parentActive: item === activeItemState,
|
|
267
|
+
isMobileMode: props.isMobileMode,
|
|
268
|
+
onItemToggle: props.onItemToggle
|
|
252
269
|
});
|
|
253
270
|
}
|
|
254
271
|
return null;
|
|
@@ -358,8 +375,14 @@ var TieredMenu = /*#__PURE__*/React.memo( /*#__PURE__*/React.forwardRef(function
|
|
|
358
375
|
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
359
376
|
visibleState = _React$useState2[0],
|
|
360
377
|
setVisibleState = _React$useState2[1];
|
|
378
|
+
var _React$useState3 = React.useState(null),
|
|
379
|
+
_React$useState4 = _slicedToArray(_React$useState3, 2),
|
|
380
|
+
attributeSelectorState = _React$useState4[0],
|
|
381
|
+
setAttributeSelectorState = _React$useState4[1];
|
|
361
382
|
var menuRef = React.useRef(null);
|
|
362
383
|
var targetRef = React.useRef(null);
|
|
384
|
+
var styleElementRef = React.useRef(null);
|
|
385
|
+
var isMobileMode = useMatchMedia("screen and (max-width: ".concat(props.breakpoint, ")"), !!props.breakpoint);
|
|
363
386
|
var _useOverlayListener = useOverlayListener({
|
|
364
387
|
target: targetRef,
|
|
365
388
|
overlay: menuRef,
|
|
@@ -397,11 +420,31 @@ var TieredMenu = /*#__PURE__*/React.memo( /*#__PURE__*/React.forwardRef(function
|
|
|
397
420
|
props.onHide && props.onHide(event);
|
|
398
421
|
}
|
|
399
422
|
};
|
|
423
|
+
var onItemToggle = function onItemToggle() {
|
|
424
|
+
if (props.popup && isMobileMode) {
|
|
425
|
+
DomHandler.absolutePosition(menuRef.current, targetRef.current);
|
|
426
|
+
}
|
|
427
|
+
};
|
|
428
|
+
var createStyle = function createStyle() {
|
|
429
|
+
if (!styleElementRef.current) {
|
|
430
|
+
styleElementRef.current = DomHandler.createInlineStyle(PrimeReact.nonce);
|
|
431
|
+
var selector = "".concat(attributeSelectorState);
|
|
432
|
+
var innerHTML = "\n@media screen and (max-width: ".concat(props.breakpoint, ") {\n .p-tieredmenu[").concat(selector, "] > ul {\n max-height: ").concat(props.scrollHeight, ";\n overflow: ").concat(props.scrollHeight ? 'auto' : '', ";\n }\n\n .p-tieredmenu[").concat(selector, "] .p-submenu-list {\n position: relative;\n }\n\n .p-tieredmenu[").concat(selector, "] .p-menuitem-active > .p-submenu-list {\n left: 0 !important;\n box-shadow: none;\n border-radius: 0;\n padding: 0 0 0 calc(var(--inline-spacing) * 2); /* @todo */\n }\n\n .p-tieredmenu[").concat(selector, "] .p-menuitem-active > .p-menuitem-link > .p-submenu-icon {\n transform: rotate(-180deg);\n }\n\n .p-tieredmenu[").concat(selector, "] .p-submenu-icon:before {\n content: \"\\e930\";\n }\n\n ").concat(!props.popup ? ".p-tieredmenu[".concat(selector, "] { width: 100%; }") : '', "\n}\n");
|
|
433
|
+
styleElementRef.current.innerHTML = innerHTML;
|
|
434
|
+
}
|
|
435
|
+
};
|
|
436
|
+
var destroyStyle = function destroyStyle() {
|
|
437
|
+
styleElementRef.current = DomHandler.removeInlineStyle(styleElementRef.current);
|
|
438
|
+
};
|
|
400
439
|
var onEnter = function onEnter() {
|
|
401
440
|
if (props.autoZIndex) {
|
|
402
441
|
ZIndexUtils.set('menu', menuRef.current, PrimeReact.autoZIndex, props.baseZIndex || PrimeReact.zIndex['menu']);
|
|
403
442
|
}
|
|
404
443
|
DomHandler.absolutePosition(menuRef.current, targetRef.current);
|
|
444
|
+
if (attributeSelectorState && props.breakpoint) {
|
|
445
|
+
menuRef.current.setAttribute(attributeSelectorState, '');
|
|
446
|
+
createStyle();
|
|
447
|
+
}
|
|
405
448
|
};
|
|
406
449
|
var onEntered = function onEntered() {
|
|
407
450
|
bindOverlayListener();
|
|
@@ -412,7 +455,22 @@ var TieredMenu = /*#__PURE__*/React.memo( /*#__PURE__*/React.forwardRef(function
|
|
|
412
455
|
};
|
|
413
456
|
var onExited = function onExited() {
|
|
414
457
|
ZIndexUtils.clear(menuRef.current);
|
|
458
|
+
destroyStyle();
|
|
415
459
|
};
|
|
460
|
+
useMountEffect(function () {
|
|
461
|
+
if (props.breakpoint) {
|
|
462
|
+
!attributeSelectorState && setAttributeSelectorState(UniqueComponentId());
|
|
463
|
+
}
|
|
464
|
+
});
|
|
465
|
+
useUpdateEffect(function () {
|
|
466
|
+
if (attributeSelectorState && menuRef.current) {
|
|
467
|
+
menuRef.current.setAttribute(attributeSelectorState, '');
|
|
468
|
+
createStyle();
|
|
469
|
+
}
|
|
470
|
+
return function () {
|
|
471
|
+
destroyStyle();
|
|
472
|
+
};
|
|
473
|
+
}, [attributeSelectorState, props.breakpoint]);
|
|
416
474
|
useUnmountEffect(function () {
|
|
417
475
|
ZIndexUtils.clear(menuRef.current);
|
|
418
476
|
});
|
|
@@ -460,7 +518,9 @@ var TieredMenu = /*#__PURE__*/React.memo( /*#__PURE__*/React.forwardRef(function
|
|
|
460
518
|
model: props.model,
|
|
461
519
|
root: true,
|
|
462
520
|
popup: props.popup,
|
|
463
|
-
onHide: hide
|
|
521
|
+
onHide: hide,
|
|
522
|
+
isMobileMode: isMobileMode,
|
|
523
|
+
onItemToggle: onItemToggle
|
|
464
524
|
})));
|
|
465
525
|
};
|
|
466
526
|
var element = createElement();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import*as e from"react";import
|
|
1
|
+
import*as e from"react";import n from"primereact/api";import{CSSTransition as t}from"primereact/csstransition";import{useEventListener as r,useResizeListener as o,useMountEffect as i,useUpdateEffect as l,useMatchMedia as u,useOverlayListener as a,useUnmountEffect as c}from"primereact/hooks";import{OverlayService as p}from"primereact/overlayservice";import{Portal as s}from"primereact/portal";import{ObjectUtils as m,classNames as f,DomHandler as d,IconUtils as b,UniqueComponentId as g,ZIndexUtils as h}from"primereact/utils";import{Ripple as v}from"primereact/ripple";function y(){return y=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e},y.apply(this,arguments)}function E(e){if(Array.isArray(e))return e}function w(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var r,o,i,l,u=[],a=!0,c=!1;try{if(i=(t=t.call(e)).next,0===n){if(Object(t)!==t)return;a=!1}else for(;!(a=(r=i.call(t)).done)&&(u.push(r.value),u.length!==n);a=!0);}catch(e){c=!0,o=e}finally{try{if(!a&&null!=t.return&&(l=t.return(),Object(l)!==l))return}finally{if(c)throw o}}return u}}function M(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=new Array(n);t<n;t++)r[t]=e[t];return r}function k(e,n){if(e){if("string"==typeof e)return M(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?M(e,n):void 0}}function x(){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 S(e,n){return E(e)||w(e,n)||k(e,n)||x()}var I={defaultProps:{__TYPE:"TieredMenu",id:null,model:null,popup:!1,style:null,className:null,autoZIndex:!0,baseZIndex:0,breakpoint:void 0,scrollHeight:"400px",appendTo:null,transitionOptions:null,onShow:null,onHide:null,children:void 0},getProps:function(e){return m.getMergedProps(e,I.defaultProps)},getOtherProps:function(e){return m.getDiffProps(e,I.defaultProps)}},T=e.memo((function(n){var t=S(e.useState(null),2),u=t[0],a=t[1],c=e.useRef(null),p=S(r({type:"click",listener:function(e){n.isMobileMode||!c.current||c.current.contains(e.target)||a(null)}}),1)[0],s=S(o({listener:function(){!n.isMobileMode&&a(null)}}),1)[0],g=function(){if(c.current){var e=c.current.parentElement,n=d.getOffset(e),t=d.getViewport(),r=c.current.offsetParent?c.current.offsetWidth:d.getHiddenElementOuterWidth(c.current),o=d.getOuterWidth(e.children[0]),i=parseInt(n.top,10)+c.current.offsetHeight-d.getWindowScrollTop();c.current.style.top=i>t.height?t.height-i+"px":"0px",parseInt(n.left,10)+o+r>t.width-d.calculateScrollbarWidth()&&d.addClass(c.current,"p-submenu-list-flipped")}},h=function(e,t){t.disabled||n.isMobileMode?e.preventDefault():n.root?(u||n.popup)&&a(t):a(t)},y=function(e,t){t.disabled?e.preventDefault():(t.url||e.preventDefault(),t.command&&t.command({originalEvent:e,item:t}),(n.root||n.isMobileMode)&&t.items&&a(u&&t===u?null:t),t.items||x(e))},E=function(e,t){var r=e.currentTarget.parentElement;switch(e.which){case 40:var o=M(r);o&&o.children[0].focus(),e.preventDefault();break;case 38:var i=k(r);i&&i.children[0].focus(),e.preventDefault();break;case 39:t.items&&(a(t),setTimeout((function(){r.children[1].children[0].children[0].focus()}),50)),e.preventDefault()}n.onKeyDown&&n.onKeyDown(e,r)},w=function(e,n){37===e.which&&(a(null),n.parentElement.previousElementSibling.focus())},M=function e(n){var t=n.nextElementSibling;return t?d.hasClass(t,"p-disabled")||!d.hasClass(t,"p-menuitem")?e(t):t:null},k=function e(n){var t=n.previousElementSibling;return t?d.hasClass(t,"p-disabled")||!d.hasClass(t,"p-menuitem")?e(t):t:null},x=function(e){n.isMobileMode&&!n.popup||(a(null),n.onLeafClick&&n.onLeafClick(e),n.onHide&&n.onHide(e))};i((function(){p(),s()})),l((function(){n.parentActive||a(null),n.root||!n.parentActive||n.isMobileMode||g()}),[n.parentActive]),l((function(){n.onItemToggle&&n.onItemToggle()}),[u]);var I=function(n){return e.createElement("li",{key:"separator_"+n,className:"p-menu-separator",role:"separator"})},N=function(t){return t.items?e.createElement(T,{menuProps:n.menuProps,model:t.items,onLeafClick:x,popup:n.popup,onKeyDown:w,parentActive:t===u,isMobileMode:n.isMobileMode,onItemToggle:n.onItemToggle}):null},P=function(t,r){if(!1===t.visible)return null;var o=t.style,i=t.disabled,l=t.icon,a=t.label,c=t.items,p=t.target,s=t.url,d=t.template,g=a+"_"+r,w=u===t,M=f("p-menuitem",{"p-menuitem-active":w},t.className),k=f("p-menuitem-link",{"p-disabled":i}),x=f("p-menuitem-icon",l),S="p-submenu-icon pi pi-angle-right",I=b.getJSXIcon(l,{className:"p-menuitem-icon"},{props:n.menuProps}),T=a&&e.createElement("span",{className:"p-menuitem-text"},a),P=c&&e.createElement("span",{className:S}),O=N(t),C=e.createElement("a",{href:s||"#",className:k,target:p,role:"menuitem","aria-haspopup":null!=c,onClick:function(e){return y(e,t)},onKeyDown:function(e){return E(e,t)},"aria-disabled":i},I,T,P,e.createElement(v,null));d&&(C=m.getJSXElement(d,t,{onClick:function(e){return y(e,t)},onKeyDown:function(e){return E(e,t)},className:k,labelClassName:"p-menuitem-text",iconClassName:x,submenuIconClassName:S,element:C,props:n,active:w,disabled:i}));return e.createElement("li",{key:g,id:t,className:M,style:o,onMouseEnter:function(e){return h(e,t)},role:"none"},C,O)},O=function(e,n){return e.separator?I(n):P(e,n)},C=f({"p-submenu-list":!n.root}),H=n.model?n.model.map(O):null;return e.createElement("ul",{ref:c,className:C,role:n.root?"menubar":"menu","aria-orientation":"horizontal"},H)}));T.displayName="TieredMenuSub";var N=e.memo(e.forwardRef((function(r,o){var m=I.getProps(r),b=S(e.useState(!m.popup),2),v=b[0],E=b[1],w=S(e.useState(null),2),M=w[0],k=w[1],x=e.useRef(null),N=e.useRef(null),P=e.useRef(null),O=u("screen and (max-width: ".concat(m.breakpoint,")"),!!m.breakpoint),C=S(a({target:N,overlay:x,listener:function(e,n){n.valid&&K(e)},when:v}),2),H=C[0],A=C[1],D=function(e){m.popup&&p.emit("overlay-click",{originalEvent:e,target:N.current})},j=function(e){m.popup&&(v?K(e):R(e))},R=function(e){N.current=e.currentTarget,E(!0),m.onShow&&m.onShow(e)},K=function(e){m.popup&&(N.current=e.currentTarget,E(!1),m.onHide&&m.onHide(e))},W=function(){m.popup&&O&&d.absolutePosition(x.current,N.current)},Z=function(){if(!P.current){P.current=d.createInlineStyle(n.nonce);var e="".concat(M),t="\n@media screen and (max-width: ".concat(m.breakpoint,") {\n .p-tieredmenu[").concat(e,"] > ul {\n max-height: ").concat(m.scrollHeight,";\n overflow: ").concat(m.scrollHeight?"auto":"",";\n }\n\n .p-tieredmenu[").concat(e,"] .p-submenu-list {\n position: relative;\n }\n\n .p-tieredmenu[").concat(e,"] .p-menuitem-active > .p-submenu-list {\n left: 0 !important;\n box-shadow: none;\n border-radius: 0;\n padding: 0 0 0 calc(var(--inline-spacing) * 2); /* @todo */\n }\n\n .p-tieredmenu[").concat(e,"] .p-menuitem-active > .p-menuitem-link > .p-submenu-icon {\n transform: rotate(-180deg);\n }\n\n .p-tieredmenu[").concat(e,'] .p-submenu-icon:before {\n content: "\\e930";\n }\n\n ').concat(m.popup?"":".p-tieredmenu[".concat(e,"] { width: 100%; }"),"\n}\n");P.current.innerHTML=t}},L=function(){P.current=d.removeInlineStyle(P.current)},_=function(){m.autoZIndex&&h.set("menu",x.current,n.autoZIndex,m.baseZIndex||n.zIndex.menu),d.absolutePosition(x.current,N.current),M&&m.breakpoint&&(x.current.setAttribute(M,""),Z())},z=function(){H()},J=function(){N.current=null,A()},X=function(){h.clear(x.current),L()};i((function(){m.breakpoint&&!M&&k(g())})),l((function(){return M&&x.current&&(x.current.setAttribute(M,""),Z()),function(){L()}}),[M,m.breakpoint]),c((function(){h.clear(x.current)})),e.useImperativeHandle(o,(function(){return{props:m,toggle:j,show:R,hide:K,getElement:function(){return x.current}}}));var U,V,Y=(U=I.getOtherProps(m),V=f("p-tieredmenu p-component",{"p-tieredmenu-overlay":m.popup,"p-input-filled":"filled"===n.inputStyle,"p-ripple-disabled":!1===n.ripple},m.className),e.createElement(t,{nodeRef:x,classNames:"p-connected-overlay",in:v,timeout:{enter:120,exit:100},options:m.transitionOptions,unmountOnExit:!0,onEnter:_,onEntered:z,onExit:J,onExited:X},e.createElement("div",y({ref:x,id:m.id,className:V,style:m.style},U,{onClick:D}),e.createElement(T,{menuProps:m,model:m.model,root:!0,popup:m.popup,onHide:K,isMobileMode:O,onItemToggle:W}))));return m.popup?e.createElement(s,{element:Y,appendTo:m.appendTo}):Y})));N.displayName="TieredMenu";export{N as TieredMenu};
|