@royaloperahouse/chord 1.12.4-b-chord-development → 1.12.4-d-chord-development

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.
@@ -4075,9 +4075,14 @@ var Footer = function Footer(_ref) {
4075
4075
  }, additionalInfo)))));
4076
4076
  };
4077
4077
 
4078
+ var IOSPlatforms = ['iPhone', 'iPad'];
4079
+ var isIOSDevice = function isIOSDevice() {
4080
+ return IOSPlatforms.includes(navigator.platform);
4081
+ };
4082
+
4078
4083
  var _templateObject$x, _templateObject2$i, _templateObject3$b, _templateObject4$6, _templateObject5$4, _templateObject6$4;
4079
4084
  var LIST_ITEM_GAP = 32;
4080
- var AnchorTabbarWrapper = /*#__PURE__*/styled__default.div(_templateObject$x || (_templateObject$x = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n display: block;\n position: sticky;\n position: -webkit-sticky;\n top: 0;\n background-color: var(--base-color-white);\n z-index: ", ";\n"])), zIndexes.anchor);
4085
+ var AnchorTabbarWrapper = /*#__PURE__*/styled__default.div(_templateObject$x || (_templateObject$x = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n position: sticky;\n width: 100%;\n top: 0;\n background-color: var(--base-color-white);\n z-index: ", ";\n"])), zIndexes.anchor);
4081
4086
  var TabsGrid = /*#__PURE__*/styled__default(Grid)(_templateObject2$i || (_templateObject2$i = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n height: var(--anchor-tabs-height);\n"])));
4082
4087
  var TabsWrapper = /*#__PURE__*/styled__default.div(_templateObject3$b || (_templateObject3$b = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n display: flex;\n"])));
4083
4088
  var TabsList = /*#__PURE__*/styled__default.ul(_templateObject4$6 || (_templateObject4$6 = /*#__PURE__*/_taggedTemplateLiteralLoose(["\n width: ", ";\n display: flex;\n gap: ", "px;\n justify-content: ", ";\n align-items: center;\n list-style: none;\n padding: 0;\n margin: 0;\n height: var(--anchor-tabs-height);\n white-space: nowrap;\n overflow: scroll;\n scrollbar-width: none;\n ::-webkit-scrollbar {\n display: none;\n }\n scroll-behavior: smooth;\n\n @media ", " {\n background: linear-gradient(\n 135deg,\n rgba(255, 255, 255, 1) 0%,\n rgba(255, 255, 255, 0.48) 85%,\n rgba(235, 235, 235, 0.4) 99%,\n rgba(255, 255, 255, 0.39) 100%\n );\n }\n\n @media ", " {\n & {\n width: ", ";\n }\n }\n"])), function (_ref) {
@@ -4102,8 +4107,10 @@ var _excluded$7 = ["id", "text"];
4102
4107
  var AnchorTabBar = function AnchorTabBar(_ref) {
4103
4108
  var tabs = _ref.tabs,
4104
4109
  onTabClick = _ref.onTabClick,
4105
- activeTab = _ref.activeTab;
4110
+ activeTab = _ref.activeTab,
4111
+ topOffsetForIOS = _ref.topOffsetForIOS;
4106
4112
  var tabListRef = React.useRef(null);
4113
+ var wrapperRef = React.useRef(null);
4107
4114
 
4108
4115
  var _useState = React.useState(activeTab || ''),
4109
4116
  selectedItem = _useState[0],
@@ -4121,6 +4128,7 @@ var AnchorTabBar = function AnchorTabBar(_ref) {
4121
4128
  canScrollToRight = _useState4[0],
4122
4129
  setCanScrollToRight = _useState4[1];
4123
4130
 
4131
+ var timer = null;
4124
4132
  var hasTwoArrows = canScrollToRight && canScrollToLeft;
4125
4133
 
4126
4134
  var isSelectedItem = function isSelectedItem(id) {
@@ -4149,6 +4157,46 @@ var AnchorTabBar = function AnchorTabBar(_ref) {
4149
4157
  return width;
4150
4158
  };
4151
4159
 
4160
+ var changeWrapperVisibilityOnOIS = function changeWrapperVisibilityOnOIS(showWrapper, topOffset) {
4161
+ if (showWrapper === void 0) {
4162
+ showWrapper = false;
4163
+ }
4164
+
4165
+ var wrapperEl = wrapperRef.current;
4166
+ wrapperEl.style.position = 'absolute';
4167
+ wrapperEl.style.visibility = showWrapper && topOffset !== undefined ? 'visible' : 'hidden';
4168
+ if (showWrapper && topOffset !== undefined) wrapperEl.style.top = topOffset + "px";
4169
+ };
4170
+
4171
+ var handleScrollOnIOS = function handleScrollOnIOS() {
4172
+ var topOffset = topOffsetForIOS;
4173
+
4174
+ if (wrapperRef.current && window.pageYOffset > topOffset) {
4175
+ changeWrapperVisibilityOnOIS();
4176
+ } else if (wrapperRef.current && window.pageYOffset < topOffset) {
4177
+ changeWrapperVisibilityOnOIS(true, 0);
4178
+ }
4179
+
4180
+ if (timer !== null) clearTimeout(timer);
4181
+ timer = setTimeout(function () {
4182
+ if (window.pageYOffset > topOffset && wrapperRef.current) {
4183
+ changeWrapperVisibilityOnOIS(true, window.pageYOffset - topOffset);
4184
+ }
4185
+ }, 300);
4186
+ }; // We use this behavior only on iOS devices because there is a known issue that
4187
+ // sticky elements lose their stickiness when a keyboard appears on the screen
4188
+
4189
+
4190
+ React.useEffect(function () {
4191
+ if (topOffsetForIOS && isIOSDevice()) {
4192
+ document.addEventListener('scroll', handleScrollOnIOS);
4193
+ return function () {
4194
+ document.removeEventListener('scroll', handleScrollOnIOS);
4195
+ };
4196
+ }
4197
+
4198
+ return;
4199
+ }, []);
4152
4200
  React.useEffect(function () {
4153
4201
  setTimeout(function () {
4154
4202
  if (tabListRef.current) tabListRef.current.scrollLeft += getScrollWidth();
@@ -4245,7 +4293,10 @@ var AnchorTabBar = function AnchorTabBar(_ref) {
4245
4293
  setCanScrollToRight(scrollLeft + clientWidth + LIST_ITEM_GAP < scrollWidth);
4246
4294
  };
4247
4295
 
4248
- return /*#__PURE__*/React__default.createElement(AnchorTabbarWrapper, null, /*#__PURE__*/React__default.createElement(TabsGrid, null, /*#__PURE__*/React__default.createElement(GridItem, {
4296
+ return /*#__PURE__*/React__default.createElement(AnchorTabbarWrapper, {
4297
+ ref: wrapperRef,
4298
+ id: "AnchorTabbarWrapper"
4299
+ }, /*#__PURE__*/React__default.createElement(TabsGrid, null, /*#__PURE__*/React__default.createElement(GridItem, {
4249
4300
  columnStartDesktop: tabsColumnStart,
4250
4301
  columnSpanDesktop: tabsColumnSpan,
4251
4302
  columnStartDevice: 2,