@os-design/core 1.0.182 → 1.0.184

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 (119) hide show
  1. package/dist/cjs/DatePicker/index.js +7 -8
  2. package/dist/cjs/DatePicker/index.js.map +1 -1
  3. package/dist/cjs/MenuGroup/index.js +37 -16
  4. package/dist/cjs/MenuGroup/index.js.map +1 -1
  5. package/dist/cjs/Select/index.js +321 -63
  6. package/dist/cjs/Select/index.js.map +1 -1
  7. package/dist/esm/DatePicker/index.js +5 -6
  8. package/dist/esm/DatePicker/index.js.map +1 -1
  9. package/dist/esm/MenuGroup/index.js +44 -32
  10. package/dist/esm/MenuGroup/index.js.map +1 -1
  11. package/dist/esm/Select/index.js +342 -59
  12. package/dist/esm/Select/index.js.map +1 -1
  13. package/dist/types/Alert/index.d.ts +1 -1
  14. package/dist/types/Alert/index.d.ts.map +1 -1
  15. package/dist/types/Avatar/index.d.ts +1 -1
  16. package/dist/types/Avatar/index.d.ts.map +1 -1
  17. package/dist/types/AvatarSkeleton/index.d.ts +2 -2
  18. package/dist/types/AvatarSkeleton/index.d.ts.map +1 -1
  19. package/dist/types/Breadcrumb/index.d.ts +1 -1
  20. package/dist/types/Breadcrumb/index.d.ts.map +1 -1
  21. package/dist/types/Button/index.d.ts +2 -2
  22. package/dist/types/Button/index.d.ts.map +1 -1
  23. package/dist/types/Checkbox/index.d.ts +1 -1
  24. package/dist/types/Checkbox/index.d.ts.map +1 -1
  25. package/dist/types/CheckboxSkeleton/index.d.ts +2 -2
  26. package/dist/types/CheckboxSkeleton/index.d.ts.map +1 -1
  27. package/dist/types/DatePicker/index.d.ts +2 -2
  28. package/dist/types/DatePicker/index.d.ts.map +1 -1
  29. package/dist/types/Drawer/index.d.ts +1 -1
  30. package/dist/types/Drawer/index.d.ts.map +1 -1
  31. package/dist/types/Form/index.d.ts +1 -1
  32. package/dist/types/Form/index.d.ts.map +1 -1
  33. package/dist/types/FormDivider/index.d.ts +1 -1
  34. package/dist/types/FormDivider/index.d.ts.map +1 -1
  35. package/dist/types/FormItem/index.d.ts +1 -1
  36. package/dist/types/FormItem/index.d.ts.map +1 -1
  37. package/dist/types/Gallery/index.d.ts +1 -1
  38. package/dist/types/Gallery/index.d.ts.map +1 -1
  39. package/dist/types/Image/index.d.ts +1 -1
  40. package/dist/types/Image/index.d.ts.map +1 -1
  41. package/dist/types/ImageSkeleton/index.d.ts +1 -1
  42. package/dist/types/ImageSkeleton/index.d.ts.map +1 -1
  43. package/dist/types/Input/index.d.ts +2 -2
  44. package/dist/types/Input/index.d.ts.map +1 -1
  45. package/dist/types/InputSkeleton/index.d.ts +1 -1
  46. package/dist/types/InputSkeleton/index.d.ts.map +1 -1
  47. package/dist/types/Link/index.d.ts +1 -1
  48. package/dist/types/Link/index.d.ts.map +1 -1
  49. package/dist/types/LinkButton/index.d.ts +2 -2
  50. package/dist/types/LinkButton/index.d.ts.map +1 -1
  51. package/dist/types/List/utils/useRWLoadNext.d.ts +1 -1
  52. package/dist/types/List/utils/useRWLoadNext.d.ts.map +1 -1
  53. package/dist/types/ListItemActions/index.d.ts +1 -1
  54. package/dist/types/ListItemActions/index.d.ts.map +1 -1
  55. package/dist/types/ListItemLink/index.d.ts +2 -2
  56. package/dist/types/ListItemLink/index.d.ts.map +1 -1
  57. package/dist/types/LogoLink/index.d.ts +1 -1
  58. package/dist/types/LogoLink/index.d.ts.map +1 -1
  59. package/dist/types/MenuDivider/index.d.ts +1 -1
  60. package/dist/types/MenuDivider/index.d.ts.map +1 -1
  61. package/dist/types/MenuGroup/index.d.ts +13 -6
  62. package/dist/types/MenuGroup/index.d.ts.map +1 -1
  63. package/dist/types/Modal/index.d.ts +2 -2
  64. package/dist/types/Modal/index.d.ts.map +1 -1
  65. package/dist/types/Navigation/index.d.ts +1 -1
  66. package/dist/types/Navigation/index.d.ts.map +1 -1
  67. package/dist/types/NavigationItem/index.d.ts +1 -1
  68. package/dist/types/NavigationItem/index.d.ts.map +1 -1
  69. package/dist/types/PageContent/index.d.ts +1 -1
  70. package/dist/types/PageContent/index.d.ts.map +1 -1
  71. package/dist/types/PageHeader/index.d.ts +1 -1
  72. package/dist/types/PageHeader/index.d.ts.map +1 -1
  73. package/dist/types/PageHeaderSkeleton/index.d.ts +1 -1
  74. package/dist/types/PageHeaderSkeleton/index.d.ts.map +1 -1
  75. package/dist/types/Popover/index.d.ts +1 -1
  76. package/dist/types/Popover/index.d.ts.map +1 -1
  77. package/dist/types/Popover/utils/usePopoverPosition.d.ts +1 -1
  78. package/dist/types/Popover/utils/usePopoverPosition.d.ts.map +1 -1
  79. package/dist/types/Progress/index.d.ts +1 -1
  80. package/dist/types/Progress/index.d.ts.map +1 -1
  81. package/dist/types/RadioGroup/index.d.ts +1 -1
  82. package/dist/types/RadioGroup/index.d.ts.map +1 -1
  83. package/dist/types/Result/index.d.ts +1 -1
  84. package/dist/types/Result/index.d.ts.map +1 -1
  85. package/dist/types/Select/index.d.ts +66 -8
  86. package/dist/types/Select/index.d.ts.map +1 -1
  87. package/dist/types/Skeleton/index.d.ts +1 -1
  88. package/dist/types/Skeleton/index.d.ts.map +1 -1
  89. package/dist/types/Switch/index.d.ts +1 -1
  90. package/dist/types/Switch/index.d.ts.map +1 -1
  91. package/dist/types/SwitchSkeleton/index.d.ts +1 -1
  92. package/dist/types/SwitchSkeleton/index.d.ts.map +1 -1
  93. package/dist/types/Tag/index.d.ts +2 -2
  94. package/dist/types/Tag/index.d.ts.map +1 -1
  95. package/dist/types/TagLink/index.d.ts +2 -2
  96. package/dist/types/TagLink/index.d.ts.map +1 -1
  97. package/dist/types/TagList/index.d.ts +1 -1
  98. package/dist/types/TagList/index.d.ts.map +1 -1
  99. package/dist/types/TextArea/index.d.ts +1 -1
  100. package/dist/types/TextArea/index.d.ts.map +1 -1
  101. package/dist/types/TextAreaSkeleton/index.d.ts +1 -1
  102. package/dist/types/TextAreaSkeleton/index.d.ts.map +1 -1
  103. package/dist/types/ThemeSwitcher/index.d.ts +1 -1
  104. package/dist/types/ThemeSwitcher/index.d.ts.map +1 -1
  105. package/dist/types/Video/index.d.ts +2 -2
  106. package/dist/types/Video/index.d.ts.map +1 -1
  107. package/package.json +7 -7
  108. package/dist/cjs/Select/SelectList.js +0 -146
  109. package/dist/cjs/Select/SelectList.js.map +0 -1
  110. package/dist/cjs/Select/SelectToggle.js +0 -195
  111. package/dist/cjs/Select/SelectToggle.js.map +0 -1
  112. package/dist/esm/Select/SelectList.js +0 -125
  113. package/dist/esm/Select/SelectList.js.map +0 -1
  114. package/dist/esm/Select/SelectToggle.js +0 -217
  115. package/dist/esm/Select/SelectToggle.js.map +0 -1
  116. package/dist/types/Select/SelectList.d.ts +0 -22
  117. package/dist/types/Select/SelectList.d.ts.map +0 -1
  118. package/dist/types/Select/SelectToggle.d.ts +0 -73
  119. package/dist/types/Select/SelectToggle.d.ts.map +0 -1
@@ -4,26 +4,39 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" =
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports["default"] = exports.SelectContainer = void 0;
7
+ exports["default"] = exports.ToggleRightAddon = exports.ToggleLeftAddon = exports.ToggleIconContainer = exports.ToggleContent = exports.ToggleContainer = exports.Title = exports.SelectContainer = exports.Placeholder = exports.ClearIcon = void 0;
8
8
  var _react = require("@emotion/react");
9
9
  var _styled = _interopRequireDefault(require("@emotion/styled"));
10
+ var _icons = require("@os-design/icons");
10
11
  var _media = require("@os-design/media");
11
12
  var _styles = require("@os-design/styles");
12
13
  var _theming = require("@os-design/theming");
13
14
  var _utils = require("@os-design/utils");
14
15
  var _react2 = _interopRequireWildcard(require("react"));
16
+ var _reactWindow = require("react-window");
17
+ var _Button = _interopRequireDefault(require("../Button"));
15
18
  var _Input = require("../Input");
16
19
  var _InputSearch = _interopRequireDefault(require("../InputSearch"));
20
+ var _useRWLoadNext = _interopRequireDefault(require("../List/utils/useRWLoadNext"));
17
21
  var _Menu = _interopRequireDefault(require("../Menu"));
18
- var _SelectList = _interopRequireDefault(require("./SelectList"));
19
- var _SelectToggle = _interopRequireDefault(require("./SelectToggle"));
22
+ var _MenuItem = _interopRequireDefault(require("../MenuItem"));
23
+ var _Tag = _interopRequireDefault(require("../Tag"));
20
24
  var _defaultLocale = _interopRequireDefault(require("./utils/defaultLocale"));
21
- var _excluded = ["options", "left", "leftHasPadding", "right", "rightHasPadding", "placeholder", "searchVisible", "searchProps", "notFoundText", "unbordered", "loading", "disabled", "autoFocus", "autoOpen", "clearVisible", "threshold", "visibleCount", "overscanCount", "maxSelectedItems", "locale", "value", "defaultValue", "onChange", "onLoadNext", "onClose", "onBlur", "size", "placement"];
22
- var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8;
25
+ var _excluded = ["options", "left", "leftHasPadding", "right", "rightHasPadding", "placeholder", "searchVisible", "searchProps", "notFoundText", "unbordered", "loading", "disabled", "autoFocus", "autoOpen", "clearVisible", "threshold", "visibleCount", "overscanCount", "multiple", "maxSelectedItems", "locale", "value", "defaultValue", "onChange", "onLoadNext", "onClose", "onBlur", "size", "placement"],
26
+ _excluded2 = ["style"],
27
+ _excluded3 = ["title", "value", "onClick"];
28
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12, _templateObject13, _templateObject14, _templateObject15, _templateObject16, _templateObject17, _templateObject18, _templateObject19, _templateObject20, _templateObject21, _templateObject22, _templateObject23, _templateObject24, _templateObject25, _templateObject26, _templateObject27;
23
29
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
24
30
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
25
31
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
26
32
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
33
+ function ownKeys(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; }
34
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
35
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
36
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
37
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
38
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
39
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
27
40
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
28
41
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
29
42
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
@@ -33,24 +46,24 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
33
46
  function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
34
47
  function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
35
48
  function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
36
- var paddingStyles = function paddingStyles(p) {
49
+ var selectContainerPaddingStyles = function selectContainerPaddingStyles(p) {
37
50
  var paddingVertical = (p.theme.baseHeight - p.theme.selectToggleListItemHeight) / 2;
38
51
  return (0, _react.css)(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n padding: calc(", "em - 1px) 0;\n "])), paddingVertical);
39
52
  };
40
- var openedStyles = function openedStyles(p) {
53
+ var selectContainerOpenedStyles = function selectContainerOpenedStyles(p) {
41
54
  return p.opened && !p.unbordered && (0, _react.css)(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n border-color: ", ";\n box-shadow: 0 0 0 0.15em ", ";\n "])), (0, _theming.clr)(p.theme.inputFocusColorBorder), (0, _theming.clr)(p.theme.inputFocusColorShadow));
42
55
  };
43
- var unborderedStyles = function unborderedStyles(p) {
56
+ var selectContainerUnborderedStyles = function selectContainerUnborderedStyles(p) {
44
57
  return p.unbordered && (0, _react.css)(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n border: 0;\n box-shadow: none !important;\n ", ";\n "])), (0, _styles.transitionStyles)('background-color')(p));
45
58
  };
46
- var unborderedHoverStyles = function unborderedHoverStyles(p) {
59
+ var selectContainerUnborderedHoverStyles = function selectContainerUnborderedHoverStyles(p) {
47
60
  return p.unbordered && !p.disabled && (0, _react.css)(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n @media (hover: hover) {\n &:hover,\n &:focus {\n background-color: ", ";\n }\n }\n "])), (0, _theming.clr)(p.theme.buttonGhostColorBgHover));
48
61
  };
49
62
  var SelectContainer = (0, _styled["default"])(_Input.InputContainer, (0, _utils.omitEmotionProps)('opened', 'unbordered', 'disabled'))(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n cursor: ", ";\n user-select: none;\n position: relative;\n display: flex;\n align-items: center;\n\n height: unset;\n min-height: ", "em;\n\n ", ";\n ", ";\n ", ";\n ", ";\n"])), function (p) {
50
63
  return !p.disabled ? 'pointer' : 'not-allowed';
51
64
  }, function (p) {
52
65
  return p.theme.baseHeight;
53
- }, paddingStyles, openedStyles, unborderedStyles, unborderedHoverStyles);
66
+ }, selectContainerPaddingStyles, selectContainerOpenedStyles, selectContainerUnborderedStyles, selectContainerUnborderedHoverStyles);
54
67
  exports.SelectContainer = SelectContainer;
55
68
  var SelectMenu = (0, _styled["default"])(_Menu["default"], (0, _utils.omitEmotionProps)('width'))(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["\n padding-top: 0;\n padding-bottom: 0;\n max-height: unset;\n\n ", " {\n width: ", "px;\n }\n"])), _media.m.min.xs, function (p) {
56
69
  return p.width;
@@ -67,10 +80,75 @@ var InputSearchContainer = _styled["default"].div(_templateObject8 || (_template
67
80
  }, function (p) {
68
81
  return p.theme.inputPaddingHorizontal;
69
82
  });
83
+ var ToggleContainer = _styled["default"].div(_templateObject9 || (_templateObject9 = _taggedTemplateLiteral(["\n flex: 1;\n display: flex;\n align-items: center;\n overflow: hidden;\n"])));
84
+ exports.ToggleContainer = ToggleContainer;
85
+ var toggleContentNotHasLeftStyles = function toggleContentNotHasLeftStyles(p) {
86
+ return !p.hasLeft && (0, _react.css)(_templateObject10 || (_templateObject10 = _taggedTemplateLiteral(["\n padding-left: ", "em;\n "])), p.theme.inputPaddingHorizontal);
87
+ };
88
+ var toggleContentNotHasRightStyles = function toggleContentNotHasRightStyles(p) {
89
+ return !p.hasRight && !p.unbordered && (0, _react.css)(_templateObject11 || (_templateObject11 = _taggedTemplateLiteral(["\n padding-right: ", "em;\n "])), p.theme.inputPaddingHorizontal);
90
+ };
91
+ var ToggleContent = (0, _styled["default"])('div', (0, _utils.omitEmotionProps)('hasLeft', 'hasRight', 'unbordered'))(_templateObject12 || (_templateObject12 = _taggedTemplateLiteral(["\n flex: 1;\n ", ";\n ", ";\n ", ";\n"])), toggleContentNotHasLeftStyles, toggleContentNotHasRightStyles, _styles.ellipsisStyles);
92
+ exports.ToggleContent = ToggleContent;
93
+ var Placeholder = _styled["default"].span(_templateObject13 || (_templateObject13 = _taggedTemplateLiteral(["\n color: ", ";\n ", ";\n"])), function (p) {
94
+ return (0, _theming.clr)(p.theme.inputColorPlaceholder);
95
+ }, _styles.ellipsisStyles);
96
+ exports.Placeholder = Placeholder;
97
+ var titleUnborderedTitleStyles = function titleUnborderedTitleStyles(p) {
98
+ return p.unbordered && (0, _react.css)(_templateObject14 || (_templateObject14 = _taggedTemplateLiteral(["\n font-weight: 500;\n ", "\n "])), !p.disabled && "color: ".concat((0, _theming.clr)(p.theme.colorPrimary), ";"));
99
+ };
100
+ var titleDisabledStyles = function titleDisabledStyles(p) {
101
+ return p.disabled && (0, _react.css)(_templateObject15 || (_templateObject15 = _taggedTemplateLiteral(["\n color: ", ";\n "])), (0, _theming.clr)(p.theme.inputDisabledColorText));
102
+ };
103
+ var Title = (0, _styled["default"])('span', (0, _utils.omitEmotionProps)('disabled', 'unbordered'))(_templateObject16 || (_templateObject16 = _taggedTemplateLiteral(["\n color: ", ";\n ", ";\n ", ";\n ", ";\n"])), function (p) {
104
+ return (0, _theming.clr)(p.theme.colorText);
105
+ }, titleUnborderedTitleStyles, titleDisabledStyles, _styles.ellipsisStyles);
106
+ exports.Title = Title;
107
+ var ToggleListItem = (0, _styled["default"])(_Tag["default"], (0, _utils.omitEmotionProps)('disabled'))(_templateObject17 || (_templateObject17 = _taggedTemplateLiteral(["\n // Reset tag styles\n padding-top: 0;\n padding-bottom: 0;\n\n height: ", "em;\n ", ";\n"])), function (p) {
108
+ return p.theme.selectToggleListItemHeight;
109
+ }, titleDisabledStyles);
110
+ var ToggleList = _styled["default"].div(_templateObject18 || (_templateObject18 = _taggedTemplateLiteral(["\n display: flex;\n flex-wrap: wrap;\n overflow: hidden; // For ellipsis styles\n\n margin: 0 ", "em\n ", "em 0;\n\n & > div {\n margin: 0 ", "em\n ", "em 0;\n }\n"])), function (p) {
111
+ return p.theme.selectToggleListItemGap;
112
+ }, function (p) {
113
+ return -p.theme.selectToggleListItemGap;
114
+ }, function (p) {
115
+ return p.theme.selectToggleListItemGap;
116
+ }, function (p) {
117
+ return p.theme.selectToggleListItemGap;
118
+ });
119
+ var DeleteButton = _styled["default"].button(_templateObject19 || (_templateObject19 = _taggedTemplateLiteral(["\n ", ";\n cursor: pointer;\n display: inherit;\n font-size: 1em;\n margin-left: 0.2em;\n\n background-color: transparent;\n color: ", ";\n\n @media (hover: hover) {\n &:hover,\n &:focus {\n color: ", ";\n }\n }\n\n ", ";\n"])), _styles.resetButtonStyles, function (p) {
120
+ return (0, _theming.clr)(p.theme.selectToggleDeleteButtonColorIcon);
121
+ }, function (p) {
122
+ return (0, _theming.clr)(p.theme.selectToggleDeleteButtonColorIconHover);
123
+ }, (0, _styles.transitionStyles)('color'));
124
+ var toggleIconUnborderedStyles = function toggleIconUnborderedStyles(p) {
125
+ return p.unbordered && (0, _react.css)(_templateObject20 || (_templateObject20 = _taggedTemplateLiteral(["\n padding-top: 0.2em;\n font-size: 0.8em;\n ", "\n "])), !p.disabled && "color: ".concat((0, _theming.clr)(p.theme.colorPrimary), ";"));
126
+ };
127
+ var ToggleIconContainer = (0, _styled["default"])('span', (0, _utils.omitEmotionProps)('unbordered', 'disabled'))(_templateObject21 || (_templateObject21 = _taggedTemplateLiteral(["\n color: ", ";\n line-height: 1;\n ", ";\n"])), function (p) {
128
+ return (0, _theming.clr)(p.theme.selectColorIcon);
129
+ }, toggleIconUnborderedStyles);
130
+ exports.ToggleIconContainer = ToggleIconContainer;
131
+ var ClearIcon = (0, _styled["default"])(_icons.CloseCircle)(_templateObject22 || (_templateObject22 = _taggedTemplateLiteral(["\n transform: scale(1.2) !important;\n"])));
132
+ exports.ClearIcon = ClearIcon;
133
+ var Addon = (0, _styled["default"])('span', (0, _utils.omitEmotionProps)('hasPadding'))(_templateObject23 || (_templateObject23 = _taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n user-select: none;\n color: ", ";\n\n svg {\n transform: scale(1.2);\n }\n"])), function (p) {
134
+ return (0, _theming.clr)(p.theme.inputColorPlaceholder);
135
+ });
136
+ var ToggleLeftAddon = (0, _styled["default"])(Addon)(_templateObject24 || (_templateObject24 = _taggedTemplateLiteral(["\n padding-right: ", "em;\n ", "\n"])), function (p) {
137
+ return p.theme.inputAddonPaddingHorizontal;
138
+ }, function (p) {
139
+ return p.hasPadding && (0, _react.css)(_templateObject25 || (_templateObject25 = _taggedTemplateLiteral(["\n padding-left: ", "em;\n "])), p.theme.inputPaddingHorizontal);
140
+ });
141
+ exports.ToggleLeftAddon = ToggleLeftAddon;
142
+ var ToggleRightAddon = (0, _styled["default"])(Addon)(_templateObject26 || (_templateObject26 = _taggedTemplateLiteral(["\n padding-left: ", "em;\n ", "\n"])), function (p) {
143
+ return p.theme.inputAddonPaddingHorizontal;
144
+ }, function (p) {
145
+ return p.hasPadding && (0, _react.css)(_templateObject27 || (_templateObject27 = _taggedTemplateLiteral(["\n padding-right: ", "em;\n "])), p.theme.inputPaddingHorizontal);
146
+ });
70
147
 
71
148
  /**
72
149
  * The component that allows to pick a value from predefined options.
73
150
  */
151
+ exports.ToggleRightAddon = ToggleRightAddon;
74
152
  var Select = /*#__PURE__*/(0, _react2.forwardRef)(function (_ref, ref) {
75
153
  var _ref$options = _ref.options,
76
154
  options = _ref$options === void 0 ? [] : _ref$options,
@@ -105,8 +183,10 @@ var Select = /*#__PURE__*/(0, _react2.forwardRef)(function (_ref, ref) {
105
183
  visibleCount = _ref$visibleCount === void 0 ? 6 : _ref$visibleCount,
106
184
  _ref$overscanCount = _ref.overscanCount,
107
185
  overscanCount = _ref$overscanCount === void 0 ? 10 : _ref$overscanCount,
186
+ _ref$multiple = _ref.multiple,
187
+ multiple = _ref$multiple === void 0 ? false : _ref$multiple,
108
188
  _ref$maxSelectedItems = _ref.maxSelectedItems,
109
- maxSelectedItems = _ref$maxSelectedItems === void 0 ? 1 : _ref$maxSelectedItems,
189
+ maxSelectedItems = _ref$maxSelectedItems === void 0 ? 0 : _ref$maxSelectedItems,
110
190
  _ref$locale = _ref.locale,
111
191
  locale = _ref$locale === void 0 ? _defaultLocale["default"] : _ref$locale,
112
192
  value = _ref.value,
@@ -134,6 +214,7 @@ var Select = /*#__PURE__*/(0, _react2.forwardRef)(function (_ref, ref) {
134
214
  _useState4 = _slicedToArray(_useState3, 2),
135
215
  opened = _useState4[0],
136
216
  setOpened = _useState4[1];
217
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
137
218
  var _useForwardedState = (0, _utils.useForwardedState)({
138
219
  value: value,
139
220
  defaultValue: defaultValue,
@@ -144,8 +225,7 @@ var Select = /*#__PURE__*/(0, _react2.forwardRef)(function (_ref, ref) {
144
225
  setForwardedValue = _useForwardedState2[1];
145
226
  (0, _react2.useEffect)(function () {
146
227
  var _containerRef$current;
147
- if (!autoFocus) return;
148
- (_containerRef$current = containerRef.current) === null || _containerRef$current === void 0 ? void 0 : _containerRef$current.focus();
228
+ if (autoFocus) (_containerRef$current = containerRef.current) === null || _containerRef$current === void 0 ? void 0 : _containerRef$current.focus();
149
229
  }, [autoFocus, containerRef]);
150
230
  var onCloseRef = (0, _react2.useRef)(onClose);
151
231
  (0, _react2.useEffect)(function () {
@@ -182,23 +262,205 @@ var Select = /*#__PURE__*/(0, _react2.forwardRef)(function (_ref, ref) {
182
262
  if (!containerRef.current) return;
183
263
  containerRef.current.setAttribute('aria-haspopup', 'listbox');
184
264
  }, []);
185
- var selectedItems = (0, _react2.useMemo)(function () {
186
- return (forwardedValue || []).map(function (v) {
187
- var option = (options || []).find(function (item) {
188
- return item.value === v;
189
- });
190
- return {
191
- title: option ? option.title || '' : '',
192
- value: v
193
- };
194
- });
195
- }, [forwardedValue, options]);
196
265
  var listBoxId = (0, _react2.useMemo)(function () {
197
266
  return "listbox-".concat(Math.random().toString(36).slice(2, 11));
198
267
  }, []);
199
268
  var blurHandler = (0, _react2.useCallback)(function (e) {
200
269
  if (!opened) onBlur(e);
201
270
  }, [onBlur, opened]);
271
+ var onDelete = (0, _react2.useCallback)(function (v) {
272
+ if (!multiple) return;
273
+ setForwardedValue((forwardedValue || []).filter(function (item) {
274
+ return item !== v;
275
+ }));
276
+ }, [forwardedValue, multiple, setForwardedValue]);
277
+ var toggleContent = (0, _react2.useMemo)(function () {
278
+ if (multiple) {
279
+ if (!forwardedValue || forwardedValue.length === 0) {
280
+ return /*#__PURE__*/_react2["default"].createElement(Placeholder, null, placeholder);
281
+ }
282
+ var items = forwardedValue.map(function (v) {
283
+ var option = (options || []).find(function (item) {
284
+ return item.value === v;
285
+ });
286
+ return {
287
+ title: option ? option.title || '' : '',
288
+ value: v
289
+ };
290
+ });
291
+ return /*#__PURE__*/_react2["default"].createElement(ToggleList, null, items.map(function (_ref2) {
292
+ var title = _ref2.title,
293
+ v = _ref2.value;
294
+ return /*#__PURE__*/_react2["default"].createElement(ToggleListItem, {
295
+ key: v,
296
+ disabled: disabled,
297
+ right: !disabled ? /*#__PURE__*/_react2["default"].createElement(DeleteButton, {
298
+ onClick: function onClick(e) {
299
+ onDelete(v);
300
+ e.stopPropagation();
301
+ },
302
+ onKeyDown: function onKeyDown(e) {
303
+ return e.stopPropagation();
304
+ },
305
+ "aria-label": "".concat(locale.deleteLabel, " ").concat(title),
306
+ "aria-hidden": true
307
+ }, /*#__PURE__*/_react2["default"].createElement(_icons.Close, null)) : undefined,
308
+ "aria-hidden": true
309
+ }, title);
310
+ }));
311
+ }
312
+ if (!forwardedValue) {
313
+ return /*#__PURE__*/_react2["default"].createElement(Placeholder, null, placeholder);
314
+ }
315
+ var option = (options || []).find(function (item) {
316
+ return item.value === forwardedValue;
317
+ });
318
+ return /*#__PURE__*/_react2["default"].createElement(Title, {
319
+ disabled: disabled,
320
+ unbordered: unbordered
321
+ }, option ? option.title : '');
322
+ }, [disabled, forwardedValue, locale.deleteLabel, multiple, onDelete, options, placeholder, unbordered]);
323
+ var toggleShowClearButton = (0, _react2.useMemo)(function () {
324
+ if (!clearVisible) return false;
325
+ if (multiple) return forwardedValue && forwardedValue.length > 0;
326
+ return !!forwardedValue;
327
+ }, [clearVisible, forwardedValue, multiple]);
328
+ var toggleOnClear = (0, _react2.useCallback)(function () {
329
+ setForwardedValue(multiple ? [] : null);
330
+ if (!containerRef.current) return;
331
+ containerRef.current.focus();
332
+ }, [containerRef, multiple, setForwardedValue]);
333
+ var toggleRightValue = (0, _react2.useMemo)(function () {
334
+ if (loading) return /*#__PURE__*/_react2["default"].createElement(_icons.Loading, null);
335
+ if (toggleShowClearButton) {
336
+ return /*#__PURE__*/_react2["default"].createElement(_Button["default"], {
337
+ type: "ghost",
338
+ wide: "never",
339
+ size: "small",
340
+ disabled: disabled,
341
+ onClick: function onClick(e) {
342
+ toggleOnClear();
343
+ e.stopPropagation();
344
+ },
345
+ onKeyDown: function onKeyDown(e) {
346
+ if (e.key === 'Enter') toggleOnClear();
347
+ e.stopPropagation();
348
+ },
349
+ "aria-label": locale.clearLabel
350
+ }, /*#__PURE__*/_react2["default"].createElement(ClearIcon, null));
351
+ }
352
+ return right || /*#__PURE__*/_react2["default"].createElement(ToggleIconContainer, {
353
+ unbordered: unbordered,
354
+ disabled: disabled
355
+ }, opened ? /*#__PURE__*/_react2["default"].createElement(_icons.Up, null) : /*#__PURE__*/_react2["default"].createElement(_icons.Down, null));
356
+ }, [disabled, loading, locale.clearLabel, opened, right, toggleOnClear, toggleShowClearButton, unbordered]);
357
+ var toggleRightHasPaddingValue = (0, _react2.useMemo)(function () {
358
+ if (loading) return true;
359
+ if (toggleShowClearButton) return false;
360
+ return right ? rightHasPadding : true;
361
+ }, [loading, right, rightHasPadding, toggleShowClearButton]);
362
+ var onSelect = (0, _react2.useCallback)(function (v) {
363
+ if (multiple) {
364
+ // Delete the value because it was already selected
365
+ if ((forwardedValue || []).includes(v)) {
366
+ setForwardedValue((forwardedValue || []).filter(function (item) {
367
+ return item !== v;
368
+ }));
369
+ return;
370
+ }
371
+
372
+ // Add a new value if the number of selected items is less than max
373
+ if (maxSelectedItems === 0 || (forwardedValue || []).length < maxSelectedItems) {
374
+ setForwardedValue([].concat(_toConsumableArray(forwardedValue || []), [v]));
375
+ return;
376
+ }
377
+ return;
378
+ }
379
+ setForwardedValue(v);
380
+ }, [forwardedValue, maxSelectedItems, multiple, setForwardedValue]);
381
+ var windowSize = (0, _utils.useSize)();
382
+ var isMinXs = (0, _media.useIsMinWidth)('xs');
383
+ var fontSize = (0, _utils.useFontSize)(document.body);
384
+ var _useTheme = (0, _theming.useTheme)(),
385
+ theme = _useTheme.theme;
386
+ var scaleFactor = (0, _react2.useMemo)(function () {
387
+ var s = size || 'medium';
388
+ return ['small', 'medium', 'large'].includes(s) ? theme.sizes[s] : Number(s.replace(/^([0-9]+(\.[0-9]+)?).*/, '$1')) || 1; // Extract the number
389
+ }, [size, theme.sizes]);
390
+ var paddingBottom = (0, _react2.useMemo)(function () {
391
+ var paddingEm = isMinXs ? theme.menuPaddingVertical : theme.modalBodyPaddingVertical[0];
392
+ return paddingEm * fontSize * scaleFactor;
393
+ }, [isMinXs, theme.menuPaddingVertical, theme.modalBodyPaddingVertical, fontSize, scaleFactor]);
394
+ var paddingTop = (0, _react2.useMemo)(function () {
395
+ return searchVisible ? 5 * scaleFactor : paddingBottom;
396
+ }, [searchVisible, scaleFactor, paddingBottom]);
397
+ var searchInputHeight = (0, _react2.useMemo)(function () {
398
+ return searchVisible ? (theme.baseHeight + theme.menuPaddingVertical) * fontSize * scaleFactor : 0;
399
+ }, [searchVisible, theme.baseHeight, theme.menuPaddingVertical, fontSize, scaleFactor]);
400
+ var itemSize = (0, _react2.useMemo)(function () {
401
+ return theme.menuItemHeight * fontSize * scaleFactor;
402
+ }, [theme.menuItemHeight, fontSize, scaleFactor]);
403
+ var height = (0, _react2.useMemo)(function () {
404
+ // Modal
405
+ if (!isMinXs) {
406
+ var maxHeight = windowSize.height - theme.modalHeaderHeight * fontSize * scaleFactor - searchInputHeight;
407
+ var curHeight = options.length * itemSize + paddingTop + paddingBottom;
408
+ return curHeight < maxHeight ? curHeight : maxHeight;
409
+ }
410
+ // Popover
411
+ var count = options.length < visibleCount ? options.length : visibleCount;
412
+ return count * itemSize + paddingTop + paddingBottom;
413
+ }, [isMinXs, options.length, visibleCount, itemSize, windowSize.height, theme.modalHeaderHeight, fontSize, scaleFactor, searchInputHeight, paddingTop, paddingBottom]);
414
+ var scrollHandler = (0, _useRWLoadNext["default"])({
415
+ itemCount: options.length,
416
+ threshold: threshold,
417
+ itemSize: itemSize,
418
+ paddingTop: paddingTop,
419
+ height: height,
420
+ onLoadNext: onLoadNext
421
+ });
422
+
423
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
424
+ var InnerElement = (0, _react2.useCallback)(function (_ref3) {
425
+ var style = _ref3.style,
426
+ innerElementRest = _objectWithoutProperties(_ref3, _excluded2);
427
+ return /*#__PURE__*/_react2["default"].createElement("div", _extends({
428
+ style: _objectSpread(_objectSpread({}, style), {}, {
429
+ height: "".concat(parseFloat(style.height) + paddingTop + paddingBottom, "px")
430
+ }),
431
+ role: "listbox",
432
+ id: listBoxId
433
+ }, innerElementRest));
434
+ }, [listBoxId, paddingBottom, paddingTop]);
435
+ var listItemFn = (0, _react2.useCallback)(function (_ref4) {
436
+ var index = _ref4.index,
437
+ style = _ref4.style;
438
+ var _options$index = options[index],
439
+ optionTitle = _options$index.title,
440
+ optionValue = _options$index.value,
441
+ optionOnClick = _options$index.onClick,
442
+ restOption = _objectWithoutProperties(_options$index, _excluded3);
443
+ return /*#__PURE__*/_react2["default"].createElement(_MenuItem["default"], _extends({
444
+ style: _objectSpread(_objectSpread({}, style), {}, {
445
+ top: "".concat(parseFloat(style.top ? style.top.toString() : '0') + paddingTop, "px")
446
+ }),
447
+ selected: multiple && (forwardedValue || []).includes(optionValue || '') || !multiple && forwardedValue === optionValue,
448
+ onClick: function onClick(e) {
449
+ if (!optionValue) return;
450
+ onSelect(optionValue);
451
+
452
+ // Focus the input.
453
+ // Otherwise, if multiple is false and the user presses enter to select an item,
454
+ // the input will lose focus.
455
+ if (containerRef.current && !multiple) {
456
+ containerRef.current.focus();
457
+ }
458
+ if (optionOnClick) optionOnClick(e);
459
+ },
460
+ role: "option",
461
+ "aria-selected": multiple && (forwardedValue || []).includes(optionValue || '') || !multiple && forwardedValue === optionValue
462
+ }, restOption), optionTitle);
463
+ }, [containerRef, forwardedValue, multiple, onSelect, options, paddingTop]);
202
464
  return /*#__PURE__*/_react2["default"].createElement(_react2["default"].Fragment, null, /*#__PURE__*/_react2["default"].createElement(SelectContainer, _extends({
203
465
  opened: opened,
204
466
  unbordered: unbordered,
@@ -227,31 +489,29 @@ var Select = /*#__PURE__*/(0, _react2.forwardRef)(function (_ref, ref) {
227
489
  "aria-owns": listBoxId
228
490
  }, rest, {
229
491
  ref: mergedContainerRef
230
- }), /*#__PURE__*/_react2["default"].createElement(_SelectToggle["default"], {
231
- selectedItems: selectedItems,
232
- onDelete: function onDelete(v) {
233
- return setForwardedValue((forwardedValue || []).filter(function (item) {
234
- return item !== v;
235
- }));
236
- },
237
- onClear: function onClear() {
238
- setForwardedValue([]);
239
- if (!containerRef.current) return;
240
- containerRef.current.focus();
241
- },
242
- opened: opened,
243
- multiple: maxSelectedItems !== 1,
244
- placeholder: placeholder,
245
- left: left,
246
- leftHasPadding: leftHasPadding,
247
- right: right,
248
- rightHasPadding: rightHasPadding,
249
- unbordered: unbordered,
250
- disabled: disabled,
251
- clearVisible: clearVisible,
252
- loading: loading,
253
- locale: locale
254
- })), /*#__PURE__*/_react2["default"].createElement(SelectMenu, {
492
+ }), /*#__PURE__*/_react2["default"].createElement(ToggleContainer, null, left && /*#__PURE__*/_react2["default"].createElement(_theming.ThemeOverrider, {
493
+ overrides: function overrides(t) {
494
+ return {
495
+ buttonPaddingHorizontal: 0.8,
496
+ baseHeight: t.selectToggleListItemHeight / t.sizes.small
497
+ };
498
+ }
499
+ }, /*#__PURE__*/_react2["default"].createElement(ToggleLeftAddon, {
500
+ hasPadding: leftHasPadding
501
+ }, left)), /*#__PURE__*/_react2["default"].createElement(ToggleContent, {
502
+ hasLeft: !!left,
503
+ hasRight: !!right,
504
+ unbordered: unbordered
505
+ }, toggleContent), toggleRightValue && /*#__PURE__*/_react2["default"].createElement(_theming.ThemeOverrider, {
506
+ overrides: function overrides(t) {
507
+ return {
508
+ buttonPaddingHorizontal: 0.8,
509
+ baseHeight: t.selectToggleListItemHeight / t.sizes.small
510
+ };
511
+ }
512
+ }, /*#__PURE__*/_react2["default"].createElement(ToggleRightAddon, {
513
+ hasPadding: toggleRightHasPaddingValue
514
+ }, toggleRightValue)))), /*#__PURE__*/_react2["default"].createElement(SelectMenu, {
255
515
  trigger: containerRef,
256
516
  visible: opened,
257
517
  onClose: function onClose() {
@@ -259,25 +519,23 @@ var Select = /*#__PURE__*/(0, _react2.forwardRef)(function (_ref, ref) {
259
519
  },
260
520
  size: size,
261
521
  width: width,
262
- closeOnSelect: maxSelectedItems === 1,
522
+ closeOnSelect: !multiple,
263
523
  modalTitle: placeholder,
264
524
  placement: placement
265
525
  }, searchVisible && /*#__PURE__*/_react2["default"].createElement(InputSearchContainer, {
266
526
  ref: inputSearchContainerRef
267
- }, /*#__PURE__*/_react2["default"].createElement(_InputSearch["default"], searchProps)), options.length > 0 ? /*#__PURE__*/_react2["default"].createElement(_SelectList["default"], {
268
- searchVisible: searchVisible,
269
- options: options,
270
- visibleCount: visibleCount,
527
+ }, /*#__PURE__*/_react2["default"].createElement(_InputSearch["default"], searchProps)), options.length > 0 ? /*#__PURE__*/_react2["default"].createElement(_reactWindow.FixedSizeList, {
528
+ width: "100%",
529
+ height: height,
530
+ itemSize: itemSize,
531
+ itemCount: options.length,
271
532
  overscanCount: overscanCount,
272
- threshold: threshold,
273
- onLoadNext: onLoadNext,
274
- maxSelectedItems: maxSelectedItems,
275
- containerRef: containerRef,
276
- value: forwardedValue,
277
- onChange: setForwardedValue,
278
- id: listBoxId,
279
- size: size
280
- }) : /*#__PURE__*/_react2["default"].createElement(NotFound, null, notFoundText)));
533
+ onScroll: function onScroll(_ref5) {
534
+ var scrollOffset = _ref5.scrollOffset;
535
+ return scrollHandler(scrollOffset);
536
+ },
537
+ innerElementType: InnerElement
538
+ }, listItemFn) : /*#__PURE__*/_react2["default"].createElement(NotFound, null, notFoundText)));
281
539
  });
282
540
  Select.displayName = 'Select';
283
541
  var _default = Select;