@razorpay/blade 10.3.0 → 10.3.1

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.
@@ -4486,11 +4486,17 @@ declare type DropdownProps = {
4486
4486
  } & TestID$1 & StyledPropsBlade$1;
4487
4487
  declare type DropdownOverlayProps = {
4488
4488
  children: React.ReactElement[] | React.ReactElement;
4489
+ /**
4490
+ * Sets the z-index of the DropdownOverlay
4491
+ *
4492
+ * @default 1001
4493
+ */
4494
+ zIndex?: number;
4489
4495
  } & TestID$1;
4490
4496
 
4491
4497
  declare const Dropdown: ({ children, selectionType, onDismiss, testID, ...styledProps }: DropdownProps) => React__default.ReactElement;
4492
4498
 
4493
- declare const DropdownOverlay: ({ children, testID }: DropdownOverlayProps) => React__default.ReactElement;
4499
+ declare const DropdownOverlay: ({ children, testID, zIndex, }: DropdownOverlayProps) => React__default.ReactElement | null;
4494
4500
 
4495
4501
  declare type DropdownButtonProps = ButtonProps & {
4496
4502
  onBlur?: BaseButtonProps['onBlur'];
@@ -5344,6 +5350,7 @@ declare type BaseInputCommonProps = FormInputLabelProps & FormInputValidationPro
5344
5350
  * true if popup is in expanded state
5345
5351
  */
5346
5352
  isPopupExpanded?: boolean;
5353
+ setInputWrapperRef?: (node: HTMLDivElement) => void;
5347
5354
  /**
5348
5355
  * sets the autocapitalize behavior for the input
5349
5356
  */
@@ -5,12 +5,11 @@ import _toConsumableArray$1 from '@babel/runtime/helpers/toConsumableArray';
5
5
  import _objectWithoutProperties$1 from '@babel/runtime/helpers/objectWithoutProperties';
6
6
  import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
7
7
  import styled, { ThemeProvider, css, keyframes } from 'styled-components';
8
- import { FloatingDelayGroup, useFloating, detectOverflow, autoUpdate, FloatingOverlay, FloatingPortal, FloatingFocusManager, shift, flip, offset, arrow, useTransitionStyles, useDelayGroup, useDelayGroupContext, useHover, useFocus, useRole, useInteractions, FloatingArrow } from '@floating-ui/react';
8
+ import { FloatingDelayGroup, useFloating, offset, flip, size as size$1, autoUpdate, useTransitionStyles, FloatingOverlay, FloatingPortal, FloatingFocusManager, shift, arrow, useDelayGroup, useDelayGroupContext, useHover, useFocus, useRole, useInteractions, FloatingArrow } from '@floating-ui/react';
9
9
  import _typeof from '@babel/runtime/helpers/typeof';
10
10
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
11
11
  import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
12
12
  import _createClass from '@babel/runtime/helpers/createClass';
13
- import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
14
13
 
15
14
  /*
16
15
  * This content is licensed according to the W3C Software License at
@@ -740,6 +739,9 @@ var DropdownContext = /*#__PURE__*/React__default.createContext({
740
739
  },
741
740
  triggererRef: {
742
741
  current: null
742
+ },
743
+ triggererWrapperRef: {
744
+ current: null
743
745
  }
744
746
  });
745
747
  var searchTimeout;
@@ -1355,27 +1357,6 @@ var fontWeight = {
1355
1357
  }
1356
1358
  });
1357
1359
 
1358
- /**
1359
- * When any of the values are changed here, do change the jsdoc comments in BaseBox/types/spacingTypes.ts as well
1360
- *
1361
- * {@link ../../components/Box/BaseBox/types/spacingTypes.ts}
1362
- */
1363
-
1364
- var spacing = {
1365
- 0: 0,
1366
- 1: 2,
1367
- 2: 4,
1368
- 3: 8,
1369
- 4: 12,
1370
- 5: 16,
1371
- 6: 20,
1372
- 7: 24,
1373
- 8: 32,
1374
- 9: 40,
1375
- 10: 48,
1376
- 11: 56
1377
- };
1378
-
1379
1360
  /**
1380
1361
  * Size tokens are currently not exposed for users (therefore not available in theme)
1381
1362
  */
@@ -1432,6 +1413,8 @@ var size = {
1432
1413
  160: 160,
1433
1414
  /** 200 px */
1434
1415
  200: 200,
1416
+ /** 240 px */
1417
+ 240: 240,
1435
1418
  /** 300 px */
1436
1419
  300: 300,
1437
1420
  /** 360 px */
@@ -19296,6 +19279,11 @@ var _Dropdown = function _Dropdown(_ref) {
19296
19279
  shouldIgnoreBlurAnimation = _React$useState14[0],
19297
19280
  setShouldIgnoreBlurAnimation = _React$useState14[1];
19298
19281
  var triggererRef = React__default.useRef(null);
19282
+ /**
19283
+ * In inputs, actual input is smaller than the visible input wrapper.
19284
+ * You can set this reference in such cases so floating ui calculations happen correctly
19285
+ * */
19286
+ var triggererWrapperRef = React__default.useRef(null);
19299
19287
  var actionListItemRef = React__default.useRef(null);
19300
19288
  var _React$useState15 = React__default.useState(false),
19301
19289
  _React$useState16 = _slicedToArray(_React$useState15, 2),
@@ -19380,6 +19368,7 @@ var _Dropdown = function _Dropdown(_ref) {
19380
19368
  setIsKeydownPressed: setIsKeydownPressed,
19381
19369
  dropdownBaseId: dropdownBaseId,
19382
19370
  triggererRef: triggererRef,
19371
+ triggererWrapperRef: triggererWrapperRef,
19383
19372
  actionListItemRef: actionListItemRef,
19384
19373
  selectionType: selectionType,
19385
19374
  hasFooterAction: hasFooterAction,
@@ -19444,157 +19433,75 @@ var StyledDropdownOverlay = /*#__PURE__*/styled(BaseBox).withConfig({
19444
19433
 
19445
19434
  function ownKeys$W(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
19446
19435
  function _objectSpread$V(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$W(Object(source), !0).forEach(function (key) { _defineProperty$1(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$W(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
19447
- function _regeneratorRuntime() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, "_invoke", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, "_invoke", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var methodName = context.method, method = delegate.iterator[methodName]; if (undefined === method) return context.delegate = null, "throw" === methodName && delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method) || "return" !== methodName && (context.method = "throw", context.arg = new TypeError("The iterator does not provide a '" + methodName + "' method")), ContinueSentinel; var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) keys.push(key); return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }
19448
- var dropdownFadeIn = /*#__PURE__*/keyframes(["from{transform:translateY(", ");opacity:0;}to{transform:translateY(", ");opacity:1;}"], makeSize(spacing[0]), makeSize(spacing[3]));
19449
- var dropdownFadeOut = /*#__PURE__*/keyframes(["from{transform:translateY(", ");opacity:1;}to{transform:translateY(", ");opacity:0;}"], makeSize(spacing[3]), makeSize(spacing[0]));
19450
- var AnimatedOverlay = /*#__PURE__*/styled(StyledDropdownOverlay).withConfig({
19451
- displayName: "DropdownOverlayweb__AnimatedOverlay",
19452
- componentId: "sc-9pwxtx-0"
19453
- })(function (props) {
19454
- return css(["", " transform:translateY(", ");opacity:0;z-index:99;pointer-events:", ";"], props.transition, makeSize(props.theme.spacing[3]), props.isOpen ? 'all' : 'none');
19455
- });
19456
-
19457
- /**
19458
- * This function calculates the position of dropdown overlay with respect to dropdown trigger element.
19459
- * For non-menus (e.g SelectInput), position is flipped if overflow is on bottom.
19460
- * For menus (e.g. DropdownButton), position is flipped if overflow is on right or bottom.
19461
- * Additional spacing is added to clientHeight to provide spacing above the dropdown trigger.
19462
- */
19463
- var getDropdownOverlayPosition = function getDropdownOverlayPosition(_ref) {
19464
- var position = _ref.overflow,
19465
- isMenu = _ref.isMenu,
19466
- triggererEl = _ref.triggererEl,
19467
- actionListItemEl = _ref.actionListItemEl;
19468
- var zeroSpacing = 'spacing.0';
19469
- var top = position.top,
19470
- bottom = position.bottom,
19471
- right = position.right;
19472
- var newPosition = {
19473
- left: zeroSpacing
19474
- };
19475
-
19476
- /**
19477
- * Calculating thresholds using the height & width of action list element with offset of 16px
19478
- */
19479
- var WIDTH_THRESHOLD = (Number(actionListItemEl === null || actionListItemEl === void 0 ? void 0 : actionListItemEl.clientWidth) + Number(size[16])) * -1;
19480
- var HEIGHT_THRESHOLD = (Number(actionListItemEl === null || actionListItemEl === void 0 ? void 0 : actionListItemEl.clientHeight) + Number(size[16])) * -1;
19481
- if (!isMenu) {
19482
- // In SelectInput, we set position wrt to right so that leftLabel position can be accomodated
19483
- // without additional offset calculation from left
19484
- newPosition.left = undefined;
19485
- newPosition.right = zeroSpacing;
19486
- if (bottom > HEIGHT_THRESHOLD) {
19487
- newPosition.bottom = "".concat(Number(triggererEl === null || triggererEl === void 0 ? void 0 : triggererEl.clientHeight) + Number(size[32]), "px");
19488
- newPosition.top = undefined;
19489
- }
19490
- if (top > HEIGHT_THRESHOLD) {
19491
- newPosition.top = zeroSpacing;
19492
- newPosition.bottom = undefined;
19493
- }
19494
- return newPosition;
19495
- }
19496
- if (right > WIDTH_THRESHOLD) {
19497
- newPosition.right = zeroSpacing;
19498
- newPosition.left = undefined;
19499
- }
19500
- if (bottom > HEIGHT_THRESHOLD) {
19501
- newPosition.bottom = "".concat(Number(triggererEl === null || triggererEl === void 0 ? void 0 : triggererEl.clientHeight) + Number(size[20]), "px");
19502
- newPosition.top = undefined;
19503
- }
19504
- if (top > HEIGHT_THRESHOLD) {
19505
- newPosition.top = zeroSpacing;
19506
- newPosition.bottom = undefined;
19507
- }
19508
- return newPosition;
19509
- };
19510
- var getDropdownOverflowMiddleware = function getDropdownOverflowMiddleware(_ref2) {
19511
- var isMenu = _ref2.isMenu,
19512
- triggererRef = _ref2.triggererRef,
19513
- actionListItemRef = _ref2.actionListItemRef,
19514
- setDropdownPosition = _ref2.setDropdownPosition;
19515
- return {
19516
- name: 'detectOverflowMiddleware',
19517
- fn: function fn(state) {
19518
- return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
19519
- var overflow, position;
19520
- return _regeneratorRuntime().wrap(function _callee$(_context) {
19521
- while (1) switch (_context.prev = _context.next) {
19522
- case 0:
19523
- _context.next = 2;
19524
- return detectOverflow(state, {
19525
- elementContext: 'reference'
19526
- });
19527
- case 2:
19528
- overflow = _context.sent;
19529
- position = getDropdownOverlayPosition({
19530
- overflow: overflow,
19531
- isMenu: isMenu,
19532
- triggererEl: triggererRef.current,
19533
- actionListItemEl: actionListItemRef.current
19534
- });
19535
- setDropdownPosition(position);
19536
- return _context.abrupt("return", {});
19537
- case 6:
19538
- case "end":
19539
- return _context.stop();
19540
- }
19541
- }, _callee);
19542
- }))();
19543
- }
19544
- };
19545
- };
19436
+ var OVERLAY_OFFSET = size['8'];
19437
+ var OVERLAY_PADDING = size['12']; // doesn't have to be exact. Just rough padding for floating ui to decide to show overlay on top or bottom
19438
+ var OVERLAY_ZINDEX = 1001;
19546
19439
 
19547
19440
  /**
19548
19441
  * Overlay of dropdown
19549
19442
  *
19550
19443
  * Wrap your ActionList within this component
19551
19444
  */
19552
- var _DropdownOverlay = function _DropdownOverlay(_ref3) {
19553
- var children = _ref3.children,
19554
- testID = _ref3.testID;
19445
+ var _DropdownOverlay = function _DropdownOverlay(_ref) {
19446
+ var _triggererWrapperRef$;
19447
+ var children = _ref.children,
19448
+ testID = _ref.testID,
19449
+ _ref$zIndex = _ref.zIndex,
19450
+ zIndex = _ref$zIndex === void 0 ? OVERLAY_ZINDEX : _ref$zIndex;
19555
19451
  var _useDropdown = useDropdown(),
19556
19452
  isOpen = _useDropdown.isOpen,
19557
19453
  triggererRef = _useDropdown.triggererRef,
19558
- hasLabelOnLeft = _useDropdown.hasLabelOnLeft,
19454
+ triggererWrapperRef = _useDropdown.triggererWrapperRef,
19559
19455
  dropdownTriggerer = _useDropdown.dropdownTriggerer,
19560
- setIsOpen = _useDropdown.setIsOpen,
19561
- actionListItemRef = _useDropdown.actionListItemRef;
19456
+ setIsOpen = _useDropdown.setIsOpen;
19562
19457
  var _useTheme = useTheme(),
19563
19458
  theme = _useTheme.theme;
19564
19459
  var bottomSheetAndDropdownGlue = useBottomSheetAndDropdownGlue();
19565
- var _React$useState = React__default.useState(false),
19566
- _React$useState2 = _slicedToArray(_React$useState, 2),
19567
- showFadeOutAnimation = _React$useState2[0],
19568
- setShowFadeOutAnimation = _React$useState2[1];
19569
- var _React$useState3 = React__default.useState('100%'),
19570
- _React$useState4 = _slicedToArray(_React$useState3, 2),
19571
- width = _React$useState4[0],
19572
- setWidth = _React$useState4[1];
19573
- var _React$useState5 = React__default.useState({}),
19574
- _React$useState6 = _slicedToArray(_React$useState5, 2),
19575
- dropdownPosition = _React$useState6[0],
19576
- setDropdownPosition = _React$useState6[1];
19577
19460
  var isMenu = dropdownTriggerer !== 'SelectInput';
19578
19461
  var _useFloating = useFloating({
19579
19462
  open: isOpen,
19580
19463
  onOpenChange: setIsOpen,
19581
- strategy: 'absolute',
19464
+ strategy: 'fixed',
19582
19465
  placement: 'bottom-start',
19583
19466
  elements: {
19584
- reference: triggererRef.current
19467
+ // Input triggers have their ref on internal input element but we want width height of overall visible input hence wrapperRef is needed
19468
+ // We fallback to use `triggererRef` for triggers like button and link where wrapper is not needed
19469
+ // Checkout: https://github.com/razorpay/blade/pull/1559#discussion_r1305438920
19470
+ reference: (_triggererWrapperRef$ = triggererWrapperRef.current) !== null && _triggererWrapperRef$ !== void 0 ? _triggererWrapperRef$ : triggererRef.current
19585
19471
  },
19586
- middleware: [getDropdownOverflowMiddleware({
19587
- isMenu: isMenu,
19588
- triggererRef: triggererRef,
19589
- actionListItemRef: actionListItemRef,
19590
- setDropdownPosition: setDropdownPosition
19472
+ middleware: [offset({
19473
+ mainAxis: OVERLAY_OFFSET
19474
+ }), flip({
19475
+ padding: OVERLAY_OFFSET + OVERLAY_PADDING
19476
+ }), size$1({
19477
+ apply: function apply(_ref2) {
19478
+ var rects = _ref2.rects,
19479
+ elements = _ref2.elements;
19480
+ Object.assign(elements.floating.style, {
19481
+ // in menu, we have flexible width between min and max
19482
+ // in input triggers, we just take width of trigger
19483
+ width: isMenu ? undefined : makeSize(rects.reference.width),
19484
+ minWidth: isMenu ? makeSize(size['240']) : undefined,
19485
+ maxWidth: isMenu ? makeSize(size['400']) : undefined
19486
+ });
19487
+ }
19591
19488
  })],
19592
19489
  whileElementsMounted: autoUpdate
19593
19490
  }),
19594
- refs = _useFloating.refs;
19595
- var fadeIn = /*#__PURE__*/css(["animation:", " ", " ", ";"], dropdownFadeIn, makeMotionTime(theme.motion.duration.quick), String(theme.motion.easing.entrance.revealing));
19596
- var fadeOut = /*#__PURE__*/css(["animation:", " ", " ", ";"], dropdownFadeOut, makeMotionTime(theme.motion.duration.quick), String(theme.motion.easing.entrance.revealing));
19597
- var noAnimation = /*#__PURE__*/css(["animation:none;"]);
19491
+ refs = _useFloating.refs,
19492
+ floatingStyles = _useFloating.floatingStyles,
19493
+ context = _useFloating.context;
19494
+ var _useTransitionStyles = useTransitionStyles(context, {
19495
+ duration: theme.motion.duration.quick,
19496
+ initial: function initial() {
19497
+ return {
19498
+ transform: "translateY(-".concat(makeSize(size['8']), ")"),
19499
+ opacity: 0
19500
+ };
19501
+ }
19502
+ }),
19503
+ isMounted = _useTransitionStyles.isMounted,
19504
+ styles = _useTransitionStyles.styles;
19598
19505
  React__default.useEffect(function () {
19599
19506
  if (isOpen) {
19600
19507
  var _triggererRef$current;
@@ -19603,88 +19510,24 @@ var _DropdownOverlay = function _DropdownOverlay(_ref3) {
19603
19510
  }
19604
19511
  // eslint-disable-next-line react-hooks/exhaustive-deps
19605
19512
  }, [isOpen]);
19606
-
19607
- // We want to set width of overlay as per width of the SelectInput
19608
- React__default.useEffect(function () {
19609
- // We don't set width according to trigger when trigger is Button or other menu trigger
19610
- if (isMenu) {
19611
- return undefined;
19612
- }
19613
- var setOverlayWidth = throttle_1(function () {
19614
- var _triggererRef$current2;
19615
- if ((_triggererRef$current2 = triggererRef.current) !== null && _triggererRef$current2 !== void 0 && _triggererRef$current2.clientWidth && hasLabelOnLeft) {
19616
- var _triggererRef$current3;
19617
- var svgWidth = size[16];
19618
- var interactionElementPadding = theme.spacing[4];
19619
- var offset = svgWidth + interactionElementPadding;
19620
- // SelectInput is -> Button + InteractionElement on right (the chevron icon)
19621
- // So we add the interactionElement offset with Button's width.
19622
- setWidth(makeSize(((_triggererRef$current3 = triggererRef.current) === null || _triggererRef$current3 === void 0 ? void 0 : _triggererRef$current3.clientWidth) + offset));
19623
- } else {
19624
- // We don't have to worry about setting the custom width when label is on top since we can just 100% width of parent div
19625
- setWidth('100%');
19626
- window.removeEventListener('resize', setOverlayWidth);
19627
- }
19628
- }, 1000);
19629
- setOverlayWidth();
19630
- window.addEventListener('resize', setOverlayWidth);
19631
- return function () {
19632
- window.removeEventListener('resize', setOverlayWidth);
19633
- };
19634
- // eslint-disable-next-line react-hooks/exhaustive-deps
19635
- }, [setWidth, triggererRef, hasLabelOnLeft]);
19636
- var onAnimationEnd = React__default.useCallback(function () {
19637
- if (isOpen) {
19638
- setShowFadeOutAnimation(true);
19639
- } else {
19640
- setShowFadeOutAnimation(false);
19641
- }
19642
- }, [isOpen]);
19643
- var styles = React__default.useMemo(function () {
19644
- return {
19645
- opacity: isOpen ? 1 : 0
19646
- };
19647
- }, [isOpen]);
19648
- return (
19649
- /*#__PURE__*/
19650
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
19651
- jsxs(BaseBox, {
19652
- position: "relative",
19653
- ref: refs.setFloating,
19654
- children: [isOpen ? /*#__PURE__*/jsx(BaseBox, {
19655
- position: 'fixed',
19656
- top: "spacing.0",
19657
- left: "spacing.0",
19658
- height: "100%",
19659
- width: "100%",
19660
- onClick: function onClick() {
19661
- return setIsOpen(false);
19662
- }
19663
- }) : null, /*#__PURE__*/jsx(AnimatedOverlay, _objectSpread$V(_objectSpread$V({
19664
- isInBottomSheet: bottomSheetAndDropdownGlue === null || bottomSheetAndDropdownGlue === void 0 ? void 0 : bottomSheetAndDropdownGlue.dropdownHasBottomSheet,
19665
- width: isMenu ? 'max-content' : width
19666
- // In SelectInput, Overlay should always take width of Input
19667
- ,
19668
- minWidth: isMenu ? '240px' : undefined
19669
- // in SelectInput, we don't want to set maxWidth because it takes width according to the trigger
19670
- ,
19671
- maxWidth: isMenu ? '400px' : undefined,
19672
- left: dropdownPosition.left,
19673
- right: dropdownPosition.right,
19674
- bottom: dropdownPosition.bottom,
19675
- style: styles,
19676
- isOpen: isOpen,
19677
- position: "absolute",
19678
- transition: isOpen ? fadeIn : showFadeOutAnimation ? fadeOut : noAnimation,
19679
- onAnimationEnd: onAnimationEnd
19680
- }, metaAttribute({
19681
- name: MetaConstants.DropdownOverlay,
19682
- testID: testID
19683
- })), {}, {
19684
- children: children
19685
- }))]
19686
- })
19687
- );
19513
+ return /*#__PURE__*/jsx(BaseBox
19514
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
19515
+ , {
19516
+ ref: refs.setFloating,
19517
+ style: floatingStyles,
19518
+ zIndex: zIndex,
19519
+ display: isMounted ? 'flex' : 'none',
19520
+ children: /*#__PURE__*/jsx(StyledDropdownOverlay, _objectSpread$V(_objectSpread$V({
19521
+ isInBottomSheet: bottomSheetAndDropdownGlue === null || bottomSheetAndDropdownGlue === void 0 ? void 0 : bottomSheetAndDropdownGlue.dropdownHasBottomSheet,
19522
+ style: _objectSpread$V({}, styles),
19523
+ width: "100%"
19524
+ }, metaAttribute({
19525
+ name: MetaConstants.DropdownOverlay,
19526
+ testID: testID
19527
+ })), {}, {
19528
+ children: children
19529
+ }))
19530
+ });
19688
19531
  };
19689
19532
  var DropdownOverlay = /*#__PURE__*/assignWithoutSideEffects(_DropdownOverlay, {
19690
19533
  componentId: componentIds$1.DropdownOverlay
@@ -20665,7 +20508,7 @@ var BaseInputAnimatedBorder = function BaseInputAnimatedBorder(_ref2) {
20665
20508
  });
20666
20509
  };
20667
20510
 
20668
- var _excluded$k = ["children", "validationState", "currentInteraction", "isLabelLeftPositioned", "isTextArea"];
20511
+ var _excluded$k = ["children", "validationState", "currentInteraction", "isLabelLeftPositioned", "isTextArea", "setInputWrapperRef"];
20669
20512
  function ownKeys$M(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
20670
20513
  function _objectSpread$L(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$M(Object(source), !0).forEach(function (key) { _defineProperty$1(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$M(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
20671
20514
  var StyledBaseInputWrapper = /*#__PURE__*/styled(BaseBox).withConfig({
@@ -20703,8 +20546,12 @@ var BaseInputWrapper = function BaseInputWrapper(_ref) {
20703
20546
  currentInteraction = _ref.currentInteraction;
20704
20547
  _ref.isLabelLeftPositioned;
20705
20548
  var isTextArea = _ref.isTextArea,
20549
+ setInputWrapperRef = _ref.setInputWrapperRef,
20706
20550
  props = _objectWithoutProperties$1(_ref, _excluded$k);
20707
- return /*#__PURE__*/jsxs(StyledBaseInputWrapper, _objectSpread$L(_objectSpread$L({
20551
+ return /*#__PURE__*/jsxs(StyledBaseInputWrapper
20552
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion, @typescript-eslint/no-explicit-any
20553
+ , _objectSpread$L(_objectSpread$L({
20554
+ ref: setInputWrapperRef,
20708
20555
  display: "flex",
20709
20556
  flexDirection: "row",
20710
20557
  width: "100%",
@@ -20720,7 +20567,7 @@ var BaseInputWrapper = function BaseInputWrapper(_ref) {
20720
20567
  }));
20721
20568
  };
20722
20569
 
20723
- var _excluded$j = ["as", "label", "labelPosition", "placeholder", "type", "defaultValue", "name", "value", "onFocus", "onChange", "onInput", "onBlur", "onSubmit", "onClick", "onKeyDown", "isDisabled", "necessityIndicator", "validationState", "errorText", "helpText", "successText", "isRequired", "leadingIcon", "prefix", "interactionElement", "suffix", "trailingIcon", "maxCharacters", "textAlign", "autoFocus", "keyboardReturnKeyType", "keyboardType", "autoCompleteSuggestionType", "trailingHeaderSlot", "trailingFooterSlot", "numberOfLines", "id", "componentName", "accessibilityLabel", "labelId", "activeDescendant", "hideLabelText", "hideFormHint", "hasPopup", "popupId", "isPopupExpanded", "shouldIgnoreBlurAnimation", "autoCapitalize", "testID"];
20570
+ var _excluded$j = ["as", "label", "labelPosition", "placeholder", "type", "defaultValue", "name", "value", "onFocus", "onChange", "onInput", "onBlur", "onSubmit", "onClick", "onKeyDown", "isDisabled", "necessityIndicator", "validationState", "errorText", "helpText", "successText", "isRequired", "leadingIcon", "prefix", "interactionElement", "suffix", "trailingIcon", "maxCharacters", "textAlign", "autoFocus", "keyboardReturnKeyType", "keyboardType", "autoCompleteSuggestionType", "trailingHeaderSlot", "trailingFooterSlot", "numberOfLines", "id", "componentName", "accessibilityLabel", "labelId", "activeDescendant", "hideLabelText", "hideFormHint", "hasPopup", "popupId", "isPopupExpanded", "shouldIgnoreBlurAnimation", "autoCapitalize", "setInputWrapperRef", "testID"];
20724
20571
  function ownKeys$L(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
20725
20572
  function _objectSpread$K(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$L(Object(source), !0).forEach(function (key) { _defineProperty$1(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$L(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
20726
20573
  var autoCompleteSuggestionTypeValues = ['none', 'on', 'name', 'email', 'username', 'password', 'newPassword', 'oneTimeCode', 'telephone', 'postalCode', 'countryName', 'creditCardNumber', 'creditCardCSC', 'creditCardExpiry', 'creditCardExpiryMonth', 'creditCardExpiryYear'];
@@ -20955,6 +20802,7 @@ var BaseInput = /*#__PURE__*/React__default.forwardRef(function (_ref11, ref) {
20955
20802
  isPopupExpanded = _ref11.isPopupExpanded,
20956
20803
  shouldIgnoreBlurAnimation = _ref11.shouldIgnoreBlurAnimation,
20957
20804
  autoCapitalize = _ref11.autoCapitalize,
20805
+ setInputWrapperRef = _ref11.setInputWrapperRef,
20958
20806
  testID = _ref11.testID,
20959
20807
  styledProps = _objectWithoutProperties$1(_ref11, _excluded$j);
20960
20808
  var _useTheme = useTheme(),
@@ -21055,6 +20903,7 @@ var BaseInput = /*#__PURE__*/React__default.forwardRef(function (_ref11, ref) {
21055
20903
  validationState: validationState,
21056
20904
  currentInteraction: currentInteraction,
21057
20905
  isLabelLeftPositioned: isLabelLeftPositioned,
20906
+ setInputWrapperRef: setInputWrapperRef,
21058
20907
  children: [/*#__PURE__*/jsx(BaseInputVisuals, {
21059
20908
  leadingIcon: leadingIcon,
21060
20909
  prefix: prefix,
@@ -22008,7 +21857,8 @@ var _SelectInput = function _SelectInput(props, ref) {
22008
21857
  isControlled = _useDropdown.isControlled,
22009
21858
  setIsControlled = _useDropdown.setIsControlled,
22010
21859
  selectionType = _useDropdown.selectionType,
22011
- selectedIndices = _useDropdown.selectedIndices;
21860
+ selectedIndices = _useDropdown.selectedIndices,
21861
+ triggererWrapperRef = _useDropdown.triggererWrapperRef;
22012
21862
  var icon = props.icon;
22013
21863
  props.onChange;
22014
21864
  props.defaultValue;
@@ -22122,6 +21972,9 @@ var _SelectInput = function _SelectInput(props, ref) {
22122
21972
  hideLabelText: ((_props$label = props.label) === null || _props$label === void 0 ? void 0 : _props$label.length) === 0,
22123
21973
  componentName: MetaConstants.SelectInput,
22124
21974
  ref: !isReactNative$4() ? triggererRef : null,
21975
+ setInputWrapperRef: function setInputWrapperRef(wrapperNode) {
21976
+ triggererWrapperRef.current = wrapperNode;
21977
+ },
22125
21978
  textAlign: "left",
22126
21979
  value: displayValue,
22127
21980
  placeholder: placeholder,