UNPKG

@atlaskit/atlassian-navigation

Version:

A horizontal navigation component for Atlassian apps.

184 lines (182 loc) 6.79 kB
import _extends from "@babel/runtime/helpers/extends"; /** * @jsxRuntime classic * @jsx jsx */ import React, { Fragment } from 'react'; // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766 import { css, jsx } from '@emotion/react'; import SearchIcon from '@atlaskit/icon/core/search'; import { CREATE_BREAKPOINT, varSearchBackgroundColor, varSearchBorderColor, varSearchColor, varSearchFocusBorderColor, varSearchHoverBackgroundColor } from '../../common/constants'; import { useTheme } from '../../theme'; import { stripEmptyProperties } from '../../utils'; import { IconButton } from '../IconButton'; const searchInputContainerStyles = css({ position: 'relative', marginInlineEnd: "var(--ds-space-100, 8px)", marginInlineStart: "var(--ds-space-250, 20px)", // eslint-disable-next-line @atlaskit/design-system/no-nested-styles, @atlaskit/ui-styling-standard/no-unsafe-values, @atlaskit/ui-styling-standard/no-imported-style-values -- Ignored via go/DSP-18766 [`@media (max-width: ${CREATE_BREAKPOINT - 1}px)`]: { // eslint-disable-next-line @atlaskit/ui-styling-standard/no-important-styles -- Ignored via go/DSP-18766 display: 'none !important' } }); const searchInputIconStyles = css({ width: '20px', height: '20px', position: 'absolute', insetBlockStart: '5px', insetInlineStart: '10px', pointerEvents: 'none' }); const newSearchBorderStyles = css({ border: `${"var(--ds-border-width, 1px)"} solid`, '&:focus': { // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-unsafe-values -- Ignored via go/DSP-18766 boxShadow: `inset 0 0 0 ${"var(--ds-border-width, 1px)"} var(${varSearchFocusBorderColor})` } }); const searchInputStyles = css({ boxSizing: 'border-box', width: '220px', height: "var(--ds-space-400, 32px)", padding: `0 ${"var(--ds-space-100, 8px)"} 0 ${"var(--ds-space-500, 40px)"}`, // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-unsafe-values -- Ignored via go/DSP-18766 backgroundColor: `var(${varSearchBackgroundColor})`, border: '2px solid', // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-unsafe-values -- Ignored via go/DSP-18766 borderColor: `var(${varSearchBorderColor})`, borderRadius: "var(--ds-radius-large, 6px)", // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-unsafe-values -- Ignored via go/DSP-18766 color: `var(${varSearchColor})`, font: "var(--ds-font-body, normal 400 14px/20px \"Atlassian Sans\", ui-sans-serif, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Ubuntu, \"Helvetica Neue\", sans-serif)", outline: 'none', // eslint-disable-next-line @atlaskit/ui-styling-standard/no-unsafe-selectors -- Ignored via go/DSP-18766 '::placeholder': { color: 'inherit' }, '&:focus': { // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-unsafe-values -- Ignored via go/DSP-18766 borderColor: `var(${varSearchFocusBorderColor})` }, '&:hover': { // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-unsafe-values -- Ignored via go/DSP-18766 backgroundColor: `var(${varSearchHoverBackgroundColor})` } }); const searchIconStyles = css({ // eslint-disable-next-line @atlaskit/design-system/no-nested-styles, @atlaskit/ui-styling-standard/no-unsafe-values, @atlaskit/ui-styling-standard/no-imported-style-values -- Ignored via go/DSP-18766 [`@media (min-width: ${CREATE_BREAKPOINT}px)`]: { // eslint-disable-next-line @atlaskit/ui-styling-standard/no-important-styles -- Ignored via go/DSP-18766 display: 'none !important' } }); const SearchComponent = props => { const { onClick, placeholder, label, value } = props; const theme = useTheme(); const search = theme.mode.search; const onChange = (...args) => { // @ts-expect-error onClick && onClick(...args); }; const onInputClick = (...args) => { // @ts-expect-error onClick && onClick(...args); }; const searchInputDynamicStyles = stripEmptyProperties({ [varSearchBackgroundColor]: search.default.backgroundColor, [varSearchColor]: search.default.color, [varSearchBorderColor]: search.default.borderColor, [varSearchFocusBorderColor]: search.focus.borderColor, [varSearchHoverBackgroundColor]: search.hover.backgroundColor }); return jsx("div", { css: searchInputContainerStyles, role: "search" }, jsx("div", { css: searchInputIconStyles }, jsx(SearchIcon, { color: "currentColor", spacing: "spacious", label: "" })), jsx("input", { // eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop -- Ignored via go/DSP-18766 style: searchInputDynamicStyles, css: [searchInputStyles, newSearchBorderStyles], "aria-label": label, placeholder: placeholder, onChange: onChange, onClick: onInputClick, value: value })); }; /** * __Search__ * * A search input that can be passed into `AtlassianNavigation`'s `renderSearch` prop. * * - [Examples](https://atlassian.design/components/atlassian-navigation/examples#search) * - [Code](https://atlassian.design/components/atlassian-navigation/code) * * @deprecated `@atlaskit/atlassian-navigation` is deprecated. Use `@atlaskit/navigation-system` instead. */ export const Search = props => { const { component, href, id, isDisabled, isSelected, label, onBlur, onClick, onFocus, onMouseDown, onMouseEnter, onMouseLeave, onMouseUp, placeholder, target, testId, tooltip, value, ...rest } = props; return jsx(Fragment, null, jsx(SearchComponent, { onClick: onClick, placeholder: placeholder, label: label, value: value || '' }), jsx(IconButton, _extends({ component: component // @ts-ignore Overriding styles is not supported. , css: searchIconStyles, href: href, icon: jsx(SearchIcon, { color: "currentColor", spacing: "spacious", label: label }), id: id, isDisabled: isDisabled, isSelected: isSelected, onBlur: onBlur, onClick: onClick, onFocus: onFocus, onMouseDown: onMouseDown, onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave, onMouseUp: onMouseUp, target: target, testId: testId, tooltip: tooltip // Made all explicit, this is left just in case // eslint-disable-next-line @repo/internal/react/no-unsafe-spread-props }, rest))); };