@artsy/palette 31.6.2 → 31.7.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/dist/elements/AutocompleteInput/AutocompleteInput.d.ts +2 -1
- package/dist/elements/AutocompleteInput/AutocompleteInput.js +25 -4
- package/dist/elements/AutocompleteInput/AutocompleteInput.js.map +1 -1
- package/dist/elements/AutocompleteInput/AutocompleteInput.story.js +22 -0
- package/dist/elements/AutocompleteInput/AutocompleteInput.story.js.map +1 -1
- package/package.json +2 -2
|
@@ -20,6 +20,7 @@ export interface AutocompleteInputProps<T extends AutocompleteInputOptionType> e
|
|
|
20
20
|
onClose?(): void;
|
|
21
21
|
renderOption?(option: T, i: number): React.ReactElement<any, string | React.JSXElementConstructor<any>>;
|
|
22
22
|
options: T[];
|
|
23
|
+
maxHeight?: string | number;
|
|
23
24
|
}
|
|
24
25
|
/** AutocompleteInput */
|
|
25
|
-
export declare const AutocompleteInput: <T extends AutocompleteInputOptionType>({ defaultValue, id, loading, header, footer, onSubmit, onSelect, onChange, onClear, onClose, onKeyDown, height, renderOption, options, ...rest }: AutocompleteInputProps<T>) => JSX.Element;
|
|
26
|
+
export declare const AutocompleteInput: <T extends AutocompleteInputOptionType>({ defaultValue, id, loading, header, footer, onSubmit, onSelect, onChange, onClear, onClose, onKeyDown, height, renderOption, options, maxHeight, ...rest }: AutocompleteInputProps<T>) => JSX.Element;
|
|
@@ -39,7 +39,7 @@ var _AutocompleteInputOption = require("./AutocompleteInputOption");
|
|
|
39
39
|
|
|
40
40
|
var _AutocompleteInputOptionLabel = require("./AutocompleteInputOptionLabel");
|
|
41
41
|
|
|
42
|
-
var _excluded = ["defaultValue", "id", "loading", "header", "footer", "onSubmit", "onSelect", "onChange", "onClear", "onClose", "onKeyDown", "height", "renderOption", "options"];
|
|
42
|
+
var _excluded = ["defaultValue", "id", "loading", "header", "footer", "onSubmit", "onSelect", "onChange", "onClear", "onClose", "onKeyDown", "height", "renderOption", "options", "maxHeight"];
|
|
43
43
|
|
|
44
44
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
45
45
|
|
|
@@ -124,10 +124,13 @@ var AutocompleteInput = function AutocompleteInput(_ref) {
|
|
|
124
124
|
return /*#__PURE__*/_react.default.createElement(_AutocompleteInputOptionLabel.AutocompleteInputOptionLabel, option);
|
|
125
125
|
} : _ref$renderOption,
|
|
126
126
|
options = _ref.options,
|
|
127
|
+
maxHeight = _ref.maxHeight,
|
|
127
128
|
rest = _objectWithoutProperties(_ref, _excluded);
|
|
128
129
|
|
|
129
130
|
var inputRef = (0, _react.useRef)(null);
|
|
130
131
|
var containerRef = (0, _react.useRef)(null);
|
|
132
|
+
var headerRef = (0, _react.useRef)(null);
|
|
133
|
+
var footerRef = (0, _react.useRef)(null);
|
|
131
134
|
|
|
132
135
|
var _splitBoxProps = (0, _Box.splitBoxProps)(rest),
|
|
133
136
|
_splitBoxProps2 = _slicedToArray(_splitBoxProps, 2),
|
|
@@ -351,6 +354,18 @@ var AutocompleteInput = function AutocompleteInput(_ref) {
|
|
|
351
354
|
|
|
352
355
|
|
|
353
356
|
var staged = options[index];
|
|
357
|
+
|
|
358
|
+
var getMaxHeight = function getMaxHeight() {
|
|
359
|
+
var _headerRef$current$cl, _headerRef$current, _footerRef$current$cl, _footerRef$current;
|
|
360
|
+
|
|
361
|
+
/* 308 = Roughly, 5.5 default sized options */
|
|
362
|
+
if (!maxHeight) return "308px";
|
|
363
|
+
var value = typeof maxHeight === "number" ? "".concat(maxHeight, "px") : maxHeight;
|
|
364
|
+
var headerAndFooterHeight = ((_headerRef$current$cl = headerRef === null || headerRef === void 0 ? void 0 : (_headerRef$current = headerRef.current) === null || _headerRef$current === void 0 ? void 0 : _headerRef$current.clientHeight) !== null && _headerRef$current$cl !== void 0 ? _headerRef$current$cl : 0) + ((_footerRef$current$cl = footerRef === null || footerRef === void 0 ? void 0 : (_footerRef$current = footerRef.current) === null || _footerRef$current === void 0 ? void 0 : _footerRef$current.clientHeight) !== null && _footerRef$current$cl !== void 0 ? _footerRef$current$cl : 0);
|
|
365
|
+
return "calc(".concat(value, " - ").concat(headerAndFooterHeight, "px)");
|
|
366
|
+
};
|
|
367
|
+
|
|
368
|
+
var inputOptionsMaxHeight = getMaxHeight();
|
|
354
369
|
return /*#__PURE__*/_react.default.createElement(_Box.Box, _extends({
|
|
355
370
|
ref: (0, _composeReactRefs.default)(containerRef, containsFocusRef),
|
|
356
371
|
onKeyDown: handleContainerKeydown
|
|
@@ -390,7 +405,11 @@ var AutocompleteInput = function AutocompleteInput(_ref) {
|
|
|
390
405
|
ref: tooltipRef,
|
|
391
406
|
role: "listbox",
|
|
392
407
|
width: width
|
|
393
|
-
},
|
|
408
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
409
|
+
ref: headerRef
|
|
410
|
+
}, header), /*#__PURE__*/_react.default.createElement(AutocompleteInputOptions, {
|
|
411
|
+
maxHeight: inputOptionsMaxHeight
|
|
412
|
+
}, optionsWithRefs.map(function (_ref3, i) {
|
|
394
413
|
var option = _ref3.option,
|
|
395
414
|
ref = _ref3.ref;
|
|
396
415
|
return /*#__PURE__*/_react.default.createElement(_AutocompleteInputOption.AutocompleteInputOption, {
|
|
@@ -405,7 +424,9 @@ var AutocompleteInput = function AutocompleteInput(_ref) {
|
|
|
405
424
|
selected: i === index,
|
|
406
425
|
tabIndex: -1
|
|
407
426
|
}, renderOption(option, i));
|
|
408
|
-
})),
|
|
427
|
+
})), /*#__PURE__*/_react.default.createElement("div", {
|
|
428
|
+
ref: footerRef
|
|
429
|
+
}, footer)), /*#__PURE__*/_react.default.createElement(_VisuallyHidden.VisuallyHidden, id ? {
|
|
409
430
|
id: "".concat(id, "__assistiveHint")
|
|
410
431
|
} : {}, "When autocomplete results are available use up and down arrows to review and enter to select. Touch device users, explore by touch or with swipe gestures."), isDropdownVisible && /*#__PURE__*/_react.default.createElement(_VisuallyHidden.VisuallyHidden, {
|
|
411
432
|
role: "status",
|
|
@@ -423,5 +444,5 @@ var AutocompleteInputDropdown = (0, _styledComponents.default)(_Box.Box).withCon
|
|
|
423
444
|
var AutocompleteInputOptions = (0, _styledComponents.default)(_Box.Box).withConfig({
|
|
424
445
|
displayName: "AutocompleteInput__AutocompleteInputOptions",
|
|
425
446
|
componentId: "sc-89lyrd-1"
|
|
426
|
-
})(["
|
|
447
|
+
})(["overflow-y:auto;-webkit-overflow-scrolling:touch;"]);
|
|
427
448
|
//# sourceMappingURL=AutocompleteInput.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/AutocompleteInput/AutocompleteInput.tsx"],"names":["reducer","state","action","type","open","query","payload","AutocompleteInput","defaultValue","id","loading","header","footer","onSubmit","onSelect","onChange","onClear","onClose","onKeyDown","height","renderOption","option","options","rest","inputRef","containerRef","boxProps","inputProps","dispatch","optionsWithRefs","map","ref","resetUI","setTimeout","current","focus","reset","handleSelect","index","text","list","waitForInteractive","onEnter","element","i","event","preventDefault","stopPropagation","set","isDropdownVisible","length","position","offset","active","anchorRef","tooltipRef","width","handleFocus","handleMouseDown","handleMouseEnter","cursor","interactive","handleChange","value","currentTarget","handleClearOrSubmit","handleFocusChange","focused","containsFocusRef","handleInputKeydown","key","blur","handleContainerKeydown","staged","AutocompleteInputDropdown","Box","DROP_SHADOW","AutocompleteInputOptions"],"mappings":"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","sourcesContent":["import composeRefs from \"@seznam/compose-react-refs\"\nimport React, {\n createRef,\n useCallback,\n useEffect,\n useMemo,\n useReducer,\n useRef,\n} from \"react\"\nimport styled from \"styled-components\"\nimport { useKeyboardListNavigation } from \"use-keyboard-list-navigation\"\nimport { Spinner } from \"..\"\nimport { DROP_SHADOW } from \"../../helpers\"\nimport SearchIcon from \"@artsy/icons/SearchIcon\"\nimport CloseIcon from \"@artsy/icons/CloseIcon\"\nimport { usePosition, useContainsFocus } from \"../../utils\"\nimport { useWidthOf } from \"../../utils/useWidthOf\"\nimport { Box, splitBoxProps } from \"../Box\"\nimport { Clickable } from \"../Clickable\"\nimport { InputProps } from \"../Input\"\nimport { LabeledInput } from \"../LabeledInput\"\nimport { VisuallyHidden } from \"../VisuallyHidden\"\nimport { AutocompleteInputOption } from \"./AutocompleteInputOption\"\nimport { AutocompleteInputOptionLabel } from \"./AutocompleteInputOptionLabel\"\n\n/** Base option type — can be expanded */\nexport interface AutocompleteInputOptionType {\n text: string\n value: string\n}\n\ninterface State {\n open: boolean\n query: string\n}\n\ntype Action =\n | { type: \"OPEN\" }\n | { type: \"CLOSE\" }\n | { type: \"CLEAR\" }\n | { type: \"CHANGE\"; payload: { query: string } }\n | { type: \"SELECT\"; payload: { query: string } }\n\nconst reducer = (state: State, action: Action): State => {\n switch (action.type) {\n case \"OPEN\":\n return { ...state, open: true }\n case \"CLOSE\":\n return { ...state, open: false }\n case \"CLEAR\":\n return { ...state, query: \"\" }\n case \"CHANGE\":\n return { ...state, query: action.payload.query, open: true }\n case \"SELECT\":\n return { ...state, query: action.payload.query, open: false }\n }\n}\n\nexport interface AutocompleteInputProps<T extends AutocompleteInputOptionType>\n extends Omit<InputProps, \"onSelect\" | \"onSubmit\"> {\n defaultValue?: string\n loading?: boolean\n header?: React.ReactNode\n footer?: React.ReactNode\n /** on <enter> when no option is selected */\n onSubmit?(query: string): void\n /** on <click> or <enter> when an option is selected */\n onSelect?(option: T, index: number): void\n /** on <click> of the 'x' (clear) button */\n onClear?(): void\n /** Callback that runs when options are hidden */\n onClose?(): void\n renderOption?(\n option: T,\n i: number\n ): React.ReactElement<any, string | React.JSXElementConstructor<any>>\n options: T[]\n}\n\n/** AutocompleteInput */\nexport const AutocompleteInput = <T extends AutocompleteInputOptionType>({\n defaultValue = \"\",\n id,\n loading,\n header,\n footer,\n onSubmit,\n onSelect,\n onChange,\n onClear,\n onClose,\n onKeyDown,\n height,\n renderOption = (option) => <AutocompleteInputOptionLabel {...option} />,\n options,\n ...rest\n}: AutocompleteInputProps<T>) => {\n const inputRef = useRef<HTMLInputElement | null>(null)\n const containerRef = useRef<HTMLDivElement | null>(null)\n\n const [boxProps, inputProps] = splitBoxProps(rest)\n\n const [state, dispatch] = useReducer(reducer, {\n open: false,\n query: defaultValue,\n })\n\n const optionsWithRefs = useMemo(() => {\n return options.map((option) => ({\n option,\n ref: createRef<HTMLButtonElement>(),\n }))\n }, [options])\n\n const resetUI = () => {\n setTimeout(() => {\n inputRef.current?.focus()\n reset()\n dispatch({ type: \"CLOSE\" })\n }, 100)\n }\n\n const handleSelect = (option: T, index: number) => {\n dispatch({ type: \"SELECT\", payload: { query: option.text } })\n inputRef.current?.focus()\n onSelect?.(option, index)\n }\n\n const { index, reset, set } = useKeyboardListNavigation({\n ref: containerRef,\n list: options,\n waitForInteractive: true,\n onEnter: ({ element: option, index: i, event }) => {\n event.preventDefault()\n event.stopPropagation()\n handleSelect(option, i)\n resetUI()\n },\n })\n\n const isDropdownVisible = state.open && options.length > 0\n\n // Reset keyboard navigation when options change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(reset, [options])\n\n // Reset keyboard navigation when query is empty\n useEffect(() => {\n if (state.query === \"\") reset()\n }, [reset, state.query])\n\n const { anchorRef, tooltipRef } = usePosition({\n position: \"bottom\",\n offset: 10,\n active: isDropdownVisible,\n })\n\n const { width } = useWidthOf({ ref: anchorRef })\n\n const handleFocus = () => {\n reset()\n dispatch({ type: \"OPEN\" })\n }\n\n const handleMouseDown = (option: T, i: number) => () => {\n handleSelect(option, i)\n resetUI()\n }\n\n const handleMouseEnter = (i: number) => () => {\n set({ cursor: i, interactive: true })\n }\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const {\n currentTarget: { value },\n } = event\n\n dispatch({ type: \"CHANGE\", payload: { query: value } })\n onChange?.(event)\n }\n\n const handleClearOrSubmit = () => {\n if (state.query === \"\") {\n onSubmit?.(state.query)\n return\n }\n\n dispatch({ type: \"CLEAR\" })\n inputRef.current?.focus()\n onClear?.()\n }\n\n // Moves focus to different options when keyboard navigating using up/down\n useEffect(() => {\n const option = optionsWithRefs[index]\n option?.ref?.current?.focus()\n }, [index, optionsWithRefs])\n\n const handleFocusChange = useCallback(\n (focused: boolean) => {\n if (focused || !isDropdownVisible) return\n\n dispatch({ type: \"CLOSE\" })\n reset()\n onClose?.()\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [onClose, isDropdownVisible]\n )\n\n // Handle closing the dropdown when clicking outside of the input\n // or when focus leaves the input completely\n const { ref: containsFocusRef } = useContainsFocus({\n onChange: handleFocusChange,\n })\n\n const handleInputKeydown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n switch (event.key) {\n // Handle <Enter> when nothing is selected\n case \"Enter\":\n if (state.query !== \"\" && index === -1) {\n onSubmit?.(state.query)\n resetUI()\n }\n return\n\n // <Esc> to close dropdown\n case \"Escape\":\n event.preventDefault()\n event.stopPropagation()\n\n dispatch({ type: \"CLOSE\" })\n inputRef.current?.blur()\n\n return\n\n default:\n break\n }\n\n onKeyDown?.(event)\n }\n\n // Moves focus back to input when typing\n const handleContainerKeydown = (\n event: React.KeyboardEvent<HTMLDivElement>\n ) => {\n switch (event.key) {\n case \"Alt\":\n case \"ArrowDown\":\n case \"ArrowUp\":\n case \"Control\":\n case \"Enter\":\n case \"Meta\":\n case \"Shift\":\n case \"Tab\":\n // Ignore\n return\n\n case \"Escape\":\n event.preventDefault()\n event.stopPropagation()\n\n dispatch({ type: \"CLOSE\" })\n inputRef.current?.blur()\n reset()\n\n return\n\n default:\n inputRef.current?.focus()\n }\n }\n\n // Option that is being hovered or keyed into\n const staged = options[index]\n\n return (\n <Box\n ref={composeRefs(containerRef, containsFocusRef) as any}\n onKeyDown={handleContainerKeydown}\n {...boxProps}\n >\n <LabeledInput\n ref={composeRefs(inputRef, anchorRef) as any}\n role=\"combobox\"\n aria-expanded={isDropdownVisible}\n aria-autocomplete=\"list\"\n {...(id ? { id, \"aria-describedby\": `${id}__assistiveHint` } : {})}\n label={\n loading ? (\n <Box width={18}>\n <Spinner size=\"small\" />\n </Box>\n ) : state.query ? (\n <Clickable\n onClick={handleClearOrSubmit}\n height=\"100%\"\n display=\"flex\"\n alignItems=\"center\"\n aria-label=\"Clear input\"\n >\n <CloseIcon fill=\"black60\" aria-hidden />\n </Clickable>\n ) : (\n <SearchIcon fill=\"black60\" aria-hidden />\n )\n }\n value={staged?.text ?? state.query}\n onChange={handleChange}\n onFocus={handleFocus}\n onKeyDown={handleInputKeydown}\n autoComplete=\"off\"\n height={height}\n {...inputProps}\n />\n\n {isDropdownVisible && (\n <AutocompleteInputDropdown\n ref={tooltipRef as any}\n role=\"listbox\"\n width={width}\n >\n {header}\n <AutocompleteInputOptions>\n {optionsWithRefs.map(({ option, ref }, i) => {\n return (\n <AutocompleteInputOption\n key={i}\n ref={ref}\n role=\"option\"\n aria-selected={i === index}\n aria-posinset={i + 1}\n aria-setsize={options.length}\n onMouseDown={handleMouseDown(option, i)}\n onMouseEnter={handleMouseEnter(i)}\n selected={i === index}\n tabIndex={-1}\n >\n {renderOption(option, i)}\n </AutocompleteInputOption>\n )\n })}\n </AutocompleteInputOptions>\n\n {footer}\n </AutocompleteInputDropdown>\n )}\n\n <VisuallyHidden {...(id ? { id: `${id}__assistiveHint` } : {})}>\n When autocomplete results are available use up and down arrows to review\n and enter to select. Touch device users, explore by touch or with swipe\n gestures.\n </VisuallyHidden>\n\n {isDropdownVisible && (\n <VisuallyHidden role=\"status\" aria-atomic=\"true\" aria-live=\"polite\">\n {options.length === 1\n ? `1 result is available`\n : `${options.length} results are available`}\n </VisuallyHidden>\n )}\n </Box>\n )\n}\n\nconst AutocompleteInputDropdown = styled(Box)`\n box-shadow: ${DROP_SHADOW};\n z-index: 1;\n`\n\nconst AutocompleteInputOptions = styled(Box)`\n /* 308 = Roughly, 5.5 default sized options */\n max-height: 308px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n`\n"],"file":"AutocompleteInput.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/AutocompleteInput/AutocompleteInput.tsx"],"names":["reducer","state","action","type","open","query","payload","AutocompleteInput","defaultValue","id","loading","header","footer","onSubmit","onSelect","onChange","onClear","onClose","onKeyDown","height","renderOption","option","options","maxHeight","rest","inputRef","containerRef","headerRef","footerRef","boxProps","inputProps","dispatch","optionsWithRefs","map","ref","resetUI","setTimeout","current","focus","reset","handleSelect","index","text","list","waitForInteractive","onEnter","element","i","event","preventDefault","stopPropagation","set","isDropdownVisible","length","position","offset","active","anchorRef","tooltipRef","width","handleFocus","handleMouseDown","handleMouseEnter","cursor","interactive","handleChange","value","currentTarget","handleClearOrSubmit","handleFocusChange","focused","containsFocusRef","handleInputKeydown","key","blur","handleContainerKeydown","staged","getMaxHeight","headerAndFooterHeight","clientHeight","inputOptionsMaxHeight","AutocompleteInputDropdown","Box","DROP_SHADOW","AutocompleteInputOptions"],"mappings":"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","sourcesContent":["import composeRefs from \"@seznam/compose-react-refs\"\nimport React, {\n createRef,\n useCallback,\n useEffect,\n useMemo,\n useReducer,\n useRef,\n} from \"react\"\nimport styled from \"styled-components\"\nimport { useKeyboardListNavigation } from \"use-keyboard-list-navigation\"\nimport { Spinner } from \"..\"\nimport { DROP_SHADOW } from \"../../helpers\"\nimport SearchIcon from \"@artsy/icons/SearchIcon\"\nimport CloseIcon from \"@artsy/icons/CloseIcon\"\nimport { usePosition, useContainsFocus } from \"../../utils\"\nimport { useWidthOf } from \"../../utils/useWidthOf\"\nimport { Box, splitBoxProps } from \"../Box\"\nimport { Clickable } from \"../Clickable\"\nimport { InputProps } from \"../Input\"\nimport { LabeledInput } from \"../LabeledInput\"\nimport { VisuallyHidden } from \"../VisuallyHidden\"\nimport { AutocompleteInputOption } from \"./AutocompleteInputOption\"\nimport { AutocompleteInputOptionLabel } from \"./AutocompleteInputOptionLabel\"\n\n/** Base option type — can be expanded */\nexport interface AutocompleteInputOptionType {\n text: string\n value: string\n}\n\ninterface State {\n open: boolean\n query: string\n}\n\ntype Action =\n | { type: \"OPEN\" }\n | { type: \"CLOSE\" }\n | { type: \"CLEAR\" }\n | { type: \"CHANGE\"; payload: { query: string } }\n | { type: \"SELECT\"; payload: { query: string } }\n\nconst reducer = (state: State, action: Action): State => {\n switch (action.type) {\n case \"OPEN\":\n return { ...state, open: true }\n case \"CLOSE\":\n return { ...state, open: false }\n case \"CLEAR\":\n return { ...state, query: \"\" }\n case \"CHANGE\":\n return { ...state, query: action.payload.query, open: true }\n case \"SELECT\":\n return { ...state, query: action.payload.query, open: false }\n }\n}\n\nexport interface AutocompleteInputProps<T extends AutocompleteInputOptionType>\n extends Omit<InputProps, \"onSelect\" | \"onSubmit\"> {\n defaultValue?: string\n loading?: boolean\n header?: React.ReactNode\n footer?: React.ReactNode\n /** on <enter> when no option is selected */\n onSubmit?(query: string): void\n /** on <click> or <enter> when an option is selected */\n onSelect?(option: T, index: number): void\n /** on <click> of the 'x' (clear) button */\n onClear?(): void\n /** Callback that runs when options are hidden */\n onClose?(): void\n renderOption?(\n option: T,\n i: number\n ): React.ReactElement<any, string | React.JSXElementConstructor<any>>\n options: T[]\n maxHeight?: string | number\n}\n\n/** AutocompleteInput */\nexport const AutocompleteInput = <T extends AutocompleteInputOptionType>({\n defaultValue = \"\",\n id,\n loading,\n header,\n footer,\n onSubmit,\n onSelect,\n onChange,\n onClear,\n onClose,\n onKeyDown,\n height,\n renderOption = (option) => <AutocompleteInputOptionLabel {...option} />,\n options,\n maxHeight,\n ...rest\n}: AutocompleteInputProps<T>) => {\n const inputRef = useRef<HTMLInputElement | null>(null)\n const containerRef = useRef<HTMLDivElement | null>(null)\n const headerRef = useRef<HTMLDivElement | null>(null)\n const footerRef = useRef<HTMLDivElement | null>(null)\n\n const [boxProps, inputProps] = splitBoxProps(rest)\n\n const [state, dispatch] = useReducer(reducer, {\n open: false,\n query: defaultValue,\n })\n\n const optionsWithRefs = useMemo(() => {\n return options.map((option) => ({\n option,\n ref: createRef<HTMLButtonElement>(),\n }))\n }, [options])\n\n const resetUI = () => {\n setTimeout(() => {\n inputRef.current?.focus()\n reset()\n dispatch({ type: \"CLOSE\" })\n }, 100)\n }\n\n const handleSelect = (option: T, index: number) => {\n dispatch({ type: \"SELECT\", payload: { query: option.text } })\n inputRef.current?.focus()\n onSelect?.(option, index)\n }\n\n const { index, reset, set } = useKeyboardListNavigation({\n ref: containerRef,\n list: options,\n waitForInteractive: true,\n onEnter: ({ element: option, index: i, event }) => {\n event.preventDefault()\n event.stopPropagation()\n handleSelect(option, i)\n resetUI()\n },\n })\n\n const isDropdownVisible = state.open && options.length > 0\n\n // Reset keyboard navigation when options change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(reset, [options])\n\n // Reset keyboard navigation when query is empty\n useEffect(() => {\n if (state.query === \"\") reset()\n }, [reset, state.query])\n\n const { anchorRef, tooltipRef } = usePosition({\n position: \"bottom\",\n offset: 10,\n active: isDropdownVisible,\n })\n\n const { width } = useWidthOf({ ref: anchorRef })\n\n const handleFocus = () => {\n reset()\n dispatch({ type: \"OPEN\" })\n }\n\n const handleMouseDown = (option: T, i: number) => () => {\n handleSelect(option, i)\n resetUI()\n }\n\n const handleMouseEnter = (i: number) => () => {\n set({ cursor: i, interactive: true })\n }\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const {\n currentTarget: { value },\n } = event\n\n dispatch({ type: \"CHANGE\", payload: { query: value } })\n onChange?.(event)\n }\n\n const handleClearOrSubmit = () => {\n if (state.query === \"\") {\n onSubmit?.(state.query)\n return\n }\n\n dispatch({ type: \"CLEAR\" })\n inputRef.current?.focus()\n onClear?.()\n }\n\n // Moves focus to different options when keyboard navigating using up/down\n useEffect(() => {\n const option = optionsWithRefs[index]\n option?.ref?.current?.focus()\n }, [index, optionsWithRefs])\n\n const handleFocusChange = useCallback(\n (focused: boolean) => {\n if (focused || !isDropdownVisible) return\n\n dispatch({ type: \"CLOSE\" })\n reset()\n onClose?.()\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [onClose, isDropdownVisible]\n )\n\n // Handle closing the dropdown when clicking outside of the input\n // or when focus leaves the input completely\n const { ref: containsFocusRef } = useContainsFocus({\n onChange: handleFocusChange,\n })\n\n const handleInputKeydown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n switch (event.key) {\n // Handle <Enter> when nothing is selected\n case \"Enter\":\n if (state.query !== \"\" && index === -1) {\n onSubmit?.(state.query)\n resetUI()\n }\n return\n\n // <Esc> to close dropdown\n case \"Escape\":\n event.preventDefault()\n event.stopPropagation()\n\n dispatch({ type: \"CLOSE\" })\n inputRef.current?.blur()\n\n return\n\n default:\n break\n }\n\n onKeyDown?.(event)\n }\n\n // Moves focus back to input when typing\n const handleContainerKeydown = (\n event: React.KeyboardEvent<HTMLDivElement>\n ) => {\n switch (event.key) {\n case \"Alt\":\n case \"ArrowDown\":\n case \"ArrowUp\":\n case \"Control\":\n case \"Enter\":\n case \"Meta\":\n case \"Shift\":\n case \"Tab\":\n // Ignore\n return\n\n case \"Escape\":\n event.preventDefault()\n event.stopPropagation()\n\n dispatch({ type: \"CLOSE\" })\n inputRef.current?.blur()\n reset()\n\n return\n\n default:\n inputRef.current?.focus()\n }\n }\n\n // Option that is being hovered or keyed into\n const staged = options[index]\n\n const getMaxHeight = () => {\n /* 308 = Roughly, 5.5 default sized options */\n if (!maxHeight) return \"308px\"\n\n const value = typeof maxHeight === \"number\" ? `${maxHeight}px` : maxHeight\n\n const headerAndFooterHeight =\n (headerRef?.current?.clientHeight ?? 0) +\n (footerRef?.current?.clientHeight ?? 0)\n\n return `calc(${value} - ${headerAndFooterHeight}px)`\n }\n\n const inputOptionsMaxHeight = getMaxHeight()\n\n return (\n <Box\n ref={composeRefs(containerRef, containsFocusRef) as any}\n onKeyDown={handleContainerKeydown}\n {...boxProps}\n >\n <LabeledInput\n ref={composeRefs(inputRef, anchorRef) as any}\n role=\"combobox\"\n aria-expanded={isDropdownVisible}\n aria-autocomplete=\"list\"\n {...(id ? { id, \"aria-describedby\": `${id}__assistiveHint` } : {})}\n label={\n loading ? (\n <Box width={18}>\n <Spinner size=\"small\" />\n </Box>\n ) : state.query ? (\n <Clickable\n onClick={handleClearOrSubmit}\n height=\"100%\"\n display=\"flex\"\n alignItems=\"center\"\n aria-label=\"Clear input\"\n >\n <CloseIcon fill=\"black60\" aria-hidden />\n </Clickable>\n ) : (\n <SearchIcon fill=\"black60\" aria-hidden />\n )\n }\n value={staged?.text ?? state.query}\n onChange={handleChange}\n onFocus={handleFocus}\n onKeyDown={handleInputKeydown}\n autoComplete=\"off\"\n height={height}\n {...inputProps}\n />\n\n {isDropdownVisible && (\n <AutocompleteInputDropdown\n ref={tooltipRef as any}\n role=\"listbox\"\n width={width}\n >\n <div ref={headerRef}>{header}</div>\n <AutocompleteInputOptions maxHeight={inputOptionsMaxHeight}>\n {optionsWithRefs.map(({ option, ref }, i) => {\n return (\n <AutocompleteInputOption\n key={i}\n ref={ref}\n role=\"option\"\n aria-selected={i === index}\n aria-posinset={i + 1}\n aria-setsize={options.length}\n onMouseDown={handleMouseDown(option, i)}\n onMouseEnter={handleMouseEnter(i)}\n selected={i === index}\n tabIndex={-1}\n >\n {renderOption(option, i)}\n </AutocompleteInputOption>\n )\n })}\n </AutocompleteInputOptions>\n\n <div ref={footerRef}>{footer}</div>\n </AutocompleteInputDropdown>\n )}\n\n <VisuallyHidden {...(id ? { id: `${id}__assistiveHint` } : {})}>\n When autocomplete results are available use up and down arrows to review\n and enter to select. Touch device users, explore by touch or with swipe\n gestures.\n </VisuallyHidden>\n\n {isDropdownVisible && (\n <VisuallyHidden role=\"status\" aria-atomic=\"true\" aria-live=\"polite\">\n {options.length === 1\n ? `1 result is available`\n : `${options.length} results are available`}\n </VisuallyHidden>\n )}\n </Box>\n )\n}\n\nconst AutocompleteInputDropdown = styled(Box)`\n box-shadow: ${DROP_SHADOW};\n z-index: 1;\n`\n\nconst AutocompleteInputOptions = styled(Box)`\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n`\n"],"file":"AutocompleteInput.js"}
|
|
@@ -141,6 +141,28 @@ var Default = function Default() {
|
|
|
141
141
|
}, /*#__PURE__*/_react.default.createElement(_Text.Text, {
|
|
142
142
|
variant: "xs"
|
|
143
143
|
}, "Footer"))
|
|
144
|
+
}, {
|
|
145
|
+
options: [].concat(OPTIONS, _toConsumableArray(OPTIONS.map(function (option) {
|
|
146
|
+
return _objectSpread(_objectSpread({}, option), {}, {
|
|
147
|
+
text: "Another ".concat(option.text),
|
|
148
|
+
value: "another-".concat(option.value)
|
|
149
|
+
});
|
|
150
|
+
}))),
|
|
151
|
+
header: /*#__PURE__*/_react.default.createElement(_Box.Box, {
|
|
152
|
+
px: 2,
|
|
153
|
+
py: 1,
|
|
154
|
+
bg: "black10"
|
|
155
|
+
}, /*#__PURE__*/_react.default.createElement(_Text.Text, {
|
|
156
|
+
variant: "xs"
|
|
157
|
+
}, "Header")),
|
|
158
|
+
footer: /*#__PURE__*/_react.default.createElement(_Box.Box, {
|
|
159
|
+
px: 2,
|
|
160
|
+
py: 1,
|
|
161
|
+
bg: "black10"
|
|
162
|
+
}, /*#__PURE__*/_react.default.createElement(_Text.Text, {
|
|
163
|
+
variant: "xs"
|
|
164
|
+
}, "Footer")),
|
|
165
|
+
maxHeight: "700px"
|
|
144
166
|
}]
|
|
145
167
|
}, /*#__PURE__*/_react.default.createElement(_AutocompleteInput.AutocompleteInput, {
|
|
146
168
|
placeholder: "Search",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/AutocompleteInput/AutocompleteInput.story.tsx"],"names":["title","OPTIONS","text","value","subtitle","Default","loading","options","height","map","option","renderOption","footer","header","Demo","query","setQuery","handleChange","event","target","i","displayQuery","borderBottom","borderColor"],"mappings":"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
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/AutocompleteInput/AutocompleteInput.story.tsx"],"names":["title","OPTIONS","text","value","subtitle","Default","loading","options","height","map","option","renderOption","footer","header","maxHeight","Demo","query","setQuery","handleChange","event","target","i","displayQuery","borderBottom","borderColor"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eAEe;AACbA,EAAAA,KAAK,EAAE;AADM,C;;AAIf,IAAMC,OAAO,GAAG,CACd;AACEC,EAAAA,IAAI,EAAE,UADR;AAEEC,EAAAA,KAAK,EAAE,UAFT;AAGEC,EAAAA,QAAQ,EAAE;AAHZ,CADc,EAMd;AAAEF,EAAAA,IAAI,EAAE,OAAR;AAAiBC,EAAAA,KAAK,EAAE,OAAxB;AAAiCC,EAAAA,QAAQ,EAAE;AAA3C,CANc,EAOd;AAAEF,EAAAA,IAAI,EAAE,WAAR;AAAqBC,EAAAA,KAAK,EAAE,WAA5B;AAAyCC,EAAAA,QAAQ,EAAE;AAAnD,CAPc,EAQd;AACEF,EAAAA,IAAI,EAAE,aADR;AAEEC,EAAAA,KAAK,EAAE,aAFT;AAGEC,EAAAA,QAAQ,EAAE;AAHZ,CARc,EAad;AACEF,EAAAA,IAAI,EAAE,aADR;AAEEC,EAAAA,KAAK,EAAE,aAFT;AAGEC,EAAAA,QAAQ,EAAE;AAHZ,CAbc,CAAhB;;AAoBO,IAAMC,OAAO,GAAG,SAAVA,OAAU,GAAM;AAC3B,sBACE,6BAAC,uBAAD;AACE,IAAA,MAAM,EAAE,CACN,EADM,EAEN;AAAEC,MAAAA,OAAO,EAAE;AAAX,KAFM,EAGN;AAAEC,MAAAA,OAAO,EAAE,EAAX;AAAeC,MAAAA,MAAM,EAAE;AAAvB,KAHM,EAIN;AACED,MAAAA,OAAO,YACFN,OADE,qBAEFA,OAAO,CAACQ,GAAR,CAAY,UAACC,MAAD;AAAA,+CACVA,MADU;AAEbR,UAAAA,IAAI,oBAAaQ,MAAM,CAACR,IAApB,CAFS;AAGbC,UAAAA,KAAK,oBAAaO,MAAM,CAACP,KAApB;AAHQ;AAAA,OAAZ,CAFE,EADT;AASEQ,MAAAA,YAAY,EAAE,sBAACD,MAAD;AAAA,4BACZ,6BAAC,QAAD;AAAK,UAAA,EAAE,EAAE,CAAT;AAAY,UAAA,EAAE,EAAE;AAAhB,wBACE,6BAAC,UAAD;AAAM,UAAA,OAAO,EAAC;AAAd,WAA4BA,MAAM,CAACR,IAAnC,CADF,eAEE,6BAAC,UAAD;AAAM,UAAA,OAAO,EAAC,IAAd;AAAmB,UAAA,KAAK,EAAC;AAAzB,WACGQ,MAAM,CAACN,QADV,CAFF,CADY;AAAA;AAThB,KAJM,EAsBN;AACEG,MAAAA,OAAO,YACFN,OADE,qBAEFA,OAAO,CAACQ,GAAR,CAAY,UAACC,MAAD;AAAA,+CACVA,MADU;AAEbR,UAAAA,IAAI,oBAAaQ,MAAM,CAACR,IAApB,CAFS;AAGbC,UAAAA,KAAK,oBAAaO,MAAM,CAACP,KAApB;AAHQ;AAAA,OAAZ,CAFE,EADT;AASES,MAAAA,MAAM,eACJ,6BAAC,QAAD;AAAK,QAAA,EAAE,EAAE,CAAT;AAAY,QAAA,EAAE,EAAE,CAAhB;AAAmB,QAAA,EAAE,EAAC;AAAtB,sBACE,6BAAC,UAAD;AAAM,QAAA,OAAO,EAAC;AAAd,kBADF;AAVJ,KAtBM,EAqCN;AACEL,MAAAA,OAAO,EAAE,CAACN,OAAO,CAAC,CAAD,CAAR,EAAaA,OAAO,CAAC,CAAD,CAApB,CADX;AAEEW,MAAAA,MAAM,eACJ,6BAAC,QAAD;AAAK,QAAA,EAAE,EAAE,CAAT;AAAY,QAAA,EAAE,EAAE,CAAhB;AAAmB,QAAA,EAAE,EAAC;AAAtB,sBACE,6BAAC,UAAD;AAAM,QAAA,OAAO,EAAC;AAAd,kBADF;AAHJ,KArCM,EA6CN;AACEL,MAAAA,OAAO,EAAE,CAACN,OAAO,CAAC,CAAD,CAAR,EAAaA,OAAO,CAAC,CAAD,CAApB,CADX;AAEEY,MAAAA,MAAM,eACJ,6BAAC,QAAD;AAAK,QAAA,EAAE,EAAE,CAAT;AAAY,QAAA,EAAE,EAAE,CAAhB;AAAmB,QAAA,EAAE,EAAC;AAAtB,sBACE,6BAAC,UAAD;AAAM,QAAA,OAAO,EAAC;AAAd,kBADF,CAHJ;AAOED,MAAAA,MAAM,eACJ,6BAAC,QAAD;AAAK,QAAA,EAAE,EAAE,CAAT;AAAY,QAAA,EAAE,EAAE,CAAhB;AAAmB,QAAA,EAAE,EAAC;AAAtB,sBACE,6BAAC,UAAD;AAAM,QAAA,OAAO,EAAC;AAAd,kBADF;AARJ,KA7CM,EA0DN;AACEL,MAAAA,OAAO,YACFN,OADE,qBAEFA,OAAO,CAACQ,GAAR,CAAY,UAACC,MAAD;AAAA,+CACVA,MADU;AAEbR,UAAAA,IAAI,oBAAaQ,MAAM,CAACR,IAApB,CAFS;AAGbC,UAAAA,KAAK,oBAAaO,MAAM,CAACP,KAApB;AAHQ;AAAA,OAAZ,CAFE,EADT;AASEU,MAAAA,MAAM,eACJ,6BAAC,QAAD;AAAK,QAAA,EAAE,EAAE,CAAT;AAAY,QAAA,EAAE,EAAE,CAAhB;AAAmB,QAAA,EAAE,EAAC;AAAtB,sBACE,6BAAC,UAAD;AAAM,QAAA,OAAO,EAAC;AAAd,kBADF,CAVJ;AAcED,MAAAA,MAAM,eACJ,6BAAC,QAAD;AAAK,QAAA,EAAE,EAAE,CAAT;AAAY,QAAA,EAAE,EAAE,CAAhB;AAAmB,QAAA,EAAE,EAAC;AAAtB,sBACE,6BAAC,UAAD;AAAM,QAAA,OAAO,EAAC;AAAd,kBADF,CAfJ;AAmBEE,MAAAA,SAAS,EAAE;AAnBb,KA1DM;AADV,kBAkFE,6BAAC,oCAAD;AACE,IAAA,WAAW,EAAC,QADd;AAEE,IAAA,OAAO,EAAEb,OAFX;AAGE,IAAA,QAAQ,EAAE,0BAAO,UAAP,CAHZ;AAIE,IAAA,QAAQ,EAAE,0BAAO,UAAP,CAJZ;AAKE,IAAA,OAAO,EAAE,0BAAO,SAAP;AALX,IAlFF,CADF;AA4FD,CA7FM;;;AAAMI,O;;AA+FN,IAAMU,IAAI,GAAG,SAAPA,IAAO,GAAM;AACxB,kBAA0B,qBAAS,EAAT,CAA1B;AAAA;AAAA,MAAOC,KAAP;AAAA,MAAcC,QAAd;;AAEA,MAAMC,YAAY,GAAG,SAAfA,YAAe,CAACC,KAAD,EAAgD;AACnEF,IAAAA,QAAQ,CAACE,KAAK,CAACC,MAAN,CAAajB,KAAd,CAAR;AACD,GAFD;;AAIA,sBACE,6BAAC,oCAAD;AACE,IAAA,WAAW,EAAC,iBADd;AAEE,IAAA,OAAO,+BAAOa,KAAK,GAAG,CAAC;AAAEd,MAAAA,IAAI,EAAEc,KAAR;AAAeb,MAAAA,KAAK,EAAEa;AAAtB,KAAD,CAAH,GAAqC,EAAjD,GAAyDf,OAAzD,CAFT;AAGE,IAAA,QAAQ,EAAEiB,YAHZ;AAIE,IAAA,QAAQ,EAAE,0BAAO,UAAP,CAJZ;AAKE,IAAA,QAAQ,EAAE,0BAAO,UAAP,CALZ;AAME,IAAA,OAAO,EAAE,0BAAO,SAAP,CANX;AAOE,IAAA,YAAY,EAAE,sBAACR,MAAD,EAASW,CAAT,EAAe;AAC3B,UAAMC,YAAY,GAAGD,CAAC,KAAK,CAAN,IAAWL,KAAK,KAAK,EAA1C;AAEA,0BACE,6BAAC,QAAD;AACE,QAAA,EAAE,EAAE,CADN;AAEE,QAAA,EAAE,EAAE;AAFN,SAGOM,YAAY,GACb;AAAEC,QAAAA,YAAY,EAAE,WAAhB;AAA6BC,QAAAA,WAAW,EAAE;AAA1C,OADa,GAEb,EALN,gBAOE,6BAAC,UAAD;AAAM,QAAA,OAAO,EAAC;AAAd,SACGF,YAAY,wCACgBZ,MAAM,CAACR,IADvB,cAETQ,MAAM,CAACR,IAHb,CAPF,EAaG,cAAcQ,MAAd,iBACC,6BAAC,UAAD;AAAM,QAAA,OAAO,EAAC,IAAd;AAAmB,QAAA,KAAK,EAAC;AAAzB,SACGA,MAAM,CAACN,QADV,CAdJ,CADF;AAqBD;AA/BH,IADF;AAmCD,CA1CM;;;AAAMW,I","sourcesContent":["import { action } from \"@storybook/addon-actions\"\nimport React, { useState } from \"react\"\nimport { States } from \"storybook-states\"\nimport { Box } from \"../Box\"\nimport { Text } from \"../Text\"\nimport { AutocompleteInput, AutocompleteInputProps } from \"./AutocompleteInput\"\n\nexport default {\n title: \"Components/AutocompleteInput\",\n}\n\nconst OPTIONS = [\n {\n text: \"Painting\",\n value: \"painting\",\n subtitle: \"An example subtitle\",\n },\n { text: \"Print\", value: \"print\", subtitle: \"An example subtitle\" },\n { text: \"Sculpture\", value: \"sculpture\", subtitle: \"An example subtitle\" },\n {\n text: \"Photography\",\n value: \"photography\",\n subtitle: \"An example subtitle\",\n },\n {\n text: \"Mixed Media\",\n value: \"mixed-media\",\n subtitle: \"An example subtitle\",\n },\n]\n\nexport const Default = () => {\n return (\n <States<Partial<AutocompleteInputProps<typeof OPTIONS[number]>>>\n states={[\n {},\n { loading: true },\n { options: [], height: 40 },\n {\n options: [\n ...OPTIONS,\n ...OPTIONS.map((option) => ({\n ...option,\n text: `Another ${option.text}`,\n value: `another-${option.value}`,\n })),\n ],\n renderOption: (option) => (\n <Box px={2} py={1}>\n <Text variant=\"sm-display\">{option.text}</Text>\n <Text variant=\"xs\" color=\"black60\">\n {option.subtitle}\n </Text>\n </Box>\n ),\n },\n {\n options: [\n ...OPTIONS,\n ...OPTIONS.map((option) => ({\n ...option,\n text: `Another ${option.text}`,\n value: `another-${option.value}`,\n })),\n ],\n footer: (\n <Box px={2} py={1} bg=\"black10\">\n <Text variant=\"xs\">Footer</Text>\n </Box>\n ),\n },\n {\n options: [OPTIONS[0], OPTIONS[1]],\n footer: (\n <Box px={2} py={1} bg=\"black10\">\n <Text variant=\"xs\">Footer</Text>\n </Box>\n ),\n },\n {\n options: [OPTIONS[0], OPTIONS[1]],\n header: (\n <Box px={2} py={1} bg=\"black10\">\n <Text variant=\"xs\">Header</Text>\n </Box>\n ),\n footer: (\n <Box px={2} py={1} bg=\"black10\">\n <Text variant=\"xs\">Footer</Text>\n </Box>\n ),\n },\n {\n options: [\n ...OPTIONS,\n ...OPTIONS.map((option) => ({\n ...option,\n text: `Another ${option.text}`,\n value: `another-${option.value}`,\n })),\n ],\n header: (\n <Box px={2} py={1} bg=\"black10\">\n <Text variant=\"xs\">Header</Text>\n </Box>\n ),\n footer: (\n <Box px={2} py={1} bg=\"black10\">\n <Text variant=\"xs\">Footer</Text>\n </Box>\n ),\n maxHeight: \"700px\",\n },\n ]}\n >\n <AutocompleteInput\n placeholder=\"Search\"\n options={OPTIONS}\n onSelect={action(\"onSelect\")}\n onSubmit={action(\"onSubmit\")}\n onClose={action(\"onClose\")}\n />\n </States>\n )\n}\n\nexport const Demo = () => {\n const [query, setQuery] = useState(\"\")\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n setQuery(event.target.value)\n }\n\n return (\n <AutocompleteInput\n placeholder=\"Begin typing...\"\n options={[...(query ? [{ text: query, value: query }] : []), ...OPTIONS]}\n onChange={handleChange}\n onSelect={action(\"onSelect\")}\n onSubmit={action(\"onSubmit\")}\n onClose={action(\"onClose\")}\n renderOption={(option, i) => {\n const displayQuery = i === 0 && query !== \"\"\n\n return (\n <Box\n px={2}\n py={1}\n {...(displayQuery\n ? { borderBottom: \"1px solid\", borderColor: \"black10\" }\n : {})}\n >\n <Text variant=\"sm-display\">\n {displayQuery\n ? `See full results for “${option.text}”`\n : option.text}\n </Text>\n\n {\"subtitle\" in option && (\n <Text variant=\"xs\" color=\"black60\">\n {option.subtitle}\n </Text>\n )}\n </Box>\n )\n }}\n />\n )\n}\n"],"file":"AutocompleteInput.story.js"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@artsy/palette",
|
|
3
|
-
"version": "31.
|
|
3
|
+
"version": "31.7.0",
|
|
4
4
|
"description": "Design system library for react components",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"publishConfig": {
|
|
@@ -180,5 +180,5 @@
|
|
|
180
180
|
"url": "http://localhost"
|
|
181
181
|
}
|
|
182
182
|
},
|
|
183
|
-
"gitHead": "
|
|
183
|
+
"gitHead": "f8542b28220f26e30fdfad0a8c0fe8d690d7f26c"
|
|
184
184
|
}
|