@artsy/palette 18.12.2 → 18.13.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.
- package/CHANGELOG.md +18 -0
- package/dist/elements/FilterSelect/Components/FilterInput.d.ts +4 -0
- package/dist/elements/FilterSelect/Components/FilterInput.js +73 -0
- package/dist/elements/FilterSelect/Components/FilterInput.js.map +1 -0
- package/dist/elements/FilterSelect/Components/FilterSelectContext.d.ts +29 -0
- package/dist/elements/FilterSelect/Components/FilterSelectContext.js +157 -0
- package/dist/elements/FilterSelect/Components/FilterSelectContext.js.map +1 -0
- package/dist/elements/FilterSelect/Components/FilterSelectResultItem.d.ts +3 -0
- package/dist/elements/FilterSelect/Components/FilterSelectResultItem.js +38 -0
- package/dist/elements/FilterSelect/Components/FilterSelectResultItem.js.map +1 -0
- package/dist/elements/FilterSelect/FilterSelect.d.ts +5 -0
- package/dist/elements/FilterSelect/FilterSelect.js +123 -0
- package/dist/elements/FilterSelect/FilterSelect.js.map +1 -0
- package/dist/elements/FilterSelect/FilterSelect.story.d.ts +6 -0
- package/dist/elements/FilterSelect/FilterSelect.story.js +70 -0
- package/dist/elements/FilterSelect/FilterSelect.story.js.map +1 -0
- package/dist/elements/FilterSelect/index.d.ts +1 -0
- package/dist/elements/FilterSelect/index.js +19 -0
- package/dist/elements/FilterSelect/index.js.map +1 -0
- package/dist/elements/ShowMore/ShowMore.d.ts +8 -0
- package/dist/elements/ShowMore/ShowMore.js +65 -0
- package/dist/elements/ShowMore/ShowMore.js.map +1 -0
- package/dist/elements/ShowMore/ShowMore.story.d.ts +6 -0
- package/dist/elements/ShowMore/ShowMore.story.js +45 -0
- package/dist/elements/ShowMore/ShowMore.story.js.map +1 -0
- package/dist/elements/ShowMore/index.d.ts +1 -0
- package/dist/elements/ShowMore/index.js +19 -0
- package/dist/elements/ShowMore/index.js.map +1 -0
- package/package.json +6 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,21 @@
|
|
|
1
|
+
# v18.13.0 (Tue Jan 18 2022)
|
|
2
|
+
|
|
3
|
+
#### 🚀 Enhancement
|
|
4
|
+
|
|
5
|
+
- feat(FilterSelect): Adds new <FilterSelect> component [#1099](https://github.com/artsy/palette/pull/1099) ([@damassi](https://github.com/damassi))
|
|
6
|
+
- toolchain(linting): Add rule-of-hooks [#1093](https://github.com/artsy/palette/pull/1093) ([@damassi](https://github.com/damassi))
|
|
7
|
+
|
|
8
|
+
#### 🐛 Bug Fix
|
|
9
|
+
|
|
10
|
+
- feat(FilterSelect): add new component ([@damassi](https://github.com/damassi))
|
|
11
|
+
- toolchain(linting): Add rule-of-hooks ([@damassi](https://github.com/damassi))
|
|
12
|
+
|
|
13
|
+
#### Authors: 1
|
|
14
|
+
|
|
15
|
+
- Christopher Pappas ([@damassi](https://github.com/damassi))
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
1
19
|
# v18.12.2 (Thu Jan 06 2022)
|
|
2
20
|
|
|
3
21
|
#### 🐛 Bug Fix
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.FilterInput = void 0;
|
|
9
|
+
|
|
10
|
+
var React = _interopRequireWildcard(require("react"));
|
|
11
|
+
|
|
12
|
+
var _CloseCircleIcon = require("../../../svgs/CloseCircleIcon");
|
|
13
|
+
|
|
14
|
+
var _MagnifyingGlassIcon = require("../../../svgs/MagnifyingGlassIcon");
|
|
15
|
+
|
|
16
|
+
var _LabeledInput = require("../../LabeledInput");
|
|
17
|
+
|
|
18
|
+
var _Clickable = require("../../Clickable");
|
|
19
|
+
|
|
20
|
+
var _FilterSelectContext = require("./FilterSelectContext");
|
|
21
|
+
|
|
22
|
+
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
|
|
23
|
+
|
|
24
|
+
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (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
|
+
|
|
26
|
+
function _extends() { _extends = Object.assign || 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); }
|
|
27
|
+
|
|
28
|
+
var FilterInput = function FilterInput(props) {
|
|
29
|
+
var _useFilterSelectConte = (0, _FilterSelectContext.useFilterSelectContext)(),
|
|
30
|
+
query = _useFilterSelectConte.query,
|
|
31
|
+
setQuery = _useFilterSelectConte.setQuery,
|
|
32
|
+
placeholder = _useFilterSelectConte.placeholder;
|
|
33
|
+
|
|
34
|
+
var ref = (0, React.useRef)(null);
|
|
35
|
+
|
|
36
|
+
var handleChange = function handleChange(event) {
|
|
37
|
+
setQuery(event.target.value);
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
var handleClick = function handleClick() {
|
|
41
|
+
var _ref$current;
|
|
42
|
+
|
|
43
|
+
setQuery("");
|
|
44
|
+
(_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.focus();
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
return /*#__PURE__*/React.createElement(_LabeledInput.LabeledInput, _extends({
|
|
48
|
+
ref: ref,
|
|
49
|
+
role: "search",
|
|
50
|
+
label: query !== "" ?
|
|
51
|
+
/*#__PURE__*/
|
|
52
|
+
// Active state
|
|
53
|
+
React.createElement(_Clickable.Clickable, {
|
|
54
|
+
display: "flex",
|
|
55
|
+
onClick: handleClick,
|
|
56
|
+
"aria-label": "Clear search input"
|
|
57
|
+
}, /*#__PURE__*/React.createElement(_CloseCircleIcon.CloseCircleIcon, null)) :
|
|
58
|
+
/*#__PURE__*/
|
|
59
|
+
// Resting state
|
|
60
|
+
React.createElement(_MagnifyingGlassIcon.MagnifyingGlassIcon, {
|
|
61
|
+
style: {
|
|
62
|
+
pointerEvents: "none"
|
|
63
|
+
}
|
|
64
|
+
}),
|
|
65
|
+
onChange: handleChange,
|
|
66
|
+
value: query,
|
|
67
|
+
placeholder: placeholder
|
|
68
|
+
}, props));
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
exports.FilterInput = FilterInput;
|
|
72
|
+
FilterInput.displayName = "FilterInput";
|
|
73
|
+
//# sourceMappingURL=FilterInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/elements/FilterSelect/Components/FilterInput.tsx"],"names":["FilterInput","props","query","setQuery","placeholder","ref","handleChange","event","target","value","handleClick","current","focus","pointerEvents"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AAEA;;AACA;;AAEA;;;;;;;;AAIO,IAAMA,WAAiC,GAAG,SAApCA,WAAoC,CAACC,KAAD,EAAW;AAAA,8BACjB,kDADiB;AAAA,MAClDC,KADkD,yBAClDA,KADkD;AAAA,MAC3CC,QAD2C,yBAC3CA,QAD2C;AAAA,MACjCC,WADiC,yBACjCA,WADiC;;AAE1D,MAAMC,GAAG,GAAG,kBAAgC,IAAhC,CAAZ;;AAEA,MAAMC,YAAY,GAAG,SAAfA,YAAe,CAACC,KAAD,EAAgD;AACnEJ,IAAAA,QAAQ,CAACI,KAAK,CAACC,MAAN,CAAaC,KAAd,CAAR;AACD,GAFD;;AAIA,MAAMC,WAAW,GAAG,SAAdA,WAAc,GAAM;AAAA;;AACxBP,IAAAA,QAAQ,CAAC,EAAD,CAAR;AACA,oBAAAE,GAAG,CAACM,OAAJ,8DAAaC,KAAb;AACD,GAHD;;AAKA,sBACE,oBAAC,0BAAD;AACE,IAAA,GAAG,EAAEP,GADP;AAEE,IAAA,IAAI,EAAC,QAFP;AAGE,IAAA,KAAK,EACHH,KAAK,KAAK,EAAV;AAAA;AACE;AACA,wBAAC,oBAAD;AACE,MAAA,OAAO,EAAC,MADV;AAEE,MAAA,OAAO,EAAEQ,WAFX;AAGE,oBAAW;AAHb,oBAKE,oBAAC,gCAAD,OALF,CAFF;AAAA;AAUE;AACA,wBAAC,wCAAD;AAAqB,MAAA,KAAK,EAAE;AAAEG,QAAAA,aAAa,EAAE;AAAjB;AAA5B,MAfN;AAkBE,IAAA,QAAQ,EAAEP,YAlBZ;AAmBE,IAAA,KAAK,EAAEJ,KAnBT;AAoBE,IAAA,WAAW,EAAEE;AApBf,KAqBMH,KArBN,EADF;AAyBD,CAtCM;;;AAAMD,W","sourcesContent":["import * as React from \"react\"\nimport { CloseCircleIcon } from \"../../../svgs/CloseCircleIcon\"\nimport { MagnifyingGlassIcon } from \"../../../svgs/MagnifyingGlassIcon\"\nimport { InputProps } from \"../../Input\"\nimport { LabeledInput } from \"../../LabeledInput\"\nimport { Clickable } from \"../../Clickable\"\nimport { useRef } from \"react\"\nimport { useFilterSelectContext } from \"./FilterSelectContext\"\n\nexport type FilterInputProps = InputProps\n\nexport const FilterInput: React.FC<InputProps> = (props) => {\n const { query, setQuery, placeholder } = useFilterSelectContext()\n const ref = useRef<HTMLInputElement | null>(null)\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n setQuery(event.target.value)\n }\n\n const handleClick = () => {\n setQuery(\"\")\n ref.current?.focus()\n }\n\n return (\n <LabeledInput\n ref={ref}\n role=\"search\"\n label={\n query !== \"\" ? (\n // Active state\n <Clickable\n display=\"flex\"\n onClick={handleClick}\n aria-label=\"Clear search input\"\n >\n <CloseCircleIcon />\n </Clickable>\n ) : (\n // Resting state\n <MagnifyingGlassIcon style={{ pointerEvents: \"none\" }} />\n )\n }\n onChange={handleChange}\n value={query}\n placeholder={placeholder}\n {...props}\n />\n )\n}\n"],"file":"FilterInput.js"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export interface Item {
|
|
3
|
+
label: string;
|
|
4
|
+
value: string;
|
|
5
|
+
[key: string]: string | number | boolean;
|
|
6
|
+
}
|
|
7
|
+
interface FilterSelectContextProps {
|
|
8
|
+
items: Item[];
|
|
9
|
+
filteredItems: Item[];
|
|
10
|
+
initialItemsToShow: number;
|
|
11
|
+
isFiltered: boolean;
|
|
12
|
+
onChange: (state: {
|
|
13
|
+
items: FilterSelectContextProps["items"];
|
|
14
|
+
filteredItems: FilterSelectContextProps["filteredItems"];
|
|
15
|
+
selectedItems: FilterSelectContextProps["selectedItems"];
|
|
16
|
+
query: FilterSelectContextProps["query"];
|
|
17
|
+
}) => void;
|
|
18
|
+
order: [string[], Array<"asc" | "desc">];
|
|
19
|
+
placeholder: string;
|
|
20
|
+
query: string;
|
|
21
|
+
renderItemLabel?: (item: any) => string;
|
|
22
|
+
selectedItems: Item[];
|
|
23
|
+
setSelectedItems: (item: Item) => void;
|
|
24
|
+
setQuery: (query: string) => void;
|
|
25
|
+
}
|
|
26
|
+
export declare type FilterSelectState = Pick<FilterSelectContextProps, "filteredItems" | "initialItemsToShow" | "items" | "isFiltered" | "onChange" | "order" | "placeholder" | "renderItemLabel" | "query" | "selectedItems">;
|
|
27
|
+
export declare const FilterSelectContextProvider: React.FC<Partial<FilterSelectState>>;
|
|
28
|
+
export declare const useFilterSelectContext: () => FilterSelectContextProps;
|
|
29
|
+
export {};
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.useFilterSelectContext = exports.FilterSelectContextProvider = void 0;
|
|
9
|
+
|
|
10
|
+
var _lodash = _interopRequireDefault(require("lodash.reject"));
|
|
11
|
+
|
|
12
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
13
|
+
|
|
14
|
+
var _ShowMore = require("../../ShowMore");
|
|
15
|
+
|
|
16
|
+
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
|
|
17
|
+
|
|
18
|
+
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (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; }
|
|
19
|
+
|
|
20
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
21
|
+
|
|
22
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
23
|
+
|
|
24
|
+
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."); }
|
|
25
|
+
|
|
26
|
+
function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
27
|
+
|
|
28
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
29
|
+
|
|
30
|
+
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; }
|
|
31
|
+
|
|
32
|
+
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; }
|
|
33
|
+
|
|
34
|
+
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
35
|
+
|
|
36
|
+
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."); }
|
|
37
|
+
|
|
38
|
+
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); }
|
|
39
|
+
|
|
40
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }
|
|
41
|
+
|
|
42
|
+
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
43
|
+
|
|
44
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
45
|
+
|
|
46
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
|
47
|
+
|
|
48
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
49
|
+
|
|
50
|
+
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; }
|
|
51
|
+
|
|
52
|
+
var filterSelectReducer = function filterSelectReducer(state, action) {
|
|
53
|
+
switch (action.type) {
|
|
54
|
+
case "SET_QUERY":
|
|
55
|
+
{
|
|
56
|
+
var _query = action.payload.query;
|
|
57
|
+
|
|
58
|
+
if (_query === "") {
|
|
59
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
60
|
+
query: _query,
|
|
61
|
+
isFiltered: false,
|
|
62
|
+
filteredItems: []
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
var filteredItems = state.items.filter(function (_ref) {
|
|
67
|
+
var name = _ref.label;
|
|
68
|
+
return name.toLowerCase().includes(_query.toLowerCase());
|
|
69
|
+
});
|
|
70
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
71
|
+
query: _query,
|
|
72
|
+
isFiltered: true,
|
|
73
|
+
filteredItems: filteredItems
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
case "SET_SELECTED_ITEMS":
|
|
78
|
+
{
|
|
79
|
+
var isFound = !!state.selectedItems.find(function (item) {
|
|
80
|
+
return item.value === action.payload.item.value;
|
|
81
|
+
});
|
|
82
|
+
var selectedItems = isFound ? (0, _lodash.default)(state.selectedItems, {
|
|
83
|
+
value: action.payload.item.value
|
|
84
|
+
}) : [].concat(_toConsumableArray(state.selectedItems), [action.payload.item]);
|
|
85
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
86
|
+
selectedItems: selectedItems
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
var initialState = {
|
|
93
|
+
filteredItems: [],
|
|
94
|
+
initialItemsToShow: _ShowMore.INITIAL_ITEMS_TO_SHOW,
|
|
95
|
+
isFiltered: false,
|
|
96
|
+
items: [],
|
|
97
|
+
onChange: function onChange(x) {
|
|
98
|
+
return x;
|
|
99
|
+
},
|
|
100
|
+
order: [["label"], ["asc"]],
|
|
101
|
+
placeholder: "",
|
|
102
|
+
query: "",
|
|
103
|
+
renderItemLabel: undefined,
|
|
104
|
+
selectedItems: []
|
|
105
|
+
};
|
|
106
|
+
var FilterSelectContext = /*#__PURE__*/(0, _react.createContext)({});
|
|
107
|
+
|
|
108
|
+
var FilterSelectContextProvider = function FilterSelectContextProvider(_ref2) {
|
|
109
|
+
var children = _ref2.children,
|
|
110
|
+
props = _objectWithoutProperties(_ref2, ["children"]);
|
|
111
|
+
|
|
112
|
+
var _useReducer = (0, _react.useReducer)(filterSelectReducer, _objectSpread(_objectSpread({}, initialState), props)),
|
|
113
|
+
_useReducer2 = _slicedToArray(_useReducer, 2),
|
|
114
|
+
state = _useReducer2[0],
|
|
115
|
+
dispatch = _useReducer2[1];
|
|
116
|
+
|
|
117
|
+
var contextValue = _objectSpread(_objectSpread({}, state), {}, {
|
|
118
|
+
setSelectedItems: function setSelectedItems(item) {
|
|
119
|
+
dispatch({
|
|
120
|
+
type: "SET_SELECTED_ITEMS",
|
|
121
|
+
payload: {
|
|
122
|
+
item: item
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
},
|
|
126
|
+
setQuery: function setQuery(query) {
|
|
127
|
+
dispatch({
|
|
128
|
+
type: "SET_QUERY",
|
|
129
|
+
payload: {
|
|
130
|
+
query: query
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
(0, _react.useLayoutEffect)(function () {
|
|
137
|
+
var _props$query;
|
|
138
|
+
|
|
139
|
+
if ((_props$query = props.query) !== null && _props$query !== void 0 && _props$query.length) {
|
|
140
|
+
contextValue.setQuery(props.query);
|
|
141
|
+
} // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
142
|
+
|
|
143
|
+
}, []);
|
|
144
|
+
return /*#__PURE__*/_react.default.createElement(FilterSelectContext.Provider, {
|
|
145
|
+
value: contextValue
|
|
146
|
+
}, children);
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
exports.FilterSelectContextProvider = FilterSelectContextProvider;
|
|
150
|
+
FilterSelectContextProvider.displayName = "FilterSelectContextProvider";
|
|
151
|
+
|
|
152
|
+
var useFilterSelectContext = function useFilterSelectContext() {
|
|
153
|
+
return (0, _react.useContext)(FilterSelectContext);
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
exports.useFilterSelectContext = useFilterSelectContext;
|
|
157
|
+
//# sourceMappingURL=FilterSelectContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/elements/FilterSelect/Components/FilterSelectContext.tsx"],"names":["filterSelectReducer","state","action","type","query","payload","isFiltered","filteredItems","items","filter","name","label","toLowerCase","includes","isFound","selectedItems","find","item","value","initialState","initialItemsToShow","INITIAL_ITEMS_TO_SHOW","onChange","x","order","placeholder","renderItemLabel","undefined","FilterSelectContext","FilterSelectContextProvider","children","props","dispatch","contextValue","setSelectedItems","setQuery","length","useFilterSelectContext"],"mappings":"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","sourcesContent":["import reject from \"lodash.reject\"\nimport React, {\n createContext,\n useContext,\n useLayoutEffect,\n useReducer,\n} from \"react\"\nimport { INITIAL_ITEMS_TO_SHOW } from \"../../ShowMore\"\n\nexport interface Item {\n label: string\n value: string\n [key: string]: string | number | boolean\n}\n\ninterface FilterSelectContextProps {\n items: Item[]\n filteredItems: Item[]\n initialItemsToShow: number\n isFiltered: boolean\n onChange: (state: {\n items: FilterSelectContextProps[\"items\"]\n filteredItems: FilterSelectContextProps[\"filteredItems\"]\n selectedItems: FilterSelectContextProps[\"selectedItems\"]\n query: FilterSelectContextProps[\"query\"]\n }) => void\n order: [string[], Array<\"asc\" | \"desc\">] // See: https://lodash.com/docs/4.17.15#orderBy\n placeholder: string\n query: string\n renderItemLabel?: (item: any) => string\n selectedItems: Item[]\n setSelectedItems: (item: Item) => void\n setQuery: (query: string) => void\n}\n\nexport type FilterSelectState = Pick<\n FilterSelectContextProps,\n | \"filteredItems\"\n | \"initialItemsToShow\"\n | \"items\"\n | \"isFiltered\"\n | \"onChange\"\n | \"order\"\n | \"placeholder\"\n | \"renderItemLabel\"\n | \"query\"\n | \"selectedItems\"\n>\n\ntype Action =\n | { type: \"SET_QUERY\"; payload: { query: string } }\n | { type: \"SET_SELECTED_ITEMS\"; payload: { item: Item } }\n\nconst filterSelectReducer = (state: FilterSelectState, action: Action) => {\n switch (action.type) {\n case \"SET_QUERY\": {\n const { query } = action.payload\n\n if (query === \"\") {\n return {\n ...state,\n query,\n isFiltered: false,\n filteredItems: [],\n }\n }\n\n const filteredItems = state.items.filter(({ label: name }) => {\n return name.toLowerCase().includes(query.toLowerCase())\n })\n\n return {\n ...state,\n query,\n isFiltered: true,\n filteredItems,\n }\n }\n\n case \"SET_SELECTED_ITEMS\": {\n const isFound = !!state.selectedItems.find(\n (item) => item.value === action.payload.item.value\n )\n\n const selectedItems = isFound\n ? reject(state.selectedItems, { value: action.payload.item.value })\n : [...state.selectedItems, action.payload.item]\n\n return {\n ...state,\n selectedItems,\n }\n }\n }\n}\n\nconst initialState: FilterSelectState = {\n filteredItems: [],\n initialItemsToShow: INITIAL_ITEMS_TO_SHOW,\n isFiltered: false,\n items: [],\n onChange: (x) => x,\n order: [[\"label\"], [\"asc\"]],\n placeholder: \"\",\n query: \"\",\n renderItemLabel: undefined,\n selectedItems: [],\n}\n\nconst FilterSelectContext = createContext<FilterSelectContextProps>({} as any)\n\nexport const FilterSelectContextProvider: React.FC<\n Partial<FilterSelectState>\n> = ({ children, ...props }) => {\n const [state, dispatch] = useReducer(filterSelectReducer, {\n ...initialState,\n ...props,\n })\n\n const contextValue = {\n ...state,\n\n setSelectedItems: (item) => {\n dispatch({\n type: \"SET_SELECTED_ITEMS\",\n payload: { item },\n })\n },\n setQuery: (query) => {\n dispatch({\n type: \"SET_QUERY\",\n payload: { query },\n })\n },\n }\n\n useLayoutEffect(() => {\n if (props.query?.length) {\n contextValue.setQuery(props.query)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n return (\n <FilterSelectContext.Provider value={contextValue}>\n {children}\n </FilterSelectContext.Provider>\n )\n}\n\nexport const useFilterSelectContext = () => {\n return useContext(FilterSelectContext)\n}\n"],"file":"FilterSelectContext.js"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.FilterSelectResultItem = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
|
|
10
|
+
var _Checkbox = require("../../Checkbox");
|
|
11
|
+
|
|
12
|
+
var _FilterSelectContext = require("./FilterSelectContext");
|
|
13
|
+
|
|
14
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
|
+
|
|
16
|
+
var FilterSelectResultItem = function FilterSelectResultItem(props) {
|
|
17
|
+
var _useFilterSelectConte = (0, _FilterSelectContext.useFilterSelectContext)(),
|
|
18
|
+
renderItemLabel = _useFilterSelectConte.renderItemLabel,
|
|
19
|
+
selectedItems = _useFilterSelectConte.selectedItems,
|
|
20
|
+
setSelectedItems = _useFilterSelectConte.setSelectedItems;
|
|
21
|
+
|
|
22
|
+
var isSelected = !!selectedItems.find(function (item) {
|
|
23
|
+
return item.value === props.value;
|
|
24
|
+
});
|
|
25
|
+
var label = renderItemLabel ? renderItemLabel(props) : props.label;
|
|
26
|
+
return /*#__PURE__*/_react.default.createElement(_Checkbox.Checkbox, {
|
|
27
|
+
onSelect: function onSelect() {
|
|
28
|
+
return setSelectedItems(props);
|
|
29
|
+
},
|
|
30
|
+
selected: isSelected,
|
|
31
|
+
key: props.value,
|
|
32
|
+
my: 1
|
|
33
|
+
}, label);
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
exports.FilterSelectResultItem = FilterSelectResultItem;
|
|
37
|
+
FilterSelectResultItem.displayName = "FilterSelectResultItem";
|
|
38
|
+
//# sourceMappingURL=FilterSelectResultItem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/elements/FilterSelect/Components/FilterSelectResultItem.tsx"],"names":["FilterSelectResultItem","props","renderItemLabel","selectedItems","setSelectedItems","isSelected","find","item","value","label"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;;;AAEO,IAAMA,sBAAsC,GAAG,SAAzCA,sBAAyC,CAACC,KAAD,EAAW;AAAA,8BAK3D,kDAL2D;AAAA,MAE7DC,eAF6D,yBAE7DA,eAF6D;AAAA,MAG7DC,aAH6D,yBAG7DA,aAH6D;AAAA,MAI7DC,gBAJ6D,yBAI7DA,gBAJ6D;;AAO/D,MAAMC,UAAU,GAAG,CAAC,CAACF,aAAa,CAACG,IAAd,CACnB,UAACC,IAAD;AAAA,WAAgBA,IAAI,CAACC,KAAL,KAAeP,KAAK,CAACO,KAArC;AAAA,GADmB,CAArB;AAGA,MAAMC,KAAK,GAAGP,eAAe,GAAGA,eAAe,CAACD,KAAD,CAAlB,GAA4BA,KAAK,CAACQ,KAA/D;AAEA,sBACE,6BAAC,kBAAD;AACE,IAAA,QAAQ,EAAE;AAAA,aAAML,gBAAgB,CAACH,KAAD,CAAtB;AAAA,KADZ;AAEE,IAAA,QAAQ,EAAEI,UAFZ;AAGE,IAAA,GAAG,EAAEJ,KAAK,CAACO,KAHb;AAIE,IAAA,EAAE,EAAE;AAJN,KAMGC,KANH,CADF;AAUD,CAtBM;;;AAAMT,sB","sourcesContent":["import React from \"react\"\nimport { Checkbox } from \"../../Checkbox\"\nimport { Item, useFilterSelectContext } from \"./FilterSelectContext\"\n\nexport const FilterSelectResultItem: React.FC<Item> = (props) => {\n const {\n renderItemLabel,\n selectedItems,\n setSelectedItems,\n } = useFilterSelectContext()\n\n const isSelected = !!selectedItems.find(\n (item: Item) => item.value === props.value\n )\n const label = renderItemLabel ? renderItemLabel(props) : props.label\n\n return (\n <Checkbox\n onSelect={() => setSelectedItems(props)}\n selected={isSelected}\n key={props.value}\n my={1}\n >\n {label}\n </Checkbox>\n )\n}\n"],"file":"FilterSelectResultItem.js"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { FilterSelectState } from "./Components/FilterSelectContext";
|
|
3
|
+
export declare type FilterSelectProps = Partial<FilterSelectState>;
|
|
4
|
+
export declare const FilterSelect: React.FC<FilterSelectProps>;
|
|
5
|
+
export declare const isBelowTheFoldSelected: (selectedItems: any, resultsSorted: any) => boolean;
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.isBelowTheFoldSelected = exports.FilterSelect = void 0;
|
|
9
|
+
|
|
10
|
+
var _lodash = _interopRequireDefault(require("lodash.uniqby"));
|
|
11
|
+
|
|
12
|
+
var _lodash2 = _interopRequireDefault(require("lodash.orderby"));
|
|
13
|
+
|
|
14
|
+
var _lodash3 = _interopRequireDefault(require("lodash.intersection"));
|
|
15
|
+
|
|
16
|
+
var React = _interopRequireWildcard(require("react"));
|
|
17
|
+
|
|
18
|
+
var _ShowMore = require("../ShowMore");
|
|
19
|
+
|
|
20
|
+
var _Flex = require("../Flex");
|
|
21
|
+
|
|
22
|
+
var _FilterSelectResultItem = require("./Components/FilterSelectResultItem");
|
|
23
|
+
|
|
24
|
+
var _FilterSelectContext = require("./Components/FilterSelectContext");
|
|
25
|
+
|
|
26
|
+
var _FilterInput = require("./Components/FilterInput");
|
|
27
|
+
|
|
28
|
+
var _VisuallyHidden = require("../VisuallyHidden");
|
|
29
|
+
|
|
30
|
+
var _Text = require("../Text");
|
|
31
|
+
|
|
32
|
+
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
|
|
33
|
+
|
|
34
|
+
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (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; }
|
|
35
|
+
|
|
36
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
37
|
+
|
|
38
|
+
function _extends() { _extends = Object.assign || 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); }
|
|
39
|
+
|
|
40
|
+
var FilterSelect = function FilterSelect(props) {
|
|
41
|
+
return /*#__PURE__*/React.createElement(_FilterSelectContext.FilterSelectContextProvider, props, /*#__PURE__*/React.createElement(_FilterSelect, null));
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
exports.FilterSelect = FilterSelect;
|
|
45
|
+
FilterSelect.displayName = "FilterSelect";
|
|
46
|
+
|
|
47
|
+
var _FilterSelect = function _FilterSelect() {
|
|
48
|
+
var _useFilterSelectConte = (0, _FilterSelectContext.useFilterSelectContext)(),
|
|
49
|
+
filteredItems = _useFilterSelectConte.filteredItems,
|
|
50
|
+
initialItemsToShow = _useFilterSelectConte.initialItemsToShow,
|
|
51
|
+
isFiltered = _useFilterSelectConte.isFiltered,
|
|
52
|
+
items = _useFilterSelectConte.items,
|
|
53
|
+
onChange = _useFilterSelectConte.onChange,
|
|
54
|
+
order = _useFilterSelectConte.order,
|
|
55
|
+
query = _useFilterSelectConte.query,
|
|
56
|
+
selectedItems = _useFilterSelectConte.selectedItems; // Dispatch change event
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
(0, React.useEffect)(function () {
|
|
60
|
+
if (onChange) {
|
|
61
|
+
onChange({
|
|
62
|
+
items: items,
|
|
63
|
+
filteredItems: filteredItems,
|
|
64
|
+
selectedItems: selectedItems,
|
|
65
|
+
query: query
|
|
66
|
+
});
|
|
67
|
+
} // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
68
|
+
|
|
69
|
+
}, [query]);
|
|
70
|
+
|
|
71
|
+
if (items.length === 0) {
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
var orderItems = function orderItems(items) {
|
|
76
|
+
return (0, _lodash2.default)(items, order[0], order[1]);
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
var itemsOrdered = orderItems(items);
|
|
80
|
+
var filterdItemsOrdered = orderItems(filteredItems);
|
|
81
|
+
var itemsSorted = (0, _lodash.default)(selectedItems.concat(itemsOrdered), "value"); // Move selected items to the top
|
|
82
|
+
|
|
83
|
+
var expanded = isBelowTheFoldSelected(selectedItems, itemsSorted);
|
|
84
|
+
var showNoResults = filteredItems.length === 0 && query !== "";
|
|
85
|
+
return /*#__PURE__*/React.createElement(_Flex.Flex, {
|
|
86
|
+
flexDirection: "column"
|
|
87
|
+
}, /*#__PURE__*/React.createElement(_FilterInput.FilterInput, {
|
|
88
|
+
mb: 1
|
|
89
|
+
}), query !== "" && /*#__PURE__*/React.createElement(_VisuallyHidden.VisuallyHidden, {
|
|
90
|
+
"aria-live": "polite"
|
|
91
|
+
}, "".concat(filteredItems.length, " result").concat(filteredItems.length === 1 ? "" : "s")), showNoResults && /*#__PURE__*/React.createElement(_Text.Text, {
|
|
92
|
+
variant: "sm"
|
|
93
|
+
}, "No results."), isFiltered ? filterdItemsOrdered.map(function (item) {
|
|
94
|
+
return /*#__PURE__*/React.createElement(_FilterSelectResultItem.FilterSelectResultItem, _extends({
|
|
95
|
+
key: item.value
|
|
96
|
+
}, item));
|
|
97
|
+
}) : /*#__PURE__*/React.createElement(_ShowMore.ShowMore, {
|
|
98
|
+
expanded: expanded,
|
|
99
|
+
initial: initialItemsToShow
|
|
100
|
+
}, itemsSorted.map(function (item) {
|
|
101
|
+
return /*#__PURE__*/React.createElement(_FilterSelectResultItem.FilterSelectResultItem, _extends({
|
|
102
|
+
key: item.value
|
|
103
|
+
}, item));
|
|
104
|
+
})));
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
_FilterSelect.displayName = "_FilterSelect";
|
|
108
|
+
|
|
109
|
+
var isBelowTheFoldSelected = function isBelowTheFoldSelected(selectedItems, resultsSorted) {
|
|
110
|
+
var selected = selectedItems.map(function (_ref) {
|
|
111
|
+
var value = _ref.value;
|
|
112
|
+
return value;
|
|
113
|
+
});
|
|
114
|
+
var results = resultsSorted.slice(_ShowMore.INITIAL_ITEMS_TO_SHOW).map(function (_ref2) {
|
|
115
|
+
var value = _ref2.value;
|
|
116
|
+
return value;
|
|
117
|
+
});
|
|
118
|
+
var isSelected = (0, _lodash3.default)(selected, results).length > 0;
|
|
119
|
+
return isSelected;
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
exports.isBelowTheFoldSelected = isBelowTheFoldSelected;
|
|
123
|
+
//# sourceMappingURL=FilterSelect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/FilterSelect/FilterSelect.tsx"],"names":["FilterSelect","props","_FilterSelect","filteredItems","initialItemsToShow","isFiltered","items","onChange","order","query","selectedItems","length","orderItems","itemsOrdered","filterdItemsOrdered","itemsSorted","concat","expanded","isBelowTheFoldSelected","showNoResults","map","item","value","resultsSorted","selected","results","slice","INITIAL_ITEMS_TO_SHOW","isSelected"],"mappings":"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","sourcesContent":["import uniqBy from \"lodash.uniqby\"\nimport orderBy from \"lodash.orderby\"\nimport intersection from \"lodash.intersection\"\nimport * as React from \"react\"\nimport { ShowMore } from \"../ShowMore\"\nimport { Flex } from \"../Flex\"\nimport { FilterSelectResultItem } from \"./Components/FilterSelectResultItem\"\nimport {\n FilterSelectContextProvider,\n FilterSelectState,\n useFilterSelectContext,\n} from \"./Components/FilterSelectContext\"\nimport { FilterInput } from \"./Components/FilterInput\"\nimport { VisuallyHidden } from \"../VisuallyHidden\"\nimport { Text } from \"../Text\"\nimport { INITIAL_ITEMS_TO_SHOW } from \"../ShowMore\"\nimport { useEffect } from \"react\"\n\nexport type FilterSelectProps = Partial<FilterSelectState>\n\nexport const FilterSelect: React.FC<FilterSelectProps> = (props) => {\n return (\n <FilterSelectContextProvider {...props}>\n <_FilterSelect />\n </FilterSelectContextProvider>\n )\n}\n\nconst _FilterSelect: React.FC = () => {\n const {\n filteredItems,\n initialItemsToShow,\n isFiltered,\n items,\n onChange,\n order,\n query,\n selectedItems,\n } = useFilterSelectContext()\n\n // Dispatch change event\n useEffect(() => {\n if (onChange) {\n onChange({\n items,\n filteredItems,\n selectedItems,\n query,\n })\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [query])\n\n if (items.length === 0) {\n return null\n }\n\n const orderItems = (items) => orderBy(items, order[0], order[1])\n const itemsOrdered = orderItems(items)\n const filterdItemsOrdered = orderItems(filteredItems)\n const itemsSorted = uniqBy(selectedItems.concat(itemsOrdered), \"value\") // Move selected items to the top\n const expanded = isBelowTheFoldSelected(selectedItems, itemsSorted)\n const showNoResults = filteredItems.length === 0 && query !== \"\"\n\n return (\n <Flex flexDirection=\"column\">\n <FilterInput mb={1} />\n\n {query !== \"\" && (\n <VisuallyHidden aria-live=\"polite\">\n {`${filteredItems.length} result${\n filteredItems.length === 1 ? \"\" : \"s\"\n }`}\n </VisuallyHidden>\n )}\n\n {showNoResults && <Text variant=\"sm\">No results.</Text>}\n\n {isFiltered ? (\n filterdItemsOrdered.map((item) => (\n <FilterSelectResultItem key={item.value} {...item} />\n ))\n ) : (\n <ShowMore expanded={expanded} initial={initialItemsToShow}>\n {itemsSorted.map((item) => {\n return <FilterSelectResultItem key={item.value} {...item} />\n })}\n </ShowMore>\n )}\n </Flex>\n )\n}\n\nexport const isBelowTheFoldSelected = (selectedItems, resultsSorted) => {\n const selected = selectedItems.map(({ value }) => value)\n const results = resultsSorted\n .slice(INITIAL_ITEMS_TO_SHOW)\n .map(({ value }) => value)\n const isSelected = intersection(selected, results).length > 0\n return isSelected\n}\n"],"file":"FilterSelect.js"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.Default = exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
|
|
10
|
+
var _storybookStates = require("storybook-states");
|
|
11
|
+
|
|
12
|
+
var _FilterSelect = require("./FilterSelect");
|
|
13
|
+
|
|
14
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
|
+
|
|
16
|
+
var _default = {
|
|
17
|
+
title: "Components/FilterSelect"
|
|
18
|
+
};
|
|
19
|
+
exports.default = _default;
|
|
20
|
+
|
|
21
|
+
var Default = function Default() {
|
|
22
|
+
return /*#__PURE__*/_react.default.createElement(_storybookStates.States, {
|
|
23
|
+
states: [{
|
|
24
|
+
placeholder: "Filter by artist name",
|
|
25
|
+
initialItemsToShow: 6,
|
|
26
|
+
order: [["country", "name"], ["asc", "asc"]],
|
|
27
|
+
renderItemLabel: function renderItemLabel(item) {
|
|
28
|
+
return "".concat(item.name, ", ").concat(item.country);
|
|
29
|
+
},
|
|
30
|
+
onChange: function onChange(state) {
|
|
31
|
+
console.log(state);
|
|
32
|
+
},
|
|
33
|
+
items: [{
|
|
34
|
+
label: "Barbara Kruger",
|
|
35
|
+
value: "barbara-kruger",
|
|
36
|
+
country: "American"
|
|
37
|
+
}, {
|
|
38
|
+
label: "Carrie Mae Weems",
|
|
39
|
+
value: "carrie-weems",
|
|
40
|
+
country: "American"
|
|
41
|
+
}, {
|
|
42
|
+
label: "Daniel Arsham",
|
|
43
|
+
value: "daniel-asham",
|
|
44
|
+
country: "American"
|
|
45
|
+
}, {
|
|
46
|
+
label: "Takashi Murakami",
|
|
47
|
+
value: "takashi-muakami",
|
|
48
|
+
country: "American"
|
|
49
|
+
}, {
|
|
50
|
+
label: "Tracey Emin",
|
|
51
|
+
value: "tracey-emin",
|
|
52
|
+
country: "British-Nigerian"
|
|
53
|
+
}, {
|
|
54
|
+
label: "Yinka Shonibare",
|
|
55
|
+
value: "yinka-shonibare",
|
|
56
|
+
country: "Japanese"
|
|
57
|
+
}, {
|
|
58
|
+
label: "Barbara Kruger",
|
|
59
|
+
value: "barbara-kruger-2",
|
|
60
|
+
country: "British-Nigerian"
|
|
61
|
+
}]
|
|
62
|
+
}]
|
|
63
|
+
}, function (props) {
|
|
64
|
+
return /*#__PURE__*/_react.default.createElement(_FilterSelect.FilterSelect, props);
|
|
65
|
+
});
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
exports.Default = Default;
|
|
69
|
+
Default.displayName = "Default";
|
|
70
|
+
//# sourceMappingURL=FilterSelect.story.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/FilterSelect/FilterSelect.story.tsx"],"names":["title","Default","placeholder","initialItemsToShow","order","renderItemLabel","item","name","country","onChange","state","console","log","items","label","value","props"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;;;eAGe;AACbA,EAAAA,KAAK,EAAE;AADM,C;;;AAIR,IAAMC,OAAO,GAAG,SAAVA,OAAU,GAAM;AAC3B,sBACE,6BAAC,uBAAD;AACE,IAAA,MAAM,EAAE,CACN;AACEC,MAAAA,WAAW,EAAE,uBADf;AAEEC,MAAAA,kBAAkB,EAAE,CAFtB;AAGEC,MAAAA,KAAK,EAAE,CACL,CAAC,SAAD,EAAY,MAAZ,CADK,EAEL,CAAC,KAAD,EAAQ,KAAR,CAFK,CAHT;AAOEC,MAAAA,eAAe,EAAE,yBAACC,IAAD,EAAU;AACzB,yBAAUA,IAAI,CAACC,IAAf,eAAwBD,IAAI,CAACE,OAA7B;AACD,OATH;AAUEC,MAAAA,QAAQ,EAAE,kBAACC,KAAD,EAAW;AACnBC,QAAAA,OAAO,CAACC,GAAR,CAAYF,KAAZ;AACD,OAZH;AAaEG,MAAAA,KAAK,EAAE,CACL;AACEC,QAAAA,KAAK,EAAE,gBADT;AAEEC,QAAAA,KAAK,EAAE,gBAFT;AAGEP,QAAAA,OAAO,EAAE;AAHX,OADK,EAML;AACEM,QAAAA,KAAK,EAAE,kBADT;AAEEC,QAAAA,KAAK,EAAE,cAFT;AAGEP,QAAAA,OAAO,EAAE;AAHX,OANK,EAWL;AACEM,QAAAA,KAAK,EAAE,eADT;AAEEC,QAAAA,KAAK,EAAE,cAFT;AAGEP,QAAAA,OAAO,EAAE;AAHX,OAXK,EAgBL;AACEM,QAAAA,KAAK,EAAE,kBADT;AAEEC,QAAAA,KAAK,EAAE,iBAFT;AAGEP,QAAAA,OAAO,EAAE;AAHX,OAhBK,EAqBL;AACEM,QAAAA,KAAK,EAAE,aADT;AAEEC,QAAAA,KAAK,EAAE,aAFT;AAGEP,QAAAA,OAAO,EAAE;AAHX,OArBK,EA0BL;AACEM,QAAAA,KAAK,EAAE,iBADT;AAEEC,QAAAA,KAAK,EAAE,iBAFT;AAGEP,QAAAA,OAAO,EAAE;AAHX,OA1BK,EA+BL;AACEM,QAAAA,KAAK,EAAE,gBADT;AAEEC,QAAAA,KAAK,EAAE,kBAFT;AAGEP,QAAAA,OAAO,EAAE;AAHX,OA/BK;AAbT,KADM;AADV,KAuDG,UAACQ,KAAD;AAAA,wBAAW,6BAAC,0BAAD,EAAkBA,KAAlB,CAAX;AAAA,GAvDH,CADF;AA2DD,CA5DM;;;AAAMf,O","sourcesContent":["import React from \"react\"\nimport { States } from \"storybook-states\"\nimport { FilterSelect } from \"./FilterSelect\"\nimport { FilterSelectProps } from \"./FilterSelect\"\n\nexport default {\n title: \"Components/FilterSelect\",\n}\n\nexport const Default = () => {\n return (\n <States<FilterSelectProps>\n states={[\n {\n placeholder: \"Filter by artist name\",\n initialItemsToShow: 6,\n order: [\n [\"country\", \"name\"],\n [\"asc\", \"asc\"],\n ],\n renderItemLabel: (item) => {\n return `${item.name}, ${item.country}`\n },\n onChange: (state) => {\n console.log(state)\n },\n items: [\n {\n label: \"Barbara Kruger\",\n value: \"barbara-kruger\",\n country: \"American\",\n },\n {\n label: \"Carrie Mae Weems\",\n value: \"carrie-weems\",\n country: \"American\",\n },\n {\n label: \"Daniel Arsham\",\n value: \"daniel-asham\",\n country: \"American\",\n },\n {\n label: \"Takashi Murakami\",\n value: \"takashi-muakami\",\n country: \"American\",\n },\n {\n label: \"Tracey Emin\",\n value: \"tracey-emin\",\n country: \"British-Nigerian\",\n },\n {\n label: \"Yinka Shonibare\",\n value: \"yinka-shonibare\",\n country: \"Japanese\",\n },\n {\n label: \"Barbara Kruger\",\n value: \"barbara-kruger-2\",\n country: \"British-Nigerian\",\n },\n ],\n },\n ]}\n >\n {(props) => <FilterSelect {...props} />}\n </States>\n )\n}\n"],"file":"FilterSelect.story.js"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./FilterSelect";
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
|
|
7
|
+
var _FilterSelect = require("./FilterSelect");
|
|
8
|
+
|
|
9
|
+
Object.keys(_FilterSelect).forEach(function (key) {
|
|
10
|
+
if (key === "default" || key === "__esModule") return;
|
|
11
|
+
if (key in exports && exports[key] === _FilterSelect[key]) return;
|
|
12
|
+
Object.defineProperty(exports, key, {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function get() {
|
|
15
|
+
return _FilterSelect[key];
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/FilterSelect/index.tsx"],"names":[],"mappings":";;;;;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","sourcesContent":["export * from \"./FilterSelect\"\n"],"file":"index.js"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.ShowMore = exports.INITIAL_ITEMS_TO_SHOW = void 0;
|
|
9
|
+
|
|
10
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
11
|
+
|
|
12
|
+
var _Clickable = require("../Clickable");
|
|
13
|
+
|
|
14
|
+
var _Text = require("../Text");
|
|
15
|
+
|
|
16
|
+
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
|
|
17
|
+
|
|
18
|
+
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (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; }
|
|
19
|
+
|
|
20
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
21
|
+
|
|
22
|
+
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."); }
|
|
23
|
+
|
|
24
|
+
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); }
|
|
25
|
+
|
|
26
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
27
|
+
|
|
28
|
+
function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
29
|
+
|
|
30
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
31
|
+
|
|
32
|
+
var INITIAL_ITEMS_TO_SHOW = 6;
|
|
33
|
+
exports.INITIAL_ITEMS_TO_SHOW = INITIAL_ITEMS_TO_SHOW;
|
|
34
|
+
|
|
35
|
+
var ShowMore = function ShowMore(_ref) {
|
|
36
|
+
var _ref$initial = _ref.initial,
|
|
37
|
+
initial = _ref$initial === void 0 ? INITIAL_ITEMS_TO_SHOW : _ref$initial,
|
|
38
|
+
children = _ref.children,
|
|
39
|
+
_ref$expanded = _ref.expanded,
|
|
40
|
+
expanded = _ref$expanded === void 0 ? false : _ref$expanded;
|
|
41
|
+
|
|
42
|
+
var _useState = (0, _react.useState)(expanded),
|
|
43
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
44
|
+
isExpanded = _useState2[0],
|
|
45
|
+
setExpanded = _useState2[1];
|
|
46
|
+
|
|
47
|
+
var nodes = _react.Children.toArray(children).filter(_react.isValidElement);
|
|
48
|
+
|
|
49
|
+
var hasMore = nodes.length > initial;
|
|
50
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, isExpanded ? nodes : nodes.slice(0, initial), hasMore && /*#__PURE__*/_react.default.createElement(_Clickable.Clickable, {
|
|
51
|
+
mt: 1,
|
|
52
|
+
textDecoration: "underline",
|
|
53
|
+
textAlign: "left",
|
|
54
|
+
onClick: function onClick() {
|
|
55
|
+
return setExpanded(function (visibility) {
|
|
56
|
+
return !visibility;
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}, /*#__PURE__*/_react.default.createElement(_Text.Text, {
|
|
60
|
+
variant: "xs"
|
|
61
|
+
}, isExpanded ? "Hide" : "Show more")));
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
exports.ShowMore = ShowMore;
|
|
65
|
+
//# sourceMappingURL=ShowMore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/ShowMore/ShowMore.tsx"],"names":["INITIAL_ITEMS_TO_SHOW","ShowMore","initial","children","expanded","isExpanded","setExpanded","nodes","Children","toArray","filter","isValidElement","hasMore","length","slice","visibility"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;;;;;;;;;;;;;;;;;AAQO,IAAMA,qBAAqB,GAAG,CAA9B;;;AAEA,IAAMC,QAAiC,GAAG,SAApCA,QAAoC,OAI3C;AAAA,0BAHJC,OAGI;AAAA,MAHJA,OAGI,6BAHMF,qBAGN;AAAA,MAFJG,QAEI,QAFJA,QAEI;AAAA,2BADJC,QACI;AAAA,MADJA,QACI,8BADO,KACP;;AAAA,kBAC8B,qBAASA,QAAT,CAD9B;AAAA;AAAA,MACGC,UADH;AAAA,MACeC,WADf;;AAEJ,MAAMC,KAAK,GAAGC,gBAASC,OAAT,CAAiBN,QAAjB,EAA2BO,MAA3B,CAAkCC,qBAAlC,CAAd;;AACA,MAAMC,OAAO,GAAGL,KAAK,CAACM,MAAN,GAAeX,OAA/B;AAEA,sBACE,4DACGG,UAAU,GAAGE,KAAH,GAAWA,KAAK,CAACO,KAAN,CAAY,CAAZ,EAAeZ,OAAf,CADxB,EAGGU,OAAO,iBACN,6BAAC,oBAAD;AACE,IAAA,EAAE,EAAE,CADN;AAEE,IAAA,cAAc,EAAC,WAFjB;AAGE,IAAA,SAAS,EAAC,MAHZ;AAIE,IAAA,OAAO,EAAE;AAAA,aAAMN,WAAW,CAAC,UAACS,UAAD;AAAA,eAAgB,CAACA,UAAjB;AAAA,OAAD,CAAjB;AAAA;AAJX,kBAME,6BAAC,UAAD;AAAM,IAAA,OAAO,EAAC;AAAd,KAAoBV,UAAU,GAAG,MAAH,GAAY,WAA1C,CANF,CAJJ,CADF;AAgBD,CAzBM","sourcesContent":["import React, { Children, isValidElement, useState } from \"react\"\nimport { Clickable } from \"../Clickable\"\nimport { Text } from \"../Text\"\n\nexport interface ShowMoreProps {\n children: React.ReactNode\n initial?: number\n expanded?: boolean\n}\n\nexport const INITIAL_ITEMS_TO_SHOW = 6\n\nexport const ShowMore: React.FC<ShowMoreProps> = ({\n initial = INITIAL_ITEMS_TO_SHOW,\n children,\n expanded = false,\n}) => {\n const [isExpanded, setExpanded] = useState(expanded)\n const nodes = Children.toArray(children).filter(isValidElement)\n const hasMore = nodes.length > initial\n\n return (\n <>\n {isExpanded ? nodes : nodes.slice(0, initial)}\n\n {hasMore && (\n <Clickable\n mt={1}\n textDecoration=\"underline\"\n textAlign=\"left\"\n onClick={() => setExpanded((visibility) => !visibility)}\n >\n <Text variant=\"xs\">{isExpanded ? \"Hide\" : \"Show more\"}</Text>\n </Clickable>\n )}\n </>\n )\n}\n"],"file":"ShowMore.js"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.Default = exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
|
|
10
|
+
var _storybookStates = require("storybook-states");
|
|
11
|
+
|
|
12
|
+
var _ShowMore = require("./ShowMore");
|
|
13
|
+
|
|
14
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
|
+
|
|
16
|
+
var _default = {
|
|
17
|
+
title: "Components/ShowMore"
|
|
18
|
+
};
|
|
19
|
+
exports.default = _default;
|
|
20
|
+
|
|
21
|
+
var Default = function Default() {
|
|
22
|
+
return /*#__PURE__*/_react.default.createElement(_storybookStates.States, {
|
|
23
|
+
states: [{
|
|
24
|
+
initial: 3,
|
|
25
|
+
children: Array.from(Array(5)).map(function (_, index) {
|
|
26
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
|
27
|
+
key: index
|
|
28
|
+
}, "hi");
|
|
29
|
+
})
|
|
30
|
+
}, {
|
|
31
|
+
expanded: true,
|
|
32
|
+
children: Array.from(Array(5)).map(function (_, index) {
|
|
33
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
|
34
|
+
key: index
|
|
35
|
+
}, "hi");
|
|
36
|
+
})
|
|
37
|
+
}]
|
|
38
|
+
}, function (props) {
|
|
39
|
+
return /*#__PURE__*/_react.default.createElement(_ShowMore.ShowMore, props);
|
|
40
|
+
});
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
exports.Default = Default;
|
|
44
|
+
Default.displayName = "Default";
|
|
45
|
+
//# sourceMappingURL=ShowMore.story.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/ShowMore/ShowMore.story.tsx"],"names":["title","Default","initial","children","Array","from","map","_","index","expanded","props"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;;;eAGe;AACbA,EAAAA,KAAK,EAAE;AADM,C;;;AAIR,IAAMC,OAAO,GAAG,SAAVA,OAAU,GAAM;AAC3B,sBACE,6BAAC,uBAAD;AACE,IAAA,MAAM,EAAE,CACN;AACEC,MAAAA,OAAO,EAAE,CADX;AAEEC,MAAAA,QAAQ,EAAEC,KAAK,CAACC,IAAN,CAAWD,KAAK,CAAC,CAAD,CAAhB,EAAqBE,GAArB,CAAyB,UAACC,CAAD,EAAIC,KAAJ;AAAA,4BACjC;AAAK,UAAA,GAAG,EAAEA;AAAV,gBADiC;AAAA,OAAzB;AAFZ,KADM,EAON;AACEC,MAAAA,QAAQ,EAAE,IADZ;AAEEN,MAAAA,QAAQ,EAAEC,KAAK,CAACC,IAAN,CAAWD,KAAK,CAAC,CAAD,CAAhB,EAAqBE,GAArB,CAAyB,UAACC,CAAD,EAAIC,KAAJ;AAAA,4BACjC;AAAK,UAAA,GAAG,EAAEA;AAAV,gBADiC;AAAA,OAAzB;AAFZ,KAPM;AADV,KAgBG,UAACE,KAAD;AAAA,wBAAW,6BAAC,kBAAD,EAAcA,KAAd,CAAX;AAAA,GAhBH,CADF;AAoBD,CArBM;;;AAAMT,O","sourcesContent":["import React from \"react\"\nimport { States } from \"storybook-states\"\nimport { ShowMore } from \"./ShowMore\"\nimport { ShowMoreProps } from \"./ShowMore\"\n\nexport default {\n title: \"Components/ShowMore\",\n}\n\nexport const Default = () => {\n return (\n <States<ShowMoreProps>\n states={[\n {\n initial: 3,\n children: Array.from(Array(5)).map((_, index) => (\n <div key={index}>hi</div>\n )),\n },\n {\n expanded: true,\n children: Array.from(Array(5)).map((_, index) => (\n <div key={index}>hi</div>\n )),\n },\n ]}\n >\n {(props) => <ShowMore {...props} />}\n </States>\n )\n}\n"],"file":"ShowMore.story.js"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./ShowMore";
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
|
|
7
|
+
var _ShowMore = require("./ShowMore");
|
|
8
|
+
|
|
9
|
+
Object.keys(_ShowMore).forEach(function (key) {
|
|
10
|
+
if (key === "default" || key === "__esModule") return;
|
|
11
|
+
if (key in exports && exports[key] === _ShowMore[key]) return;
|
|
12
|
+
Object.defineProperty(exports, key, {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function get() {
|
|
15
|
+
return _ShowMore[key];
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/ShowMore/index.tsx"],"names":[],"mappings":";;;;;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","sourcesContent":["export * from \"./ShowMore\"\n"],"file":"index.js"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@artsy/palette",
|
|
3
|
-
"version": "18.
|
|
3
|
+
"version": "18.13.0",
|
|
4
4
|
"description": "Design system library for react components",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"publishConfig": {
|
|
@@ -116,6 +116,10 @@
|
|
|
116
116
|
"@artsy/palette-tokens": "^2.6.0",
|
|
117
117
|
"@seznam/compose-react-refs": "^1.0.6",
|
|
118
118
|
"@styled-system/theme-get": "^5.1.2",
|
|
119
|
+
"lodash.intersection": "^4.4.0",
|
|
120
|
+
"lodash.orderby": "^4.6.0",
|
|
121
|
+
"lodash.reject": "^4.6.0",
|
|
122
|
+
"lodash.uniqby": "^4.7.0",
|
|
119
123
|
"luxon": "^1.15",
|
|
120
124
|
"proportional-scale": "^4.0.0",
|
|
121
125
|
"react-lazy-load-image-component": "1.5.0",
|
|
@@ -174,5 +178,5 @@
|
|
|
174
178
|
"<rootDir>/www/"
|
|
175
179
|
]
|
|
176
180
|
},
|
|
177
|
-
"gitHead": "
|
|
181
|
+
"gitHead": "a4f0cafb6a3006dadab8fe247ea9737a8d6ed828"
|
|
178
182
|
}
|