@elliemae/ds-pills 2.3.0-alpha.8 → 2.3.0-next.2

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 (216) hide show
  1. package/cjs/components/Pill.js +53 -0
  2. package/cjs/components/PillButton.js +56 -0
  3. package/cjs/components/PillGroup.js +64 -0
  4. package/cjs/components/index.js +17 -0
  5. package/cjs/components/styled.js +85 -0
  6. package/cjs/components/types/DropdownPill.js +86 -0
  7. package/cjs/components/types/InputPill.js +74 -0
  8. package/cjs/components/types/LabelPill.js +46 -0
  9. package/cjs/components/types/ReadOnlyPill.js +50 -0
  10. package/cjs/components/types/RemovablePill.js +72 -0
  11. package/cjs/components/types/ValuePill.js +54 -0
  12. package/cjs/components/types/index.js +19 -0
  13. package/cjs/deprecated/DropdownPill.js +113 -0
  14. package/cjs/deprecated/InputPill.js +84 -0
  15. package/cjs/deprecated/LabeledDropdownPills.js +106 -0
  16. package/cjs/deprecated/LabeledDropdownPillsTypes/LabeledDropdownCascadeMenuPill.js +134 -0
  17. package/cjs/deprecated/LabeledDropdownPillsTypes/LabeledDropdownMultiPill.js +153 -0
  18. package/cjs/deprecated/LabeledDropdownPillsTypes/LabeledDropdownSinglePill.js +162 -0
  19. package/cjs/deprecated/LabeledDropdownPillsTypes/utils.js +20 -0
  20. package/cjs/deprecated/LabeledPills.js +62 -0
  21. package/cjs/deprecated/OverflowPill.js +73 -0
  22. package/cjs/deprecated/Pill.js +88 -0
  23. package/cjs/deprecated/PillGroup.js +72 -0
  24. package/cjs/deprecated/ReadOnlyPill.js +101 -0
  25. package/cjs/deprecated/RemovablePill.js +74 -0
  26. package/cjs/deprecated/index.js +33 -0
  27. package/cjs/index.d.js +2 -0
  28. package/cjs/index.js +43 -0
  29. package/cjs/props.js +69 -0
  30. package/cjs/utils.js +28 -0
  31. package/esm/components/Pill.js +44 -0
  32. package/esm/components/PillButton.js +46 -0
  33. package/esm/components/PillGroup.js +53 -0
  34. package/esm/components/index.js +3 -0
  35. package/esm/components/styled.js +67 -0
  36. package/esm/components/types/DropdownPill.js +76 -0
  37. package/esm/components/types/InputPill.js +65 -0
  38. package/esm/components/types/LabelPill.js +37 -0
  39. package/esm/components/types/ReadOnlyPill.js +41 -0
  40. package/esm/components/types/RemovablePill.js +63 -0
  41. package/esm/components/types/ValuePill.js +45 -0
  42. package/esm/components/types/index.js +6 -0
  43. package/esm/deprecated/DropdownPill.js +100 -0
  44. package/esm/deprecated/InputPill.js +74 -0
  45. package/esm/deprecated/LabeledDropdownPills.js +95 -0
  46. package/esm/deprecated/LabeledDropdownPillsTypes/LabeledDropdownCascadeMenuPill.js +126 -0
  47. package/esm/deprecated/LabeledDropdownPillsTypes/LabeledDropdownMultiPill.js +145 -0
  48. package/esm/deprecated/LabeledDropdownPillsTypes/LabeledDropdownSinglePill.js +154 -0
  49. package/esm/deprecated/LabeledDropdownPillsTypes/utils.js +16 -0
  50. package/esm/deprecated/LabeledPills.js +53 -0
  51. package/esm/deprecated/OverflowPill.js +62 -0
  52. package/esm/deprecated/Pill.js +76 -0
  53. package/esm/deprecated/PillGroup.js +60 -0
  54. package/esm/deprecated/ReadOnlyPill.js +90 -0
  55. package/esm/deprecated/RemovablePill.js +64 -0
  56. package/esm/deprecated/index.js +8 -0
  57. package/esm/index.d.js +1 -0
  58. package/esm/index.js +11 -0
  59. package/esm/props.js +60 -0
  60. package/esm/utils.js +24 -0
  61. package/package.json +86 -88
  62. package/types/components/Pill.d.ts +5 -0
  63. package/types/components/PillButton.d.ts +5 -0
  64. package/types/components/PillGroup.d.ts +13 -0
  65. package/types/components/index.d.ts +3 -0
  66. package/types/components/styled.d.ts +24 -0
  67. package/types/components/types/DropdownPill.d.ts +3 -0
  68. package/types/components/types/InputPill.d.ts +3 -0
  69. package/types/components/types/LabelPill.d.ts +3 -0
  70. package/types/components/types/ReadOnlyPill.d.ts +3 -0
  71. package/types/components/types/RemovablePill.d.ts +3 -0
  72. package/types/components/types/ValuePill.d.ts +3 -0
  73. package/types/components/types/index.d.ts +6 -0
  74. package/types/deprecated/DropdownPill.d.ts +66 -0
  75. package/types/deprecated/InputPill.d.ts +10 -0
  76. package/types/deprecated/LabeledDropdownPills.d.ts +82 -0
  77. package/types/deprecated/LabeledDropdownPillsTypes/LabeledDropdownCascadeMenuPill.d.ts +15 -0
  78. package/types/deprecated/LabeledDropdownPillsTypes/LabeledDropdownMultiPill.d.ts +13 -0
  79. package/types/deprecated/LabeledDropdownPillsTypes/LabeledDropdownSinglePill.d.ts +28 -0
  80. package/types/deprecated/LabeledDropdownPillsTypes/utils.d.ts +1 -0
  81. package/types/deprecated/LabeledPills.d.ts +52 -0
  82. package/types/deprecated/OverflowPill.d.ts +33 -0
  83. package/types/deprecated/Pill.d.ts +59 -0
  84. package/types/deprecated/PillGroup.d.ts +50 -0
  85. package/types/deprecated/ReadOnlyPill.d.ts +56 -0
  86. package/types/deprecated/RemovablePill.d.ts +49 -0
  87. package/types/deprecated/index.d.ts +9 -0
  88. package/types/index.d.ts +3 -0
  89. package/types/props.d.ts +92 -0
  90. package/types/tests/DSPill.test.d.ts +1 -0
  91. package/types/tests/DSPillGroup.test.d.ts +1 -0
  92. package/types/tests/events/DSPill.events.keyboard.test.d.ts +1 -0
  93. package/types/tests/events/DSPill.events.test.d.ts +1 -0
  94. package/types/tests/events/DSPillGroup.events.keyboard.test.d.ts +1 -0
  95. package/types/tests/events/DSPillGroup.events.test.d.ts +1 -0
  96. package/types/utils.d.ts +4 -0
  97. package/dist/cjs/components/Pill.js +0 -60
  98. package/dist/cjs/components/Pill.js.map +0 -7
  99. package/dist/cjs/components/PillButton.js +0 -58
  100. package/dist/cjs/components/PillButton.js.map +0 -7
  101. package/dist/cjs/components/PillGroup.js +0 -72
  102. package/dist/cjs/components/PillGroup.js.map +0 -7
  103. package/dist/cjs/components/index.js +0 -30
  104. package/dist/cjs/components/index.js.map +0 -7
  105. package/dist/cjs/components/styled.js +0 -235
  106. package/dist/cjs/components/styled.js.map +0 -7
  107. package/dist/cjs/components/types/DropdownPill.js +0 -88
  108. package/dist/cjs/components/types/DropdownPill.js.map +0 -7
  109. package/dist/cjs/components/types/InputPill.js +0 -84
  110. package/dist/cjs/components/types/InputPill.js.map +0 -7
  111. package/dist/cjs/components/types/LabelPill.js +0 -52
  112. package/dist/cjs/components/types/LabelPill.js.map +0 -7
  113. package/dist/cjs/components/types/ReadOnlyPill.js +0 -55
  114. package/dist/cjs/components/types/ReadOnlyPill.js.map +0 -7
  115. package/dist/cjs/components/types/RemovablePill.js +0 -79
  116. package/dist/cjs/components/types/RemovablePill.js.map +0 -7
  117. package/dist/cjs/components/types/ValuePill.js +0 -59
  118. package/dist/cjs/components/types/ValuePill.js.map +0 -7
  119. package/dist/cjs/components/types/index.js +0 -33
  120. package/dist/cjs/components/types/index.js.map +0 -7
  121. package/dist/cjs/deprecated/DropdownPill.js +0 -92
  122. package/dist/cjs/deprecated/DropdownPill.js.map +0 -7
  123. package/dist/cjs/deprecated/InputPill.js +0 -82
  124. package/dist/cjs/deprecated/InputPill.js.map +0 -7
  125. package/dist/cjs/deprecated/LabeledDropdownPills.js +0 -102
  126. package/dist/cjs/deprecated/LabeledDropdownPills.js.map +0 -7
  127. package/dist/cjs/deprecated/LabeledDropdownPillsTypes/LabeledDropdownCascadeMenuPill.js +0 -131
  128. package/dist/cjs/deprecated/LabeledDropdownPillsTypes/LabeledDropdownCascadeMenuPill.js.map +0 -7
  129. package/dist/cjs/deprecated/LabeledDropdownPillsTypes/LabeledDropdownMultiPill.js +0 -145
  130. package/dist/cjs/deprecated/LabeledDropdownPillsTypes/LabeledDropdownMultiPill.js.map +0 -7
  131. package/dist/cjs/deprecated/LabeledDropdownPillsTypes/LabeledDropdownSinglePill.js +0 -154
  132. package/dist/cjs/deprecated/LabeledDropdownPillsTypes/LabeledDropdownSinglePill.js.map +0 -7
  133. package/dist/cjs/deprecated/LabeledDropdownPillsTypes/utils.js +0 -44
  134. package/dist/cjs/deprecated/LabeledDropdownPillsTypes/utils.js.map +0 -7
  135. package/dist/cjs/deprecated/LabeledPills.js +0 -75
  136. package/dist/cjs/deprecated/LabeledPills.js.map +0 -7
  137. package/dist/cjs/deprecated/OverflowPill.js +0 -79
  138. package/dist/cjs/deprecated/OverflowPill.js.map +0 -7
  139. package/dist/cjs/deprecated/Pill.js +0 -73
  140. package/dist/cjs/deprecated/Pill.js.map +0 -7
  141. package/dist/cjs/deprecated/PillGroup.js +0 -72
  142. package/dist/cjs/deprecated/PillGroup.js.map +0 -7
  143. package/dist/cjs/deprecated/ReadOnlyPill.js +0 -100
  144. package/dist/cjs/deprecated/ReadOnlyPill.js.map +0 -7
  145. package/dist/cjs/deprecated/RemovablePill.js +0 -78
  146. package/dist/cjs/deprecated/RemovablePill.js.map +0 -7
  147. package/dist/cjs/deprecated/index.js +0 -43
  148. package/dist/cjs/deprecated/index.js.map +0 -7
  149. package/dist/cjs/index.d.js +0 -27
  150. package/dist/cjs/index.d.js.map +0 -7
  151. package/dist/cjs/index.js +0 -37
  152. package/dist/cjs/index.js.map +0 -7
  153. package/dist/cjs/props.js +0 -95
  154. package/dist/cjs/props.js.map +0 -7
  155. package/dist/cjs/utils.js +0 -46
  156. package/dist/cjs/utils.js.map +0 -7
  157. package/dist/esm/components/Pill.js +0 -31
  158. package/dist/esm/components/Pill.js.map +0 -7
  159. package/dist/esm/components/PillButton.js +0 -29
  160. package/dist/esm/components/PillButton.js.map +0 -7
  161. package/dist/esm/components/PillGroup.js +0 -43
  162. package/dist/esm/components/PillGroup.js.map +0 -7
  163. package/dist/esm/components/index.js +0 -5
  164. package/dist/esm/components/index.js.map +0 -7
  165. package/dist/esm/components/styled.js +0 -206
  166. package/dist/esm/components/styled.js.map +0 -7
  167. package/dist/esm/components/types/DropdownPill.js +0 -59
  168. package/dist/esm/components/types/DropdownPill.js.map +0 -7
  169. package/dist/esm/components/types/InputPill.js +0 -55
  170. package/dist/esm/components/types/InputPill.js.map +0 -7
  171. package/dist/esm/components/types/LabelPill.js +0 -23
  172. package/dist/esm/components/types/LabelPill.js.map +0 -7
  173. package/dist/esm/components/types/ReadOnlyPill.js +0 -26
  174. package/dist/esm/components/types/ReadOnlyPill.js.map +0 -7
  175. package/dist/esm/components/types/RemovablePill.js +0 -50
  176. package/dist/esm/components/types/RemovablePill.js.map +0 -7
  177. package/dist/esm/components/types/ValuePill.js +0 -30
  178. package/dist/esm/components/types/ValuePill.js.map +0 -7
  179. package/dist/esm/components/types/index.js +0 -8
  180. package/dist/esm/components/types/index.js.map +0 -7
  181. package/dist/esm/deprecated/DropdownPill.js +0 -63
  182. package/dist/esm/deprecated/DropdownPill.js.map +0 -7
  183. package/dist/esm/deprecated/InputPill.js +0 -53
  184. package/dist/esm/deprecated/InputPill.js.map +0 -7
  185. package/dist/esm/deprecated/LabeledDropdownPills.js +0 -73
  186. package/dist/esm/deprecated/LabeledDropdownPills.js.map +0 -7
  187. package/dist/esm/deprecated/LabeledDropdownPillsTypes/LabeledDropdownCascadeMenuPill.js +0 -102
  188. package/dist/esm/deprecated/LabeledDropdownPillsTypes/LabeledDropdownCascadeMenuPill.js.map +0 -7
  189. package/dist/esm/deprecated/LabeledDropdownPillsTypes/LabeledDropdownMultiPill.js +0 -116
  190. package/dist/esm/deprecated/LabeledDropdownPillsTypes/LabeledDropdownMultiPill.js.map +0 -7
  191. package/dist/esm/deprecated/LabeledDropdownPillsTypes/LabeledDropdownSinglePill.js +0 -125
  192. package/dist/esm/deprecated/LabeledDropdownPillsTypes/LabeledDropdownSinglePill.js.map +0 -7
  193. package/dist/esm/deprecated/LabeledDropdownPillsTypes/utils.js +0 -15
  194. package/dist/esm/deprecated/LabeledDropdownPillsTypes/utils.js.map +0 -7
  195. package/dist/esm/deprecated/LabeledPills.js +0 -46
  196. package/dist/esm/deprecated/LabeledPills.js.map +0 -7
  197. package/dist/esm/deprecated/OverflowPill.js +0 -50
  198. package/dist/esm/deprecated/OverflowPill.js.map +0 -7
  199. package/dist/esm/deprecated/Pill.js +0 -44
  200. package/dist/esm/deprecated/Pill.js.map +0 -7
  201. package/dist/esm/deprecated/PillGroup.js +0 -43
  202. package/dist/esm/deprecated/PillGroup.js.map +0 -7
  203. package/dist/esm/deprecated/ReadOnlyPill.js +0 -71
  204. package/dist/esm/deprecated/ReadOnlyPill.js.map +0 -7
  205. package/dist/esm/deprecated/RemovablePill.js +0 -49
  206. package/dist/esm/deprecated/RemovablePill.js.map +0 -7
  207. package/dist/esm/deprecated/index.js +0 -14
  208. package/dist/esm/deprecated/index.js.map +0 -7
  209. package/dist/esm/index.d.js +0 -2
  210. package/dist/esm/index.d.js.map +0 -7
  211. package/dist/esm/index.js +0 -8
  212. package/dist/esm/index.js.map +0 -7
  213. package/dist/esm/props.js +0 -66
  214. package/dist/esm/props.js.map +0 -7
  215. package/dist/esm/utils.js +0 -17
  216. package/dist/esm/utils.js.map +0 -7
@@ -0,0 +1,63 @@
1
+ import _jsx from '@babel/runtime/helpers/esm/jsx';
2
+ import React, { useContext, useMemo, useCallback } from 'react';
3
+ import { uid } from 'uid';
4
+ import { CloseXsmall } from '@elliemae/ds-icons';
5
+ import { SimpleTruncatedTooltipText } from '@elliemae/ds-truncated-tooltip-text';
6
+ import { StyledRemovablePillWrapper } from '../styled.js';
7
+ import { DSPillGroupV2Context } from '../PillGroup.js';
8
+ import { DSPillButton } from '../PillButton.js';
9
+
10
+ const RemovablePill = /*#__PURE__*/React.memo(_ref => {
11
+ let {
12
+ label,
13
+ size,
14
+ labelTruncated,
15
+ onRemove,
16
+ innerRef,
17
+ ariaLabel
18
+ } = _ref;
19
+ const {
20
+ onKeyboardRemove
21
+ } = useContext(DSPillGroupV2Context);
22
+ const pillUid = useMemo(() => "ds-pill-".concat(uid()), []);
23
+ const TextComponent = labelTruncated ? _ref2 => {
24
+ let {
25
+ children
26
+ } = _ref2;
27
+ return /*#__PURE__*/_jsx(SimpleTruncatedTooltipText, {
28
+ value: children
29
+ });
30
+ } : React.Fragment;
31
+ const onKeyDown = useCallback(e => {
32
+ if (['Enter', 'Space'].includes(e.code)) {
33
+ e.preventDefault();
34
+ if (onKeyboardRemove) onKeyboardRemove(pillUid);
35
+ onRemove(e);
36
+ }
37
+ }, [onKeyboardRemove, onRemove, pillUid]);
38
+ return /*#__PURE__*/_jsx(StyledRemovablePillWrapper, {
39
+ size: size,
40
+ cols: ['auto', '24px'],
41
+ gutter: "2px",
42
+ alignItems: "center",
43
+ justifyItems: "center",
44
+ className: "ds-pill-wrapper ds-pill-wrapper-removable",
45
+ "data-testid": "ds-pill-wrapper",
46
+ "aria-label": ariaLabel || label
47
+ }, void 0, /*#__PURE__*/_jsx(TextComponent, {}, void 0, label), /*#__PURE__*/_jsx(DSPillButton, {
48
+ className: "ds-pill-focus-point",
49
+ id: pillUid,
50
+ "data-testid": "ds-pill-close-icon",
51
+ innerRef: innerRef,
52
+ onClick: onRemove,
53
+ onKeyDown: onKeyDown,
54
+ "aria-label": "Remove ".concat(label),
55
+ type: "right"
56
+ }, void 0, /*#__PURE__*/_jsx(CloseXsmall, {
57
+ width: 22.65,
58
+ height: 22.65,
59
+ color: ['brand-primary', '700']
60
+ })));
61
+ });
62
+
63
+ export { RemovablePill };
@@ -0,0 +1,45 @@
1
+ import _jsx from '@babel/runtime/helpers/esm/jsx';
2
+ import 'core-js/modules/esnext.async-iterator.filter.js';
3
+ import 'core-js/modules/esnext.iterator.constructor.js';
4
+ import 'core-js/modules/esnext.iterator.filter.js';
5
+ import React from 'react';
6
+ import { DSTooltipV2 } from '@elliemae/ds-tooltip';
7
+ import { SimpleTruncatedTooltipText } from '@elliemae/ds-truncated-tooltip-text';
8
+ import { StyledValuePillWrapper, StyledSpanWithTooltip } from '../styled.js';
9
+
10
+ const ValuePill = /*#__PURE__*/React.memo(_ref => {
11
+ let {
12
+ label,
13
+ size,
14
+ labelTruncated,
15
+ tooltipValue,
16
+ iconLeft,
17
+ ariaLabel
18
+ } = _ref;
19
+ const TextComponent = labelTruncated ? _ref2 => {
20
+ let {
21
+ children
22
+ } = _ref2;
23
+ return /*#__PURE__*/_jsx(SimpleTruncatedTooltipText, {
24
+ value: children
25
+ });
26
+ } : React.Fragment;
27
+ return /*#__PURE__*/_jsx(StyledValuePillWrapper, {
28
+ size: size,
29
+ alignItems: "center",
30
+ className: "ds-pill-wrapper ds-pill-wrapper-value",
31
+ "data-testid": "ds-pill-wrapper",
32
+ "aria-label": ariaLabel || label,
33
+ cols: [iconLeft && 'min-content', 'auto'].filter(notFalse => notFalse),
34
+ gutter: "xxxs",
35
+ hasIcon: iconLeft !== null
36
+ }, void 0, iconLeft, tooltipValue !== '' ? /*#__PURE__*/_jsx(DSTooltipV2, {
37
+ title: tooltipValue,
38
+ triggerComponent: /*#__PURE__*/_jsx(StyledSpanWithTooltip, {
39
+ className: "ds-pill-tooltip-value",
40
+ tabIndex: 0
41
+ }, void 0, label)
42
+ }) : /*#__PURE__*/_jsx(TextComponent, {}, void 0, label));
43
+ });
44
+
45
+ export { ValuePill };
@@ -0,0 +1,6 @@
1
+ export { DropdownPill } from './DropdownPill.js';
2
+ export { InputPill } from './InputPill.js';
3
+ export { LabelPill } from './LabelPill.js';
4
+ export { ReadOnlyPill } from './ReadOnlyPill.js';
5
+ export { RemovablePill } from './RemovablePill.js';
6
+ export { ValuePill } from './ValuePill.js';
@@ -0,0 +1,100 @@
1
+ import _jsx from '@babel/runtime/helpers/esm/jsx';
2
+ import _defineProperty from '@babel/runtime/helpers/esm/defineProperty';
3
+ import _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';
4
+ import 'core-js/modules/web.dom-collections.iterator.js';
5
+ import 'core-js/modules/esnext.async-iterator.filter.js';
6
+ import 'core-js/modules/esnext.iterator.constructor.js';
7
+ import 'core-js/modules/esnext.iterator.filter.js';
8
+ import 'core-js/modules/esnext.async-iterator.for-each.js';
9
+ import 'core-js/modules/esnext.iterator.for-each.js';
10
+ import { useRef, useState } from 'react';
11
+ import { PropTypes, describe } from 'react-desc';
12
+ import DSDropdownMenu from '@elliemae/ds-dropdownmenu';
13
+ import { ChevronDown } from '@elliemae/ds-icons';
14
+ import useFocusGroupItem from '@elliemae/ds-shared/FocusGroup/useFocusGroupItem';
15
+ import { Pill } from './Pill.js';
16
+ import { jsx } from 'react/jsx-runtime';
17
+
18
+ var _ChevronDown;
19
+
20
+ const _excluded = ["containerProps", "label", "variant", "tabIndex", "closeMenuOnItemSelection", "maxWidth", "minWidth"];
21
+
22
+ 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; }
23
+
24
+ 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; }
25
+
26
+ function DropdownPill(_ref) {
27
+ let {
28
+ containerProps = {},
29
+ label = '',
30
+ variant,
31
+ tabIndex = -1,
32
+ closeMenuOnItemSelection = false,
33
+ maxWidth,
34
+ minWidth
35
+ } = _ref,
36
+ dropdownProps = _objectWithoutProperties(_ref, _excluded);
37
+
38
+ const ref = useRef(null);
39
+ const [chevronEl, chevronRef] = useState();
40
+ const {
41
+ focusFirst
42
+ } = useFocusGroupItem(ref);
43
+ return /*#__PURE__*/jsx(DSDropdownMenu, _objectSpread(_objectSpread({}, dropdownProps), {}, {
44
+ closeMenuOnItemSelection: closeMenuOnItemSelection,
45
+ maxWidth: maxWidth,
46
+ hideIfNotVisible: true,
47
+ menuProps: {
48
+ className: 'dropdown-pill-menu',
49
+ zIndex: 100
50
+ },
51
+ minWidth: minWidth,
52
+ onClose: focusFirst,
53
+ referenceNode: chevronEl,
54
+ triggerComponent: /*#__PURE__*/_jsx(Pill, {
55
+ "data-testid": "dropdown-pill",
56
+ className: "dropdown-pill",
57
+ containerProps: _objectSpread({
58
+ role: 'listbox'
59
+ }, containerProps),
60
+ innerRef: ref,
61
+ label: label,
62
+ rightAddon: /*#__PURE__*/jsx("div", {
63
+ ref: chevronRef,
64
+ children: _ChevronDown || (_ChevronDown = /*#__PURE__*/_jsx(ChevronDown, {
65
+ className: "dropdown-pill-chevron-down",
66
+ "data-testid": "dropdown-pill-button"
67
+ }))
68
+ }),
69
+ tabIndex: tabIndex,
70
+ variant: variant
71
+ })
72
+ }));
73
+ }
74
+
75
+ const props = {
76
+ /** props injected to component wrapper */
77
+ containerProps: PropTypes.object.description('props injected to component wrapper'),
78
+
79
+ /** labeled pill text label */
80
+ label: PropTypes.string.isRequired.description('pill text label'),
81
+
82
+ /** pill variant */
83
+ variant: PropTypes.oneOf(['value', 'title']).description('pill variant'),
84
+
85
+ /** html focus border */
86
+ tabIndex: PropTypes.number.description('html focus order'),
87
+
88
+ /** close menu on item selection */
89
+ closeMenuOnItemSelection: PropTypes.bool.description('close menu on item selection'),
90
+
91
+ /** pill max width */
92
+ maxWidth: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).description('pill max width'),
93
+
94
+ /** pill min width */
95
+ minWidth: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).description('pill min width')
96
+ };
97
+ const DSDropdownPillWithSchema = describe(DropdownPill);
98
+ DSDropdownPillWithSchema.propTypes = props;
99
+
100
+ export { DSDropdownPillWithSchema, DropdownPill };
@@ -0,0 +1,74 @@
1
+ import 'core-js/modules/esnext.async-iterator.filter.js';
2
+ import 'core-js/modules/esnext.iterator.constructor.js';
3
+ import 'core-js/modules/esnext.iterator.filter.js';
4
+ import 'core-js/modules/esnext.async-iterator.for-each.js';
5
+ import 'core-js/modules/esnext.iterator.for-each.js';
6
+ import _jsx from '@babel/runtime/helpers/esm/jsx';
7
+ import _defineProperty from '@babel/runtime/helpers/esm/defineProperty';
8
+ import _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';
9
+ import 'react';
10
+ import { CloseXsmall } from '@elliemae/ds-icons';
11
+ import { aggregatedClasses } from '@elliemae/ds-classnames';
12
+ import { DSInput, DSInputMask } from '@elliemae/ds-form';
13
+ import { Pill } from './Pill.js';
14
+ import { jsx } from 'react/jsx-runtime';
15
+
16
+ const _excluded = ["containerProps", "placeholder", "onChange", "onRemove", "value", "type"];
17
+
18
+ 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; }
19
+
20
+ 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; }
21
+ const StyledInputPill = aggregatedClasses(Pill)('input-pill', null, _ref => {
22
+ let {
23
+ value
24
+ } = _ref;
25
+ return {
26
+ value
27
+ };
28
+ });
29
+ function InputPill(_ref2) {
30
+ let {
31
+ containerProps = {},
32
+ placeholder = 'Enter Value',
33
+ onChange = () => {},
34
+ onRemove,
35
+ value,
36
+ type
37
+ } = _ref2,
38
+ otherProps = _objectWithoutProperties(_ref2, _excluded);
39
+
40
+ let TypeOfInput = DSInput; // TODO: implement the DSTimeInput, see how because it returns a moment()
41
+ // TODO: implement the DSDateInput
42
+
43
+ switch (type) {
44
+ case 'inputText':
45
+ TypeOfInput = DSInput;
46
+ break;
47
+
48
+ case 'inputMask':
49
+ TypeOfInput = DSInputMask;
50
+ break;
51
+ }
52
+
53
+ return /*#__PURE__*/_jsx(StyledInputPill, {
54
+ className: "input-pill",
55
+ classProps: {
56
+ value
57
+ },
58
+ containerProps: containerProps,
59
+ label: /*#__PURE__*/jsx(TypeOfInput, _objectSpread({
60
+ "data-testid": "input-pill",
61
+ onChange: onChange,
62
+ placeholder: placeholder,
63
+ value: value
64
+ }, otherProps)),
65
+ rightAddon: value && /*#__PURE__*/_jsx(CloseXsmall, {
66
+ className: "remove-pill-button",
67
+ "data-testid": "remove-pill-button",
68
+ onClick: onRemove
69
+ }),
70
+ tabIndex: -1
71
+ });
72
+ }
73
+
74
+ export { InputPill };
@@ -0,0 +1,95 @@
1
+ import 'core-js/modules/esnext.async-iterator.filter.js';
2
+ import 'core-js/modules/esnext.iterator.constructor.js';
3
+ import 'core-js/modules/esnext.iterator.filter.js';
4
+ import 'core-js/modules/esnext.async-iterator.for-each.js';
5
+ import 'core-js/modules/esnext.iterator.for-each.js';
6
+ import _jsx from '@babel/runtime/helpers/esm/jsx';
7
+ import _defineProperty from '@babel/runtime/helpers/esm/defineProperty';
8
+ import _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';
9
+ import 'react';
10
+ import { PropTypes, describe } from 'react-desc';
11
+ import { PillGroup } from './PillGroup.js';
12
+ import LabeledDropdownSinglePill from './LabeledDropdownPillsTypes/LabeledDropdownSinglePill.js';
13
+ import LabeledDropdownMultiPills from './LabeledDropdownPillsTypes/LabeledDropdownMultiPill.js';
14
+ import LabeledDropdownCascadeMenuPill from './LabeledDropdownPillsTypes/LabeledDropdownCascadeMenuPill.js';
15
+ import { jsx } from 'react/jsx-runtime';
16
+
17
+ const _excluded = ["label", "value", "type", "onFocusNextGroup", "onFocusPreviousGroup", "onFocusGroupSet", "maxWidth", "minWidth", "fixed"];
18
+
19
+ 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; }
20
+
21
+ 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; }
22
+ const DropdownPills = {
23
+ single: LabeledDropdownSinglePill,
24
+ multi: LabeledDropdownMultiPills,
25
+ cascaded: LabeledDropdownCascadeMenuPill
26
+ };
27
+
28
+ const createDropdownPill = type => DropdownPills[type] || DropdownPills.single;
29
+
30
+ function LabeledDropdownPills(_ref) {
31
+ let {
32
+ label = '',
33
+ value,
34
+ type,
35
+ onFocusNextGroup,
36
+ onFocusPreviousGroup,
37
+ onFocusGroupSet,
38
+ maxWidth,
39
+ minWidth,
40
+ fixed
41
+ } = _ref,
42
+ menuProps = _objectWithoutProperties(_ref, _excluded);
43
+
44
+ const Component = createDropdownPill(type);
45
+ return /*#__PURE__*/_jsx(PillGroup, {
46
+ onFocusGroupSet: onFocusGroupSet,
47
+ onFocusNextGroup: onFocusNextGroup,
48
+ onFocusPreviousGroup: onFocusPreviousGroup
49
+ }, void 0, /*#__PURE__*/jsx(Component, _objectSpread(_objectSpread({}, menuProps), {}, {
50
+ label: label,
51
+ maxWidth: maxWidth,
52
+ minWidth: minWidth,
53
+ value: value,
54
+ fixed: fixed
55
+ })));
56
+ }
57
+
58
+ const props = {
59
+ /** pill type */
60
+ type: PropTypes.oneOf(['single', 'multi', 'cascaded']).description('pill type'),
61
+
62
+ /** focus next group callback */
63
+ onFocusNextGroup: PropTypes.func.description('focus next group callback'),
64
+
65
+ /** focus prev group callback */
66
+ onFocusPreviousGroup: PropTypes.func.description('focus prev group callback'),
67
+
68
+ /** focus group set callback */
69
+ onFocusGroupSet: PropTypes.func.description('focus group set callback'),
70
+
71
+ /** pill max width */
72
+ maxWidth: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).description('pill max width'),
73
+
74
+ /** pill min width */
75
+ minWidth: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).description('pill min width'),
76
+
77
+ /** fixed pill */
78
+ fixed: PropTypes.bool.description('fixed pill'),
79
+
80
+ /** pill label text */
81
+ label: PropTypes.string.isRequired.description('pill label text'),
82
+
83
+ /** pill value */
84
+ value: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.shape({
85
+ id: PropTypes.string,
86
+ label: PropTypes.string
87
+ })), PropTypes.shape({
88
+ id: PropTypes.string,
89
+ label: PropTypes.string
90
+ })]).description('pill value')
91
+ };
92
+ const DSLabeledDropdownPillsWithSchema = describe(LabeledDropdownPills);
93
+ DSLabeledDropdownPillsWithSchema.propTypes = props;
94
+
95
+ export { DSLabeledDropdownPillsWithSchema, LabeledDropdownPills };
@@ -0,0 +1,126 @@
1
+ import 'core-js/modules/esnext.async-iterator.for-each.js';
2
+ import 'core-js/modules/esnext.iterator.for-each.js';
3
+ import _jsx from '@babel/runtime/helpers/esm/jsx';
4
+ import _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';
5
+ import _defineProperty from '@babel/runtime/helpers/esm/defineProperty';
6
+ import 'core-js/modules/esnext.async-iterator.map.js';
7
+ import 'core-js/modules/esnext.iterator.map.js';
8
+ import 'core-js/modules/web.dom-collections.iterator.js';
9
+ import 'core-js/modules/esnext.async-iterator.filter.js';
10
+ import 'core-js/modules/esnext.iterator.constructor.js';
11
+ import 'core-js/modules/esnext.iterator.filter.js';
12
+ import { createElement } from 'react';
13
+ import { isFunction, addOrRemove } from '@elliemae/ds-utilities';
14
+ import { PillGroup } from '../PillGroup.js';
15
+ import { RemovablePill } from '../RemovablePill.js';
16
+ import { DropdownPill } from '../DropdownPill.js';
17
+ import { jsx } from 'react/jsx-runtime';
18
+
19
+ const _excluded = ["label", "options", "value", "onChange", "onRemove", "value", "placeholder", "onFocusNextGroup", "onFocusPreviousGroup", "onFocusGroupSet", "maxWidth", "minWidth"];
20
+
21
+ 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; }
22
+
23
+ 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; }
24
+
25
+ function renderMenuItems(options, factory) {
26
+ return options.map((option, index) => {
27
+ const ItemComponent = factory('radio');
28
+
29
+ if (option.type === 'submenu') {
30
+ const SubmenuComponent = factory('submenu');
31
+ const ChildComponent = factory('selection-group');
32
+ return /*#__PURE__*/createElement(SubmenuComponent, _objectSpread(_objectSpread({}, option), {}, {
33
+ key: option.id,
34
+ item: option
35
+ }), /*#__PURE__*/jsx(ChildComponent, _objectSpread(_objectSpread({}, option), {}, {
36
+ id: option.id,
37
+ item: option,
38
+ items: option.items,
39
+ itemValueAccessor: item => item,
40
+ multi: true
41
+ })));
42
+ }
43
+
44
+ return /*#__PURE__*/createElement(ItemComponent, _objectSpread(_objectSpread({}, option), {}, {
45
+ key: option.id || index,
46
+ item: option
47
+ }));
48
+ });
49
+ }
50
+
51
+ const getSubmenuOptionLabelById = (options, id) => {
52
+ const index = options.findIndex(option => option.id === id);
53
+ return index ? options[index].label : '';
54
+ };
55
+
56
+ function LabeledDropdownCascadeMenuPill(_ref) {
57
+ let {
58
+ label,
59
+ options,
60
+ value: optionValue,
61
+ onChange,
62
+ onRemove,
63
+ value: selection = {},
64
+ placeholder = '---',
65
+ onFocusNextGroup,
66
+ onFocusPreviousGroup,
67
+ onFocusGroupSet,
68
+ maxWidth,
69
+ minWidth
70
+ } = _ref,
71
+ menuProps = _objectWithoutProperties(_ref, _excluded);
72
+
73
+ const selectionId = Object.keys(selection)[0];
74
+ const selectionValues = selection[selectionId] || '';
75
+ const dropdownLabel = Array.isArray(selectionValues) ? getSubmenuOptionLabelById(options, selectionId) : selectionValues;
76
+
77
+ const handleSelectChange = _ref2 => {
78
+ let {
79
+ item,
80
+ group
81
+ } = _ref2;
82
+
83
+ if (isFunction(onChange)) {
84
+ const nextSelection = group ? {
85
+ [group.id]: addOrRemove([...(selection[group.id] || [])], item, o => o.id)
86
+ } : {
87
+ [item.id]: item.label
88
+ };
89
+ onChange(nextSelection);
90
+ }
91
+ };
92
+
93
+ const removeOption = option => {
94
+ if (isFunction(onChange)) {
95
+ const nextSelection = {
96
+ [selectionId]: selectionValues.filter(val => option.id !== val.id)
97
+ };
98
+ onChange(nextSelection);
99
+ }
100
+
101
+ onRemove(option);
102
+ };
103
+
104
+ return /*#__PURE__*/_jsx(PillGroup, {
105
+ onFocusGroupSet: onFocusGroupSet,
106
+ onFocusNextGroup: onFocusNextGroup,
107
+ onFocusPreviousGroup: onFocusPreviousGroup
108
+ }, void 0, /*#__PURE__*/jsx(DropdownPill, _objectSpread(_objectSpread({}, menuProps), {}, {
109
+ itemsRenderer: renderMenuItems,
110
+ label: dropdownLabel || placeholder,
111
+ maxWidth: maxWidth,
112
+ minWidth: minWidth,
113
+ onSelectChange: handleSelectChange,
114
+ options: options,
115
+ selection: {
116
+ [selectionId]: Array.isArray(selectionValues) ? selectionValues.map(v => v.id) : selectionValues
117
+ },
118
+ singleGroupSelection: true,
119
+ variant: "title"
120
+ })), Array.isArray(selectionValues) && selectionValues.map(option => /*#__PURE__*/_jsx(RemovablePill, {
121
+ label: option.label,
122
+ onRemove: () => removeOption(option)
123
+ }, option.id)));
124
+ }
125
+
126
+ export { LabeledDropdownCascadeMenuPill as default };
@@ -0,0 +1,145 @@
1
+ import _jsx from '@babel/runtime/helpers/esm/jsx';
2
+ import _defineProperty from '@babel/runtime/helpers/esm/defineProperty';
3
+ import _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';
4
+ import 'core-js/modules/web.dom-collections.iterator.js';
5
+ import 'core-js/modules/esnext.async-iterator.filter.js';
6
+ import 'core-js/modules/esnext.iterator.constructor.js';
7
+ import 'core-js/modules/esnext.iterator.filter.js';
8
+ import 'core-js/modules/esnext.async-iterator.map.js';
9
+ import 'core-js/modules/esnext.iterator.map.js';
10
+ import 'core-js/modules/esnext.async-iterator.for-each.js';
11
+ import 'core-js/modules/esnext.iterator.for-each.js';
12
+ import { useState, useEffect, useCallback } from 'react';
13
+ import { find } from 'lodash';
14
+ import { isFunction, addOrRemove } from '@elliemae/ds-utilities';
15
+ import { RemovablePill } from '../RemovablePill.js';
16
+ import { Pill } from '../Pill.js';
17
+ import { OverflowPill } from '../OverflowPill.js';
18
+ import { DropdownPill } from '../DropdownPill.js';
19
+ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
20
+
21
+ const _excluded = ["label", "options", "value", "onSelect", "onRemove", "onChange", "maxWidth", "minWidth"];
22
+
23
+ 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; }
24
+
25
+ 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; }
26
+ function LabeledDropdownMultiPills(_ref) {
27
+ let {
28
+ label,
29
+ options = [],
30
+ value = [],
31
+ onSelect = () => null,
32
+ onRemove = () => null,
33
+ onChange,
34
+ // if this is defined, then it's calculating the next result onSelect or onRemove
35
+ maxWidth,
36
+ minWidth
37
+ } = _ref,
38
+ menuProps = _objectWithoutProperties(_ref, _excluded);
39
+
40
+ const [totalDefaultOptions, setTotalDefaultOptions] = useState(0);
41
+ const [selectedOptions, setSelectedOptions] = useState(value);
42
+ const [allOptions, setAllOptions] = useState(options);
43
+ const [overflowOptions, setOverflowOptions] = useState([]);
44
+ const overflowQuantity = 3;
45
+ useEffect(() => setSelectedOptions(value), [value]);
46
+ useEffect(() => {
47
+ const newOptions = allOptions.filter(option => option.fixedItem);
48
+
49
+ if (newOptions.length > 0) {
50
+ setSelectedOptions(newOptions);
51
+ }
52
+
53
+ setTotalDefaultOptions(newOptions.length);
54
+ }, []);
55
+ useEffect(() => {
56
+ if (totalDefaultOptions) {
57
+ const newOptions = allOptions.map(opt => {
58
+ if (selectedOptions.length <= totalDefaultOptions && find(selectedOptions, {
59
+ id: opt.id
60
+ })) {
61
+ return _objectSpread(_objectSpread({}, opt), {}, {
62
+ fixedItem: true
63
+ });
64
+ }
65
+
66
+ return _objectSpread(_objectSpread({}, opt), {}, {
67
+ fixedItem: false
68
+ });
69
+ });
70
+ setAllOptions(newOptions);
71
+ }
72
+ }, [onSelect, onRemove, selectedOptions]);
73
+ useEffect(() => {
74
+ if (selectedOptions.length > overflowQuantity) {
75
+ const overflow = selectedOptions.filter((val, index) => index >= overflowQuantity);
76
+ setOverflowOptions(overflow);
77
+ }
78
+ }, [selectedOptions]);
79
+ const selectOption = useCallback(option => {
80
+ if (!option.fixedItem) {
81
+ if (isFunction(onChange)) {
82
+ const nextValue = addOrRemove(selectedOptions, option, item => item.id);
83
+ setSelectedOptions(nextValue);
84
+ onChange(nextValue);
85
+ }
86
+
87
+ onSelect(option);
88
+ }
89
+ }, [selectedOptions]);
90
+ const removeOption = useCallback(option => {
91
+ if (!option.fixedItem || selectedOptions.length > totalDefaultOptions) {
92
+ if (isFunction(onChange)) {
93
+ const nextValue = selectedOptions.filter(val => option.id !== val.id);
94
+ setSelectedOptions(nextValue);
95
+ onChange(nextValue);
96
+ }
97
+
98
+ onRemove(option);
99
+ }
100
+ }, [selectedOptions]);
101
+
102
+ const typeOfPill = () => {
103
+ if (selectedOptions.length > totalDefaultOptions) {
104
+ return RemovablePill;
105
+ }
106
+
107
+ return Pill;
108
+ };
109
+
110
+ return /*#__PURE__*/jsxs(Fragment, {
111
+ children: [/*#__PURE__*/jsx(DropdownPill, _objectSpread(_objectSpread({}, menuProps), {}, {
112
+ focusOnOpen: false,
113
+ label: label,
114
+ maxWidth: maxWidth,
115
+ minWidth: minWidth,
116
+ onSelectMenuItem: selectOption,
117
+ options: [_objectSpread(_objectSpread({}, menuProps), {}, {
118
+ type: 'SelectionGroup',
119
+ id: 'multi-selection-views',
120
+ multi: true,
121
+ items: allOptions
122
+ })],
123
+ selection: {
124
+ 'multi-selection-views': selectedOptions ? selectedOptions.map(o => o.id) : ''
125
+ },
126
+ variant: "title"
127
+ })), selectedOptions && selectedOptions.map((option, index) => {
128
+ const TypeOfPill = typeOfPill();
129
+
130
+ if (index < overflowQuantity) {
131
+ return /*#__PURE__*/_jsx(TypeOfPill, {
132
+ label: option.label,
133
+ onRemove: () => removeOption(option)
134
+ }, option.id);
135
+ }
136
+
137
+ return null;
138
+ }), selectedOptions && selectedOptions.length > overflowQuantity && /*#__PURE__*/_jsx(OverflowPill, {
139
+ label: "+ ".concat(selectedOptions.length - overflowQuantity),
140
+ options: overflowOptions
141
+ })]
142
+ });
143
+ }
144
+
145
+ export { LabeledDropdownMultiPills as default };