@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.
@@ -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
- }, header, /*#__PURE__*/_react.default.createElement(AutocompleteInputOptions, null, optionsWithRefs.map(function (_ref3, i) {
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
- })), footer), /*#__PURE__*/_react.default.createElement(_VisuallyHidden.VisuallyHidden, id ? {
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
- })(["max-height:308px;overflow-y:auto;-webkit-overflow-scrolling:touch;"]);
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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","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 >\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"}
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":"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","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.6.2",
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": "bd4b69eb8dbdc94bb80a9341c6d63f3db347a89d"
183
+ "gitHead": "f8542b28220f26e30fdfad0a8c0fe8d690d7f26c"
184
184
  }