@royaloperahouse/harmonic 0.4.1-i → 0.4.1-j
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/atoms/ControlledDropdown/ControlledDropdown.d.ts +2 -2
- package/dist/components/atoms/ControlledDropdown/ControlledDropdown.style.d.ts +2 -2
- package/dist/harmonic.cjs.development.js +72 -41
- package/dist/harmonic.cjs.development.js.map +1 -1
- package/dist/harmonic.cjs.production.min.js +1 -1
- package/dist/harmonic.cjs.production.min.js.map +1 -1
- package/dist/harmonic.esm.js +73 -42
- package/dist/harmonic.esm.js.map +1 -1
- package/dist/types/types.d.ts +4 -0
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import React from 'react';
|
|
2
2
|
import { IControlledDropdownProps } from '../../../types/types';
|
|
3
|
-
declare const ControlledDropdown:
|
|
3
|
+
declare const ControlledDropdown: React.ForwardRefExoticComponent<IControlledDropdownProps & React.RefAttributes<HTMLDivElement>>;
|
|
4
4
|
export default ControlledDropdown;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { IControlledDropdownHeaderProps } from '../../../types/types';
|
|
2
2
|
export declare const ControlledDropdownWrapper: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
3
|
-
export declare const ControlledDropdownHeaderContainer: import("styled-components").StyledComponent<"
|
|
4
|
-
export declare const ControlledDropdownHeaderContainerLink: import("styled-components").StyledComponent<"
|
|
3
|
+
export declare const ControlledDropdownHeaderContainer: import("styled-components").StyledComponent<"button", any, IControlledDropdownHeaderProps, never>;
|
|
4
|
+
export declare const ControlledDropdownHeaderContainerLink: import("styled-components").StyledComponent<"button", any, IControlledDropdownHeaderProps & {
|
|
5
5
|
as: string;
|
|
6
6
|
}, "as">;
|
|
7
7
|
export declare const IconWrapper: import("styled-components").StyledComponent<"span", any, {}, never>;
|
|
@@ -2939,7 +2939,7 @@ var OptionsContainer = /*#__PURE__*/styled__default.div(_templateObject3 || (_te
|
|
|
2939
2939
|
|
|
2940
2940
|
var _templateObject$7, _templateObject2$5, _templateObject3$1, _templateObject4;
|
|
2941
2941
|
var ControlledDropdownWrapper = /*#__PURE__*/styled__default.div(_templateObject$7 || (_templateObject$7 = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n position: relative;\n width: fit-content;\n"])));
|
|
2942
|
-
var ControlledDropdownHeaderContainer = /*#__PURE__*/styled__default.
|
|
2942
|
+
var ControlledDropdownHeaderContainer = /*#__PURE__*/styled__default.button(_templateObject2$5 || (_templateObject2$5 = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n all: unset;\n\n display: flex;\n gap: 6px;\n border-bottom: 1px solid transparent;\n height: 24px;\n line-height: 24px;\n font-size: var(--harmonic-font-size-navigation);\n font-family: var(--font-family-sans);\n font-weight: var(--font-weight-navigation);\n letter-spacing: var(--harmonic-letter-spacing-navigation);\n color: var(--color-primary-black);\n text-decoration: none;\n cursor: pointer;\n width: max-content;\n\n &:focus {\n outline: 2px solid var(--color-primary-black);\n outline-offset: 2px;\n }\n\n ", "\n"])), function (_ref) {
|
|
2943
2943
|
var active = _ref.active;
|
|
2944
2944
|
if (active) {
|
|
2945
2945
|
return "\n & {\n color: var(--color-primary-red);\n }\n && svg path {\n fill: var(--color-primary-red);\n } \n ";
|
|
@@ -2947,12 +2947,12 @@ var ControlledDropdownHeaderContainer = /*#__PURE__*/styled__default.span(_templ
|
|
|
2947
2947
|
return '';
|
|
2948
2948
|
});
|
|
2949
2949
|
var ControlledDropdownHeaderContainerLink = /*#__PURE__*/styled__default(ControlledDropdownHeaderContainer).attrs({
|
|
2950
|
-
as: '
|
|
2950
|
+
as: 'button'
|
|
2951
2951
|
})(_templateObject3$1 || (_templateObject3$1 = /*#__PURE__*/_taggedTemplateLiteralLoose([""])));
|
|
2952
2952
|
var IconWrapper = /*#__PURE__*/styled__default.span(_templateObject4 || (_templateObject4 = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n width: 24px;\n height: 24px;\n\n span > svg path {\n fill: var(--color-primary-black);\n }\n"])));
|
|
2953
2953
|
|
|
2954
2954
|
/* eslint-disable no-useless-return */
|
|
2955
|
-
var ControlledDropdown = function
|
|
2955
|
+
var ControlledDropdown = /*#__PURE__*/React__default.forwardRef(function (_ref, ref) {
|
|
2956
2956
|
var text = _ref.text,
|
|
2957
2957
|
options = _ref.options,
|
|
2958
2958
|
active = _ref.active,
|
|
@@ -2960,32 +2960,22 @@ var ControlledDropdown = function ControlledDropdown(_ref) {
|
|
|
2960
2960
|
onOptionClick = _ref.onOptionClick,
|
|
2961
2961
|
_onMouseEnter = _ref.onMouseEnter,
|
|
2962
2962
|
_onMouseLeave = _ref.onMouseLeave,
|
|
2963
|
+
_onFocusLeave = _ref.onFocusLeave,
|
|
2963
2964
|
onReset = _ref.onReset,
|
|
2964
2965
|
_onFocus = _ref.onFocus,
|
|
2965
2966
|
_onBlur = _ref.onBlur,
|
|
2966
2967
|
className = _ref.className;
|
|
2967
|
-
|
|
2968
|
-
var
|
|
2968
|
+
ControlledDropdown.displayName = 'ControlledDropdown';
|
|
2969
|
+
var internalRef = React.useRef(null);
|
|
2970
|
+
React.useImperativeHandle(ref, function () {
|
|
2971
|
+
return internalRef.current;
|
|
2972
|
+
});
|
|
2973
|
+
var resetHandler = function resetHandler() {
|
|
2969
2974
|
return onReset == null ? void 0 : onReset();
|
|
2970
|
-
}
|
|
2971
|
-
React.
|
|
2972
|
-
|
|
2973
|
-
|
|
2974
|
-
var _ref$current;
|
|
2975
|
-
if (ref != null && (_ref$current = ref.current) != null && _ref$current.contains(e.target)) {
|
|
2976
|
-
return;
|
|
2977
|
-
} else if (active) {
|
|
2978
|
-
resetHandler();
|
|
2979
|
-
}
|
|
2980
|
-
};
|
|
2981
|
-
document.addEventListener('click', mouseClickHandler);
|
|
2982
|
-
return function () {
|
|
2983
|
-
document.removeEventListener('click', mouseClickHandler);
|
|
2984
|
-
};
|
|
2985
|
-
}
|
|
2986
|
-
// eslint-disable-next-line consistent-return
|
|
2987
|
-
return;
|
|
2988
|
-
}, [ref, resetHandler, active]);
|
|
2975
|
+
};
|
|
2976
|
+
var isDropdown = React.useMemo(function () {
|
|
2977
|
+
return !!(options != null && options.length);
|
|
2978
|
+
}, [options]);
|
|
2989
2979
|
var handleOptionKeyDown = function handleOptionKeyDown(e, link) {
|
|
2990
2980
|
if (e.key === 'Enter') {
|
|
2991
2981
|
onOptionClick == null || onOptionClick(link);
|
|
@@ -3005,13 +2995,15 @@ var ControlledDropdown = function ControlledDropdown(_ref) {
|
|
|
3005
2995
|
_onBlur == null || _onBlur();
|
|
3006
2996
|
}
|
|
3007
2997
|
};
|
|
3008
|
-
var isDropdown = !!(options != null && options.length);
|
|
3009
2998
|
var wrapperEvents = {
|
|
3010
2999
|
onMouseEnter: function onMouseEnter() {
|
|
3011
3000
|
return _onMouseEnter == null ? void 0 : _onMouseEnter();
|
|
3012
3001
|
},
|
|
3013
3002
|
onMouseLeave: function onMouseLeave() {
|
|
3014
3003
|
return _onMouseLeave == null ? void 0 : _onMouseLeave();
|
|
3004
|
+
},
|
|
3005
|
+
onFocusLeave: function onFocusLeave() {
|
|
3006
|
+
return _onFocusLeave == null ? void 0 : _onFocusLeave();
|
|
3015
3007
|
}
|
|
3016
3008
|
};
|
|
3017
3009
|
var headerEvents = {
|
|
@@ -3027,21 +3019,51 @@ var ControlledDropdown = function ControlledDropdown(_ref) {
|
|
|
3027
3019
|
},
|
|
3028
3020
|
onKeyDown: handleHeaderKeyDown
|
|
3029
3021
|
};
|
|
3022
|
+
React.useEffect(function () {
|
|
3023
|
+
var mouseEvent = function mouseEvent(e) {
|
|
3024
|
+
var _internalRef$current;
|
|
3025
|
+
if (internalRef != null && (_internalRef$current = internalRef.current) != null && _internalRef$current.contains(e.target)) return;
|
|
3026
|
+
if (active) resetHandler();
|
|
3027
|
+
};
|
|
3028
|
+
if (window.innerWidth > breakpoints.sm) {
|
|
3029
|
+
document.addEventListener('click', mouseEvent);
|
|
3030
|
+
}
|
|
3031
|
+
return function () {
|
|
3032
|
+
document.removeEventListener('click', mouseEvent);
|
|
3033
|
+
};
|
|
3034
|
+
}, [resetHandler, active]);
|
|
3035
|
+
React.useEffect(function () {
|
|
3036
|
+
var handleFocusOut = function handleFocusOut(e) {
|
|
3037
|
+
if (internalRef.current && !internalRef.current.contains(e.relatedTarget)) {
|
|
3038
|
+
_onFocusLeave == null || _onFocusLeave();
|
|
3039
|
+
}
|
|
3040
|
+
};
|
|
3041
|
+
var node = internalRef.current;
|
|
3042
|
+
if (node) node.addEventListener('focusout', handleFocusOut);
|
|
3043
|
+
return function () {
|
|
3044
|
+
return node == null ? void 0 : node.removeEventListener('focusout', handleFocusOut);
|
|
3045
|
+
};
|
|
3046
|
+
}, [_onFocusLeave]);
|
|
3030
3047
|
return /*#__PURE__*/React__default.createElement(ControlledDropdownWrapper, Object.assign({
|
|
3031
|
-
ref:
|
|
3048
|
+
ref: internalRef
|
|
3032
3049
|
}, wrapperEvents, {
|
|
3033
3050
|
className: className
|
|
3034
3051
|
}), isDropdown ? (/*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(ControlledDropdownHeaderContainer, Object.assign({
|
|
3035
3052
|
active: active
|
|
3036
3053
|
}, headerEvents, {
|
|
3037
|
-
|
|
3038
|
-
|
|
3054
|
+
"data-testid": "span-container",
|
|
3055
|
+
role: "menuitem",
|
|
3056
|
+
"aria-controls": "dropdown-menu",
|
|
3057
|
+
"aria-haspopup": "menu",
|
|
3058
|
+
"aria-expanded": active
|
|
3039
3059
|
}), text, /*#__PURE__*/React__default.createElement(IconWrapper, {
|
|
3040
3060
|
"data-testid": "dropdown-icon"
|
|
3041
3061
|
}, /*#__PURE__*/React__default.createElement(Icon, {
|
|
3042
3062
|
iconName: "DropdownArrow"
|
|
3043
3063
|
}))), active && options ? (/*#__PURE__*/React__default.createElement(OptionsContainer, {
|
|
3044
|
-
withOptionsInMobile: true
|
|
3064
|
+
withOptionsInMobile: true,
|
|
3065
|
+
role: "menu",
|
|
3066
|
+
id: "dropdown-menu"
|
|
3045
3067
|
}, options.map(function (optionItem, index) {
|
|
3046
3068
|
return /*#__PURE__*/React__default.createElement(OptionItem, {
|
|
3047
3069
|
key: "key-" + index + "-" + optionItem.option,
|
|
@@ -3055,15 +3077,17 @@ var ControlledDropdown = function ControlledDropdown(_ref) {
|
|
|
3055
3077
|
onBlur: function onBlur() {
|
|
3056
3078
|
return handleOptionBlur(index);
|
|
3057
3079
|
},
|
|
3058
|
-
href: optionItem.optionLink
|
|
3080
|
+
href: optionItem.optionLink,
|
|
3081
|
+
role: "menuitem"
|
|
3059
3082
|
}, optionItem.option);
|
|
3060
3083
|
}))) : null)) : (/*#__PURE__*/React__default.createElement(ControlledDropdownHeaderContainerLink, Object.assign({
|
|
3061
3084
|
active: active
|
|
3062
3085
|
}, headerEvents, {
|
|
3063
3086
|
"data-testid": "link-container",
|
|
3087
|
+
role: "menuitem",
|
|
3064
3088
|
tabIndex: 0
|
|
3065
3089
|
}), text)));
|
|
3066
|
-
};
|
|
3090
|
+
});
|
|
3067
3091
|
|
|
3068
3092
|
var _templateObject$8;
|
|
3069
3093
|
var Grid = /*#__PURE__*/styled__default.div(_templateObject$8 || (_templateObject$8 = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n display: grid;\n grid-template-columns: var(--grid-template-columns);\n grid-template-rows: max-content;\n gap: var(--grid-column-gap);\n margin: 0;\n"])));
|
|
@@ -5582,6 +5606,7 @@ var Tabs = function Tabs(_ref) {
|
|
|
5582
5606
|
var _useState3 = React.useState(-1),
|
|
5583
5607
|
hoverOverDropdown = _useState3[0],
|
|
5584
5608
|
setHoverOverDropdown = _useState3[1];
|
|
5609
|
+
var dropdownRefs = React.useRef([]);
|
|
5585
5610
|
var onClickHandler = function onClickHandler(value) {
|
|
5586
5611
|
setOpenMenu(value);
|
|
5587
5612
|
if (onShowMenu) {
|
|
@@ -5621,23 +5646,25 @@ var Tabs = function Tabs(_ref) {
|
|
|
5621
5646
|
setHoverOverDropdown(-1);
|
|
5622
5647
|
}
|
|
5623
5648
|
};
|
|
5624
|
-
var
|
|
5625
|
-
|
|
5649
|
+
var onDropdownFocusLeave = function onDropdownFocusLeave() {
|
|
5650
|
+
onResetActive();
|
|
5626
5651
|
};
|
|
5627
|
-
var
|
|
5628
|
-
var
|
|
5629
|
-
|
|
5652
|
+
var handleBlur = function handleBlur(index) {
|
|
5653
|
+
var currentDropdown = dropdownRefs.current[index];
|
|
5654
|
+
var active = document.activeElement;
|
|
5655
|
+
if (currentDropdown && (!active || !currentDropdown.contains(active))) {
|
|
5630
5656
|
onResetActive();
|
|
5631
5657
|
}
|
|
5632
5658
|
};
|
|
5633
5659
|
return /*#__PURE__*/React__default.createElement(TabsContainer, {
|
|
5660
|
+
role: "menubar",
|
|
5634
5661
|
className: className
|
|
5635
5662
|
}, /*#__PURE__*/React__default.createElement(ItemsContainer, {
|
|
5636
5663
|
showMenu: showMenu
|
|
5637
5664
|
}, items.map(function (item, index) {
|
|
5638
5665
|
return /*#__PURE__*/React__default.createElement(ControlledDropdown, {
|
|
5639
5666
|
key: "key-" + item.title,
|
|
5640
|
-
text: item.title,
|
|
5667
|
+
text: item.title || '',
|
|
5641
5668
|
options: item.options,
|
|
5642
5669
|
onClick: function onClick() {
|
|
5643
5670
|
return onDropdownClick(index, item.titleLink);
|
|
@@ -5649,14 +5676,17 @@ var Tabs = function Tabs(_ref) {
|
|
|
5649
5676
|
onMouseLeave: function onMouseLeave() {
|
|
5650
5677
|
return onDropdownMouseLeave();
|
|
5651
5678
|
},
|
|
5652
|
-
|
|
5653
|
-
return
|
|
5679
|
+
onFocusLeave: function onFocusLeave() {
|
|
5680
|
+
return onDropdownFocusLeave();
|
|
5654
5681
|
},
|
|
5655
5682
|
onBlur: function onBlur() {
|
|
5656
|
-
return
|
|
5683
|
+
return handleBlur(index);
|
|
5657
5684
|
},
|
|
5658
5685
|
onReset: onResetActive,
|
|
5659
|
-
active: isActiveDropdown(index)
|
|
5686
|
+
active: isActiveDropdown(index),
|
|
5687
|
+
ref: function ref(el) {
|
|
5688
|
+
dropdownRefs.current[index] = el;
|
|
5689
|
+
}
|
|
5660
5690
|
});
|
|
5661
5691
|
})), !showMenu && (/*#__PURE__*/React__default.createElement(MenuContainer$1, null, openMenu ? (/*#__PURE__*/React__default.createElement("a", {
|
|
5662
5692
|
"data-testid": "mobile-menu-close",
|
|
@@ -8919,6 +8949,7 @@ var PageHeading = function PageHeading(_ref) {
|
|
|
8919
8949
|
"data-testid": "page-heading-text"
|
|
8920
8950
|
}, /*#__PURE__*/React__default.createElement(BodyCopyHarmonic, {
|
|
8921
8951
|
color: "white",
|
|
8952
|
+
size: "large",
|
|
8922
8953
|
dangerouslySetInnerHTML: {
|
|
8923
8954
|
__html: truncatedText
|
|
8924
8955
|
}
|