@innovaccer/design-system 2.23.3 → 2.25.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.
Files changed (30) hide show
  1. package/CHANGELOG.md +73 -0
  2. package/css/dist/index.css +129 -1
  3. package/css/dist/index.css.map +1 -1
  4. package/css/src/components/card.css +0 -1
  5. package/css/src/components/listbox.css +115 -0
  6. package/css/src/core/animation.css +11 -0
  7. package/dist/.lib/tsconfig.type.tsbuildinfo +209 -4
  8. package/dist/core/components/organisms/listbox/Listbox.d.ts +33 -0
  9. package/dist/core/components/organisms/listbox/index.d.ts +3 -0
  10. package/dist/core/components/organisms/listbox/listboxItem/ListBody.d.ts +3 -0
  11. package/dist/core/components/organisms/listbox/listboxItem/ListboxItem.d.ts +23 -0
  12. package/dist/core/components/organisms/listbox/listboxItem/index.d.ts +1 -0
  13. package/dist/core/components/organisms/listbox/nestedList/Animation.d.ts +2 -0
  14. package/dist/core/components/organisms/listbox/nestedList/NestedList.d.ts +7 -0
  15. package/dist/core/components/organisms/listbox/nestedList/index.d.ts +1 -0
  16. package/dist/core/components/organisms/listbox/reorderList/Draggable.d.ts +71 -0
  17. package/dist/core/components/organisms/listbox/reorderList/DraggableList.d.ts +2 -0
  18. package/dist/core/components/organisms/listbox/reorderList/index.d.ts +1 -0
  19. package/dist/core/components/organisms/listbox/reorderList/types.d.ts +46 -0
  20. package/dist/core/components/organisms/listbox/reorderList/utils.d.ts +10 -0
  21. package/dist/core/components/organisms/listbox/utils.d.ts +1 -0
  22. package/dist/core/index.d.ts +1 -0
  23. package/dist/core/index.type.d.ts +1 -0
  24. package/dist/index.esm.js +1043 -86
  25. package/dist/index.js +925 -3
  26. package/dist/index.js.map +1 -1
  27. package/dist/index.umd.js +1 -1
  28. package/dist/index.umd.js.br +0 -0
  29. package/dist/index.umd.js.gz +0 -0
  30. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
 
2
2
  /**
3
- * Generated on: 1698770699214
3
+ * Generated on: 1699952738884
4
4
  * Package: @innovaccer/design-system
5
- * Version: v2.23.3
5
+ * Version: v2.25.0
6
6
  * License: MIT
7
7
  * Docs: https://innovaccer.github.io/design-system
8
8
  */
@@ -16579,7 +16579,928 @@
16579
16579
  SelectionCard.useMultiSelect = useMultiSelect;
16580
16580
  SelectionCard.useSingleSelect = useSingleSelect;
16581
16581
 
16582
- var version = "2.23.3";
16582
+ function arrayMove(array, from, to) {
16583
+ array = array.slice();
16584
+ array.splice(to < 0 ? array.length + to : to, 0, array.splice(from, 1)[0]);
16585
+ return array;
16586
+ }
16587
+ function getTranslateOffset(element) {
16588
+ var style = window.getComputedStyle(element);
16589
+ return Math.max(parseInt(style['margin-top'], 10), parseInt(style['margin-bottom'], 10)) + element.getBoundingClientRect().height;
16590
+ }
16591
+ function isTouchEvent(event) {
16592
+ return event.touches && event.touches.length || event.changedTouches && event.changedTouches.length;
16593
+ }
16594
+ function transformItem(element, offsetY, offsetX) {
16595
+ if (offsetY === void 0) {
16596
+ offsetY = 0;
16597
+ }
16598
+
16599
+ if (offsetX === void 0) {
16600
+ offsetX = 0;
16601
+ }
16602
+
16603
+ if (!element) return;
16604
+
16605
+ if (offsetY === null || offsetX === null) {
16606
+ element.style.removeProperty('transform');
16607
+ return;
16608
+ }
16609
+
16610
+ element.style.transform = "translate(" + offsetX + "px, " + offsetY + "px)";
16611
+ }
16612
+ function setItemTransition(element, duration, timing) {
16613
+ if (element) {
16614
+ element.style['transition'] = "transform " + duration + "ms" + (timing ? " " + timing : '');
16615
+ }
16616
+ }
16617
+ function binarySearch(array, targetValue) {
16618
+ var min = 0;
16619
+ var max = array.length - 1;
16620
+ var guess;
16621
+
16622
+ while (min <= max) {
16623
+ guess = Math.floor((max + min) / 2);
16624
+
16625
+ if (!array[guess + 1] || array[guess] <= targetValue && array[guess + 1] >= targetValue) {
16626
+ return guess;
16627
+ } else if (array[guess] < targetValue && array[guess + 1] < targetValue) {
16628
+ min = guess + 1;
16629
+ } else {
16630
+ max = guess - 1;
16631
+ }
16632
+ }
16633
+
16634
+ return -1;
16635
+ }
16636
+ var schd = function schd(fn) {
16637
+ var lastArgs = [];
16638
+ var frameId = null;
16639
+
16640
+ var wrapperFn = function wrapperFn() {
16641
+ var args = [];
16642
+
16643
+ for (var _i = 0; _i < arguments.length; _i++) {
16644
+ args[_i] = arguments[_i];
16645
+ }
16646
+
16647
+ lastArgs = args;
16648
+
16649
+ if (frameId) {
16650
+ return;
16651
+ }
16652
+
16653
+ frameId = requestAnimationFrame(function () {
16654
+ frameId = null;
16655
+ fn.apply(void 0, lastArgs);
16656
+ });
16657
+ };
16658
+
16659
+ wrapperFn.cancel = function () {
16660
+ if (frameId) {
16661
+ cancelAnimationFrame(frameId);
16662
+ }
16663
+ };
16664
+
16665
+ return wrapperFn;
16666
+ };
16667
+
16668
+ var AUTOSCROLL_ACTIVE_OFFSET = 200;
16669
+ var AUTOSCROLL_SPEED_RATIO = 10;
16670
+
16671
+ var Draggable = function (_super) {
16672
+ __extends(Draggable, _super);
16673
+
16674
+ function Draggable(props) {
16675
+ var _this = _super.call(this, props) || this;
16676
+
16677
+ _this.listRef = /*#__PURE__*/React__namespace.createRef();
16678
+ _this.ghostRef = /*#__PURE__*/React__namespace.createRef();
16679
+ _this.topOffsets = [];
16680
+ _this.itemTranslateOffsets = [];
16681
+ _this.initialYOffset = 0;
16682
+ _this.lastScroll = 0;
16683
+ _this.lastYOffset = 0;
16684
+ _this.lastListYOffset = 0;
16685
+ _this.needle = -1;
16686
+ _this.afterIndex = -2;
16687
+ _this.state = {
16688
+ itemDragged: -1,
16689
+ itemDraggedOutOfBounds: -1,
16690
+ selectedItem: -1,
16691
+ initialX: 0,
16692
+ initialY: 0,
16693
+ targetX: 0,
16694
+ targetY: 0,
16695
+ targetHeight: 0,
16696
+ targetWidth: 0,
16697
+ scrollingSpeed: 0,
16698
+ scrollWindow: false
16699
+ };
16700
+
16701
+ _this.doScrolling = function () {
16702
+ var _a = _this.state,
16703
+ scrollingSpeed = _a.scrollingSpeed,
16704
+ scrollWindow = _a.scrollWindow;
16705
+ var listEl = _this.listRef.current;
16706
+ window.requestAnimationFrame(function () {
16707
+ if (scrollWindow) {
16708
+ window.scrollTo(window.pageXOffset, window.pageYOffset + scrollingSpeed * 1.5);
16709
+ } else {
16710
+ listEl.scrollTop += scrollingSpeed;
16711
+ }
16712
+
16713
+ if (scrollingSpeed !== 0) {
16714
+ _this.doScrolling();
16715
+ }
16716
+ });
16717
+ };
16718
+
16719
+ _this.getChildren = function () {
16720
+ if (_this.listRef && _this.listRef.current) {
16721
+ return Array.from(_this.listRef.current.children);
16722
+ }
16723
+
16724
+ return [];
16725
+ };
16726
+
16727
+ _this.calculateOffsets = function () {
16728
+ _this.topOffsets = _this.getChildren().map(function (item) {
16729
+ return item.getBoundingClientRect().top;
16730
+ });
16731
+ _this.itemTranslateOffsets = _this.getChildren().map(function (item) {
16732
+ return getTranslateOffset(item);
16733
+ });
16734
+ };
16735
+
16736
+ _this.getTargetIndex = function (e) {
16737
+ return _this.getChildren().findIndex(function (child) {
16738
+ return child === e.target || child.contains(e.target);
16739
+ });
16740
+ };
16741
+
16742
+ _this.onMouseOrTouchStart = function (e) {
16743
+ var _a;
16744
+
16745
+ if (_this.dropTimeout && _this.state.itemDragged > -1) {
16746
+ window.clearTimeout(_this.dropTimeout);
16747
+
16748
+ _this.finishDrop();
16749
+ }
16750
+
16751
+ var isTouch = isTouchEvent(e);
16752
+ if (!isTouch && e.button !== 0) return;
16753
+
16754
+ var index = _this.getTargetIndex(e);
16755
+
16756
+ var listItemTouched = _this.getChildren()[index];
16757
+
16758
+ var isValidDragHandle = (_a = e.target) === null || _a === void 0 ? void 0 : _a.classList.contains('Listbox-item--drag-icon');
16759
+ if (!isValidDragHandle) return;
16760
+ e.preventDefault();
16761
+
16762
+ if (isTouch) {
16763
+ var opts = {
16764
+ passive: false
16765
+ };
16766
+ listItemTouched.style.touchAction = 'none';
16767
+ document.addEventListener('touchend', _this.schdOnEnd, opts);
16768
+ document.addEventListener('touchmove', _this.schdOnTouchMove, opts);
16769
+ document.addEventListener('touchcancel', _this.schdOnEnd, opts);
16770
+ } else {
16771
+ document.addEventListener('mousemove', _this.schdOnMouseMove);
16772
+ document.addEventListener('mouseup', _this.schdOnEnd);
16773
+
16774
+ var listItemDragged = _this.getChildren()[_this.state.itemDragged];
16775
+
16776
+ if (listItemDragged && listItemDragged.style) {
16777
+ listItemDragged.style.touchAction = '';
16778
+ }
16779
+ }
16780
+
16781
+ _this.onStart(listItemTouched, isTouch ? e.touches[0].clientX : e.clientX, isTouch ? e.touches[0].clientY : e.clientY, index);
16782
+ };
16783
+
16784
+ _this.getYOffset = function () {
16785
+ var listScroll = _this.listRef.current ? _this.listRef.current.scrollTop : 0;
16786
+ return window.pageYOffset + listScroll;
16787
+ };
16788
+
16789
+ _this.onStart = function (target, clientX, clientY, index) {
16790
+ if (_this.state.selectedItem > -1) {
16791
+ _this.setState({
16792
+ selectedItem: -1
16793
+ });
16794
+
16795
+ _this.needle = -1;
16796
+ }
16797
+
16798
+ var targetRect = target.getBoundingClientRect();
16799
+ var targetStyles = window.getComputedStyle(target);
16800
+
16801
+ _this.calculateOffsets();
16802
+
16803
+ _this.initialYOffset = _this.getYOffset();
16804
+ _this.lastYOffset = window.pageYOffset;
16805
+ _this.lastListYOffset = _this.listRef.current.scrollTop;
16806
+
16807
+ _this.setState({
16808
+ itemDragged: index,
16809
+ targetX: targetRect.left - parseInt(targetStyles['margin-left'], 10),
16810
+ targetY: targetRect.top - parseInt(targetStyles['margin-top'], 10),
16811
+ targetHeight: targetRect.height,
16812
+ targetWidth: targetRect.width,
16813
+ initialX: clientX,
16814
+ initialY: clientY
16815
+ });
16816
+ };
16817
+
16818
+ _this.onMouseMove = function (e) {
16819
+ e.cancelable && e.preventDefault();
16820
+
16821
+ _this.onMove(e.clientX, e.clientY);
16822
+ };
16823
+
16824
+ _this.onTouchMove = function (e) {
16825
+ e.cancelable && e.preventDefault();
16826
+
16827
+ _this.onMove(e.touches[0].clientX, e.touches[0].clientY);
16828
+ };
16829
+
16830
+ _this.onWheel = function (e) {
16831
+ if (_this.state.itemDragged < 0) return;
16832
+ _this.lastScroll = _this.listRef.current.scrollTop += e.deltaY;
16833
+
16834
+ _this.moveOtherItems();
16835
+ };
16836
+
16837
+ _this.onMove = function (clientX, clientY) {
16838
+ if (_this.state.itemDragged === -1) return null;
16839
+ transformItem(_this.ghostRef.current, clientY - _this.state.initialY, _this.props.lockVertically ? 0 : clientX - _this.state.initialX);
16840
+
16841
+ _this.autoScrolling(clientY);
16842
+
16843
+ _this.moveOtherItems();
16844
+
16845
+ return;
16846
+ };
16847
+
16848
+ _this.moveOtherItems = function () {
16849
+ var targetRect = _this.ghostRef.current.getBoundingClientRect();
16850
+
16851
+ var itemVerticalCenter = targetRect.top + targetRect.height / 2;
16852
+ var offset = getTranslateOffset(_this.getChildren()[_this.state.itemDragged]);
16853
+
16854
+ var currentYOffset = _this.getYOffset();
16855
+
16856
+ if (_this.initialYOffset !== currentYOffset) {
16857
+ _this.topOffsets = _this.topOffsets.map(function (offset) {
16858
+ return offset - (currentYOffset - _this.initialYOffset);
16859
+ });
16860
+ _this.initialYOffset = currentYOffset;
16861
+ }
16862
+
16863
+ if (_this.isDraggedItemOutOfBounds() && _this.props.removableByMove) {
16864
+ _this.afterIndex = _this.topOffsets.length + 1;
16865
+ } else {
16866
+ _this.afterIndex = binarySearch(_this.topOffsets, itemVerticalCenter);
16867
+ }
16868
+
16869
+ _this.animateItems(_this.afterIndex === -1 ? 0 : _this.afterIndex, _this.state.itemDragged, offset);
16870
+ };
16871
+
16872
+ _this.autoScrolling = function (clientY) {
16873
+ var _a = _this.listRef.current.getBoundingClientRect(),
16874
+ top = _a.top,
16875
+ bottom = _a.bottom,
16876
+ height = _a.height;
16877
+
16878
+ var viewportHeight = window.innerHeight || document.documentElement.clientHeight;
16879
+
16880
+ if (bottom > viewportHeight && viewportHeight - clientY < AUTOSCROLL_ACTIVE_OFFSET) {
16881
+ _this.setState({
16882
+ scrollingSpeed: Math.round((AUTOSCROLL_ACTIVE_OFFSET - (viewportHeight - clientY)) / AUTOSCROLL_SPEED_RATIO),
16883
+ scrollWindow: true
16884
+ });
16885
+ } else if (top < 0 && clientY < AUTOSCROLL_ACTIVE_OFFSET) {
16886
+ _this.setState({
16887
+ scrollingSpeed: Math.round((AUTOSCROLL_ACTIVE_OFFSET - clientY) / -AUTOSCROLL_SPEED_RATIO),
16888
+ scrollWindow: true
16889
+ });
16890
+ } else {
16891
+ if (_this.state.scrollWindow && _this.state.scrollingSpeed !== 0) {
16892
+ _this.setState({
16893
+ scrollingSpeed: 0,
16894
+ scrollWindow: false
16895
+ });
16896
+ }
16897
+
16898
+ if (height + 20 < _this.listRef.current.scrollHeight) {
16899
+ var scrollingSpeed = 0;
16900
+
16901
+ if (clientY - top < AUTOSCROLL_ACTIVE_OFFSET) {
16902
+ scrollingSpeed = Math.round((AUTOSCROLL_ACTIVE_OFFSET - (clientY - top)) / -AUTOSCROLL_SPEED_RATIO);
16903
+ } else if (bottom - clientY < AUTOSCROLL_ACTIVE_OFFSET) {
16904
+ scrollingSpeed = Math.round((AUTOSCROLL_ACTIVE_OFFSET - (bottom - clientY)) / AUTOSCROLL_SPEED_RATIO);
16905
+ }
16906
+
16907
+ if (_this.state.scrollingSpeed !== scrollingSpeed) {
16908
+ _this.setState({
16909
+ scrollingSpeed: scrollingSpeed
16910
+ });
16911
+ }
16912
+ }
16913
+ }
16914
+ };
16915
+
16916
+ _this.animateItems = function (needle, movedItem, offset, animateMovedItem) {
16917
+ if (animateMovedItem === void 0) {
16918
+ animateMovedItem = false;
16919
+ }
16920
+
16921
+ _this.getChildren().forEach(function (item, i) {
16922
+ setItemTransition(item, _this.props.transitionDuration);
16923
+
16924
+ if (movedItem === i && animateMovedItem) {
16925
+ if (movedItem === needle) {
16926
+ return transformItem(item, null);
16927
+ }
16928
+
16929
+ transformItem(item, movedItem < needle ? _this.itemTranslateOffsets.slice(movedItem + 1, needle + 1).reduce(function (a, b) {
16930
+ return a + b;
16931
+ }, 0) : _this.itemTranslateOffsets.slice(needle, movedItem).reduce(function (a, b) {
16932
+ return a + b;
16933
+ }, 0) * -1);
16934
+ } else if (movedItem < needle && i > movedItem && i <= needle) {
16935
+ transformItem(item, -offset);
16936
+ } else if (i < movedItem && movedItem > needle && i >= needle) {
16937
+ transformItem(item, offset);
16938
+ } else {
16939
+ transformItem(item, null);
16940
+ }
16941
+ });
16942
+ };
16943
+
16944
+ _this.isDraggedItemOutOfBounds = function () {
16945
+ var initialRect = _this.getChildren()[_this.state.itemDragged].getBoundingClientRect();
16946
+
16947
+ var targetRect = _this.ghostRef.current.getBoundingClientRect();
16948
+
16949
+ if (Math.abs(initialRect.left - targetRect.left) > targetRect.width) {
16950
+ if (_this.state.itemDraggedOutOfBounds === -1) {
16951
+ _this.setState({
16952
+ itemDraggedOutOfBounds: _this.state.itemDragged
16953
+ });
16954
+ }
16955
+
16956
+ return true;
16957
+ }
16958
+
16959
+ if (_this.state.itemDraggedOutOfBounds > -1) {
16960
+ _this.setState({
16961
+ itemDraggedOutOfBounds: -1
16962
+ });
16963
+ }
16964
+
16965
+ return false;
16966
+ };
16967
+
16968
+ _this.onEnd = function (e) {
16969
+ e.cancelable && e.preventDefault();
16970
+ document.removeEventListener('mousemove', _this.schdOnMouseMove);
16971
+ document.removeEventListener('touchmove', _this.schdOnTouchMove);
16972
+ document.removeEventListener('mouseup', _this.schdOnEnd);
16973
+ document.removeEventListener('touchup', _this.schdOnEnd);
16974
+ document.removeEventListener('touchcancel', _this.schdOnEnd);
16975
+
16976
+ var removeItem = _this.props.removableByMove && _this.isDraggedItemOutOfBounds();
16977
+
16978
+ if (!removeItem && _this.props.transitionDuration > 0 && _this.afterIndex !== -2) {
16979
+ schd(function () {
16980
+ setItemTransition(_this.ghostRef.current, _this.props.transitionDuration, 'cubic-bezier(0.2, 0, 0.38, 0.9)');
16981
+
16982
+ if (_this.afterIndex < 1 && _this.state.itemDragged === 0) {
16983
+ transformItem(_this.ghostRef.current, 0, 0);
16984
+ } else {
16985
+ transformItem(_this.ghostRef.current, -(window.pageYOffset - _this.lastYOffset) + -(_this.listRef.current.scrollTop - _this.lastListYOffset) + (_this.state.itemDragged < _this.afterIndex ? _this.itemTranslateOffsets.slice(_this.state.itemDragged + 1, _this.afterIndex + 1).reduce(function (a, b) {
16986
+ return a + b;
16987
+ }, 0) : _this.itemTranslateOffsets.slice(_this.afterIndex < 0 ? 0 : _this.afterIndex, _this.state.itemDragged).reduce(function (a, b) {
16988
+ return a + b;
16989
+ }, 0) * -1), 0);
16990
+ }
16991
+ })();
16992
+ }
16993
+
16994
+ _this.dropTimeout = window.setTimeout(_this.finishDrop, removeItem || _this.afterIndex === -2 ? 0 : _this.props.transitionDuration);
16995
+ };
16996
+
16997
+ _this.finishDrop = function () {
16998
+ var removeItem = _this.props.removableByMove && _this.isDraggedItemOutOfBounds();
16999
+
17000
+ if (removeItem || _this.afterIndex > -2 && _this.state.itemDragged !== _this.afterIndex) {
17001
+ _this.props.onChange({
17002
+ oldIndex: _this.state.itemDragged,
17003
+ newIndex: removeItem ? -1 : Math.max(_this.afterIndex, 0),
17004
+ targetRect: _this.ghostRef.current.getBoundingClientRect()
17005
+ });
17006
+ }
17007
+
17008
+ _this.getChildren().forEach(function (item) {
17009
+ setItemTransition(item, 0);
17010
+ transformItem(item, null);
17011
+ item.style.touchAction = '';
17012
+ });
17013
+
17014
+ _this.setState({
17015
+ itemDragged: -1,
17016
+ scrollingSpeed: 0
17017
+ });
17018
+
17019
+ _this.afterIndex = -2;
17020
+
17021
+ if (_this.lastScroll > 0) {
17022
+ _this.listRef.current.scrollTop = _this.lastScroll;
17023
+ _this.lastScroll = 0;
17024
+ }
17025
+ };
17026
+
17027
+ _this.onKeyDown = function (e) {
17028
+ var selectedItem = _this.state.selectedItem;
17029
+
17030
+ var index = _this.getTargetIndex(e);
17031
+
17032
+ if (index === -1 || _this.props.values[index] && _this.props.values[index].props.disabled) {
17033
+ return;
17034
+ }
17035
+
17036
+ if (e.key === ' ') {
17037
+ e.preventDefault();
17038
+
17039
+ if (selectedItem === index) {
17040
+ if (selectedItem !== _this.needle) {
17041
+ _this.getChildren().forEach(function (item) {
17042
+ setItemTransition(item, 0);
17043
+ transformItem(item, null);
17044
+ });
17045
+
17046
+ _this.props.onChange({
17047
+ oldIndex: selectedItem,
17048
+ newIndex: _this.needle,
17049
+ targetRect: _this.getChildren()[_this.needle].getBoundingClientRect()
17050
+ });
17051
+
17052
+ _this.getChildren()[_this.needle].focus();
17053
+ }
17054
+
17055
+ _this.setState({
17056
+ selectedItem: -1
17057
+ });
17058
+
17059
+ _this.needle = -1;
17060
+ } else {
17061
+ _this.setState({
17062
+ selectedItem: index
17063
+ });
17064
+
17065
+ _this.needle = index;
17066
+
17067
+ _this.calculateOffsets();
17068
+ }
17069
+ }
17070
+
17071
+ if ((e.key === 'ArrowDown' || e.key === 'j') && selectedItem > -1 && _this.needle < _this.props.values.length - 1) {
17072
+ e.preventDefault();
17073
+ var offset = getTranslateOffset(_this.getChildren()[selectedItem]);
17074
+ _this.needle++;
17075
+
17076
+ _this.animateItems(_this.needle, selectedItem, offset, true);
17077
+ }
17078
+
17079
+ if ((e.key === 'ArrowUp' || e.key === 'k') && selectedItem > -1 && _this.needle > 0) {
17080
+ e.preventDefault();
17081
+ var offset = getTranslateOffset(_this.getChildren()[selectedItem]);
17082
+ _this.needle--;
17083
+
17084
+ _this.animateItems(_this.needle, selectedItem, offset, true);
17085
+ }
17086
+
17087
+ if (e.key === 'Escape' && selectedItem > -1) {
17088
+ _this.getChildren().forEach(function (item) {
17089
+ setItemTransition(item, 0);
17090
+ transformItem(item, null);
17091
+ });
17092
+
17093
+ _this.setState({
17094
+ selectedItem: -1
17095
+ });
17096
+
17097
+ _this.needle = -1;
17098
+ }
17099
+
17100
+ if ((e.key === 'Tab' || e.key === 'Enter') && selectedItem > -1) {
17101
+ e.preventDefault();
17102
+ }
17103
+ };
17104
+
17105
+ _this.schdOnMouseMove = schd(_this.onMouseMove);
17106
+ _this.schdOnTouchMove = schd(_this.onTouchMove);
17107
+ _this.schdOnEnd = schd(_this.onEnd);
17108
+ return _this;
17109
+ }
17110
+
17111
+ Draggable.prototype.componentDidMount = function () {
17112
+ this.calculateOffsets();
17113
+ document.addEventListener('touchstart', this.onMouseOrTouchStart, {
17114
+ passive: false,
17115
+ capture: false
17116
+ });
17117
+ document.addEventListener('mousedown', this.onMouseOrTouchStart);
17118
+ };
17119
+
17120
+ Draggable.prototype.componentDidUpdate = function (_prevProps, prevState) {
17121
+ if (prevState.scrollingSpeed !== this.state.scrollingSpeed && prevState.scrollingSpeed === 0) {
17122
+ this.doScrolling();
17123
+ }
17124
+ };
17125
+
17126
+ Draggable.prototype.componentWillUnmount = function () {
17127
+ document.removeEventListener('touchstart', this.onMouseOrTouchStart);
17128
+ document.removeEventListener('mousedown', this.onMouseOrTouchStart);
17129
+
17130
+ if (this.dropTimeout) {
17131
+ window.clearTimeout(this.dropTimeout);
17132
+ }
17133
+
17134
+ this.schdOnMouseMove.cancel();
17135
+ this.schdOnTouchMove.cancel();
17136
+ this.schdOnEnd.cancel();
17137
+ };
17138
+
17139
+ Draggable.prototype.render = function () {
17140
+ var _this = this;
17141
+
17142
+ var baseStyle = {
17143
+ userSelect: 'none',
17144
+ WebkitUserSelect: 'none',
17145
+ MozUserSelect: 'none',
17146
+ msUserSelect: 'none',
17147
+ boxSizing: 'border-box',
17148
+ position: 'relative'
17149
+ };
17150
+
17151
+ var ghostStyle = __assign(__assign({}, baseStyle), {
17152
+ top: this.state.targetY,
17153
+ left: this.state.targetX,
17154
+ width: this.state.targetWidth,
17155
+ height: this.state.targetHeight,
17156
+ backgroundColor: '#ffffff',
17157
+ listStyleType: 'none',
17158
+ margin: 0,
17159
+ position: 'fixed',
17160
+ boxShadow: '0 4px 16px 0 rgba(0, 0, 0, 0.16)'
17161
+ });
17162
+
17163
+ return /*#__PURE__*/React__namespace.createElement(React__namespace.Fragment, null, this.props.renderList({
17164
+ children: this.props.values.map(function (value, index) {
17165
+ var isHidden = index === _this.state.itemDragged;
17166
+ var isSelected = index === _this.state.selectedItem;
17167
+ var isDisabled = _this.props.values[index] && _this.props.values[index].props.disabled;
17168
+ var props = {
17169
+ key: index,
17170
+ tabIndex: isDisabled ? -1 : 0,
17171
+ onKeyDown: _this.onKeyDown,
17172
+ style: __assign(__assign({}, baseStyle), {
17173
+ visibility: isHidden ? 'hidden' : undefined,
17174
+ zIndex: isSelected ? 5000 : 0
17175
+ })
17176
+ };
17177
+ return _this.props.renderItem({
17178
+ value: value,
17179
+ props: props,
17180
+ index: index,
17181
+ isDragged: false,
17182
+ isSelected: isSelected,
17183
+ isOutOfBounds: false
17184
+ });
17185
+ }),
17186
+ isDragged: this.state.itemDragged > -1,
17187
+ props: {
17188
+ ref: this.listRef
17189
+ }
17190
+ }), this.state.itemDragged > -1 && /*#__PURE__*/ReactDOM__namespace.createPortal(this.props.renderItem({
17191
+ value: this.props.values[this.state.itemDragged],
17192
+ props: {
17193
+ ref: this.ghostRef,
17194
+ style: ghostStyle,
17195
+ onWheel: this.onWheel
17196
+ },
17197
+ index: this.state.itemDragged,
17198
+ isDragged: true,
17199
+ isSelected: false,
17200
+ isOutOfBounds: this.state.itemDraggedOutOfBounds > -1
17201
+ }), document.body));
17202
+ };
17203
+
17204
+ Draggable.defaultProps = {
17205
+ transitionDuration: 240,
17206
+ lockVertically: false,
17207
+ removableByMove: false
17208
+ };
17209
+ return Draggable;
17210
+ }(React__namespace.Component);
17211
+
17212
+ var DraggableList = function DraggableList(props) {
17213
+ var children = props.children,
17214
+ className = props.className,
17215
+ Tag = props.tagName;
17216
+ var baseProps = extractBaseProps(props);
17217
+ var classes = classNames__default["default"]({
17218
+ Listbox: true
17219
+ }, className);
17220
+ var renderChildren = React__default["default"].Children.toArray(children).map(function (child) {
17221
+ var element = /*#__PURE__*/React__default["default"].cloneElement(child, {
17222
+ parentProps: __assign({}, props)
17223
+ });
17224
+ return element;
17225
+ });
17226
+
17227
+ var _a = React__default["default"].useState(renderChildren),
17228
+ childList = _a[0],
17229
+ setChildList = _a[1];
17230
+
17231
+ var onChangeHandler = function onChangeHandler(props) {
17232
+ var oldIndex = props.oldIndex,
17233
+ newIndex = props.newIndex;
17234
+ var updatedList = arrayMove(childList, oldIndex, newIndex);
17235
+ setChildList(updatedList);
17236
+ };
17237
+
17238
+ return /*#__PURE__*/React__default["default"].createElement(Draggable, {
17239
+ values: childList,
17240
+ onChange: onChangeHandler,
17241
+ renderItem: function renderItem(_a) {
17242
+ var value = _a.value,
17243
+ props = _a.props;
17244
+ return /*#__PURE__*/React__default["default"].createElement("div", __assign({}, props, {
17245
+ className: "Listbox-item--draggable"
17246
+ }), value);
17247
+ },
17248
+ renderList: function renderList(_a) {
17249
+ var children = _a.children,
17250
+ props = _a.props;
17251
+ return /*#__PURE__*/React__default["default"].createElement(Tag, __assign({
17252
+ "data-test": "DesignSystem-Listbox"
17253
+ }, baseProps, {
17254
+ className: classes
17255
+ }, props), children);
17256
+ }
17257
+ });
17258
+ };
17259
+
17260
+ var isDisabledElement = function isDisabledElement(element) {
17261
+ return element && element.getAttribute('data-disabled') === 'true';
17262
+ };
17263
+
17264
+ var getNextSibling = function getNextSibling(element) {
17265
+ var _a, _b;
17266
+
17267
+ return (_b = (_a = element === null || element === void 0 ? void 0 : element.parentNode) === null || _a === void 0 ? void 0 : _a.nextSibling) === null || _b === void 0 ? void 0 : _b.firstChild;
17268
+ };
17269
+
17270
+ var getPrevSibling = function getPrevSibling(element) {
17271
+ var _a, _b;
17272
+
17273
+ return (_b = (_a = element === null || element === void 0 ? void 0 : element.parentNode) === null || _a === void 0 ? void 0 : _a.previousSibling) === null || _b === void 0 ? void 0 : _b.firstChild;
17274
+ };
17275
+
17276
+ var focusOption = function focusOption(element, direction) {
17277
+ var iterateElement = element;
17278
+
17279
+ while (iterateElement) {
17280
+ if (!isDisabledElement(iterateElement)) {
17281
+ iterateElement.focus();
17282
+ break;
17283
+ }
17284
+
17285
+ if (direction === 'down') {
17286
+ iterateElement = getNextSibling(iterateElement);
17287
+ } else {
17288
+ iterateElement = getPrevSibling(iterateElement);
17289
+ }
17290
+ }
17291
+ };
17292
+
17293
+ var onKeyDown = function onKeyDown(event) {
17294
+ var sourceElement = event.target;
17295
+ var nextElement = getNextSibling(sourceElement);
17296
+ var prevElement = getPrevSibling(sourceElement);
17297
+
17298
+ switch (event.key) {
17299
+ case 'ArrowDown':
17300
+ event.preventDefault();
17301
+ focusOption(nextElement, 'down');
17302
+ break;
17303
+
17304
+ case 'ArrowUp':
17305
+ event.preventDefault();
17306
+ focusOption(prevElement, 'up');
17307
+ break;
17308
+ }
17309
+ };
17310
+
17311
+ var ListBody = function ListBody(props) {
17312
+ var _a;
17313
+
17314
+ var children = props.children,
17315
+ className = props.className,
17316
+ disabled = props.disabled,
17317
+ selected = props.selected,
17318
+ activated = props.activated;
17319
+ var contextProp = React__namespace.useContext(ListboxContext);
17320
+ var size = contextProp.size,
17321
+ type = contextProp.type,
17322
+ draggable = contextProp.draggable;
17323
+ var itemClass = classNames__default["default"]((_a = {
17324
+ 'Listbox-item': true
17325
+ }, _a["Listbox-item--" + size] = size, _a["Listbox-item--" + type] = type, _a['Listbox-item--disabled'] = disabled, _a['Listbox-item--selected'] = selected && type === 'option', _a['Listbox-item--activated'] = activated && type === 'resource', _a), className);
17326
+ return /*#__PURE__*/React__namespace.createElement("div", {
17327
+ "data-disabled": disabled,
17328
+ "data-test": "DesignSystem-Listbox-ItemWrapper",
17329
+ tabIndex: draggable ? -1 : 0,
17330
+ className: itemClass,
17331
+ onKeyDown: onKeyDown,
17332
+ role: "tablist"
17333
+ }, draggable && /*#__PURE__*/React__namespace.createElement(Icon, {
17334
+ size: 16,
17335
+ appearance: "subtle",
17336
+ name: "drag_indicator",
17337
+ className: "Listbox-item--drag-icon",
17338
+ "data-test": "DesignSystem-Listbox-DragIcon"
17339
+ }), children);
17340
+ };
17341
+
17342
+ var getAnimationClass = function getAnimationClass(uniqueKey, expanded) {
17343
+ if (expanded) return "nestedList-open-" + uniqueKey + " 240ms cubic-bezier(0, 0, 0.38, 0.9)";else if (!expanded) return "nestedList-close-" + uniqueKey + " 160ms cubic-bezier(0.2, 0, 1, 0.9)";
17344
+ return '';
17345
+ };
17346
+
17347
+ var getHeight = function getHeight(listItemRef) {
17348
+ var _a;
17349
+
17350
+ var scrollHeight = (_a = listItemRef.current) === null || _a === void 0 ? void 0 : _a.scrollHeight;
17351
+ return scrollHeight;
17352
+ };
17353
+
17354
+ var menuItemAnimation = function menuItemAnimation(listItemRef, uniqueKey) {
17355
+ return "\n @keyframes nestedList-open-" + uniqueKey + " {\n from {\n height: 0px;\n }\n to {\n height: " + getHeight(listItemRef) + "px;\n }\n }\n\n @keyframes nestedList-close-" + uniqueKey + " {\n from {\n height: " + getHeight(listItemRef) + "px;\n }\n to {\n height: 0px;\n }\n }\n ";
17356
+ };
17357
+
17358
+ function usePrevious(value) {
17359
+ var ref = React__namespace.useRef();
17360
+ React__namespace.useEffect(function () {
17361
+ if (value != undefined) {
17362
+ ref.current = value;
17363
+ }
17364
+ }, [value]);
17365
+ return ref.current;
17366
+ }
17367
+
17368
+ var NestedList = function NestedList(props) {
17369
+ var nestedBody = props.nestedBody,
17370
+ expanded = props.expanded;
17371
+ var prevState = usePrevious(expanded);
17372
+
17373
+ var _a = React__namespace.useState(expanded),
17374
+ open = _a[0],
17375
+ setOpen = _a[1];
17376
+
17377
+ var _b = React__namespace.useState(''),
17378
+ keyframe = _b[0],
17379
+ setKeyframe = _b[1];
17380
+
17381
+ var listItemRef = React__namespace.useRef(null);
17382
+ var uniqueKey = Math.random().toString(36).substring(2, 6);
17383
+
17384
+ var _c = React__namespace.useState(getAnimationClass(uniqueKey, expanded)),
17385
+ animation = _c[0],
17386
+ setAnimation = _c[1];
17387
+
17388
+ React__namespace.useEffect(function () {
17389
+ if (prevState != undefined && prevState !== expanded) {
17390
+ setOpen(true);
17391
+ }
17392
+
17393
+ requestAnimationFrame(function () {
17394
+ var result = menuItemAnimation(listItemRef, uniqueKey);
17395
+ setKeyframe(result);
17396
+ });
17397
+ var animationClass = getAnimationClass(uniqueKey, expanded);
17398
+ setAnimation(animationClass);
17399
+ }, [expanded]);
17400
+
17401
+ var handleAnimationEnd = function handleAnimationEnd() {
17402
+ !expanded && setOpen(false);
17403
+ };
17404
+
17405
+ var styles = {
17406
+ animation: animation,
17407
+ overflow: 'hidden',
17408
+ animationFillMode: 'forwards'
17409
+ };
17410
+ return /*#__PURE__*/React__namespace.createElement(React__namespace.Fragment, null, /*#__PURE__*/React__namespace.createElement("style", null, keyframe), nestedBody && open && /*#__PURE__*/React__namespace.createElement("div", {
17411
+ style: styles,
17412
+ onAnimationEnd: handleAnimationEnd,
17413
+ "data-test": "DesignSystem-Listbox--Nested-Item",
17414
+ ref: listItemRef
17415
+ }, nestedBody));
17416
+ };
17417
+
17418
+ var ListboxItem = function ListboxItem(props) {
17419
+ var _a;
17420
+
17421
+ var nestedBody = props.nestedBody,
17422
+ expanded = props.expanded,
17423
+ id = props.id,
17424
+ onClick = props.onClick,
17425
+ value = props.value,
17426
+ Tag = props.tagName,
17427
+ rest = __rest(props, ["nestedBody", "expanded", "id", "onClick", "value", "tagName"]);
17428
+
17429
+ var contextProp = React__namespace.useContext(ListboxContext);
17430
+ var showDivider = contextProp.showDivider,
17431
+ draggable = contextProp.draggable;
17432
+
17433
+ var onClickHandler = function onClickHandler(e) {
17434
+ onClick && onClick(e, id, value);
17435
+ };
17436
+
17437
+ var tagClass = classNames__default["default"]((_a = {}, _a['Listbox-item-wrapper'] = !draggable, _a));
17438
+ return /*#__PURE__*/React__namespace.createElement(Tag, __assign({
17439
+ id: id,
17440
+ key: id
17441
+ }, rest, {
17442
+ "data-test": "DesignSystem-Listbox-Item",
17443
+ onClick: onClickHandler,
17444
+ "data-value": value,
17445
+ className: tagClass
17446
+ }), /*#__PURE__*/React__namespace.createElement(ListBody, __assign({}, props)), nestedBody && /*#__PURE__*/React__namespace.createElement(NestedList, {
17447
+ expanded: expanded,
17448
+ nestedBody: nestedBody
17449
+ }), showDivider && /*#__PURE__*/React__namespace.createElement(Divider, {
17450
+ className: "Listbox-divider"
17451
+ }));
17452
+ };
17453
+ ListboxItem.displayName = 'ListboxItem';
17454
+ ListboxItem.defaultProps = {
17455
+ tagName: 'li'
17456
+ };
17457
+
17458
+ var ListboxContext = /*#__PURE__*/React__namespace.createContext({
17459
+ size: 'standard',
17460
+ type: 'resource',
17461
+ draggable: false,
17462
+ showDivider: true
17463
+ });
17464
+ var Provider = ListboxContext.Provider;
17465
+ var Listbox = function Listbox(props) {
17466
+ var children = props.children,
17467
+ className = props.className,
17468
+ draggable = props.draggable,
17469
+ size = props.size,
17470
+ type = props.type,
17471
+ showDivider = props.showDivider,
17472
+ Tag = props.tagName,
17473
+ rest = __rest(props, ["children", "className", "draggable", "size", "type", "showDivider", "tagName"]);
17474
+
17475
+ var baseProps = extractBaseProps(props);
17476
+ var classes = classNames__default["default"]({
17477
+ Listbox: true
17478
+ }, className);
17479
+ var sharedProp = {
17480
+ size: size,
17481
+ type: type,
17482
+ draggable: draggable,
17483
+ showDivider: showDivider
17484
+ };
17485
+ return /*#__PURE__*/React__namespace.createElement(Provider, {
17486
+ value: sharedProp
17487
+ }, draggable ? /*#__PURE__*/React__namespace.createElement(DraggableList, __assign({}, props)) : /*#__PURE__*/React__namespace.createElement(Tag, __assign({
17488
+ "data-test": "DesignSystem-Listbox"
17489
+ }, baseProps, {
17490
+ className: classes
17491
+ }, rest), children));
17492
+ };
17493
+ Listbox.displayName = 'Listbox';
17494
+ Listbox.defaultProps = {
17495
+ tagName: 'ul',
17496
+ size: 'standard',
17497
+ type: 'resource',
17498
+ draggable: false,
17499
+ showDivider: true
17500
+ };
17501
+ Listbox.Item = ListboxItem;
17502
+
17503
+ var version = "2.25.0";
16583
17504
 
16584
17505
  exports.ActionCard = ActionCard;
16585
17506
  exports.Avatar = Avatar;
@@ -16631,6 +17552,7 @@
16631
17552
  exports.Link = Link;
16632
17553
  exports.LinkButton = LinkButton;
16633
17554
  exports.List = List;
17555
+ exports.Listbox = Listbox;
16634
17556
  exports.Message = Message;
16635
17557
  exports.MetaList = MetaList;
16636
17558
  exports.MetricInput = MetricInput;