@salutejs/plasma-new-hope 0.141.0-canary.1421.10719019658.0 → 0.141.0-canary.1422.10737462879.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (137) hide show
  1. package/cjs/components/Combobox/ComboboxNew/Combobox.js +6 -4
  2. package/cjs/components/Combobox/ComboboxNew/Combobox.js.map +1 -1
  3. package/cjs/components/Combobox/ComboboxOld/Combobox.js +15 -8
  4. package/cjs/components/Combobox/ComboboxOld/Combobox.js.map +1 -1
  5. package/cjs/components/TextArea/TextArea.js +1 -2
  6. package/cjs/components/TextArea/TextArea.js.map +1 -1
  7. package/cjs/components/TextField/TextField.js +12 -7
  8. package/cjs/components/TextField/TextField.js.map +1 -1
  9. package/emotion/cjs/components/Combobox/Combobox.template-doc.mdx +344 -0
  10. package/emotion/cjs/components/Combobox/ComboboxNew/Combobox.js +6 -4
  11. package/emotion/cjs/components/Combobox/ComboboxOld/Combobox.js +15 -8
  12. package/emotion/cjs/components/TextArea/TextArea.js +2 -3
  13. package/emotion/cjs/components/TextField/TextField.js +13 -8
  14. package/emotion/cjs/examples/plasma_b2c/components/Combobox/Combobox.config.js +39 -0
  15. package/{styled-components/cjs/examples/plasma_b2c/components/Combobox/ComboboxNew → emotion/cjs/examples/plasma_b2c/components/Combobox}/Combobox.js +2 -2
  16. package/emotion/{es/examples/plasma_b2c/components/Combobox/ComboboxNew → cjs/examples/plasma_b2c/components/Combobox}/Combobox.stories.tsx +5 -3
  17. package/emotion/cjs/examples/plasma_b2c/components/Combobox/Legacy/Combobox.config.js +25 -0
  18. package/emotion/cjs/examples/plasma_b2c/components/Combobox/{ComboboxOld → Legacy}/Combobox.stories.tsx +18 -16
  19. package/emotion/cjs/examples/plasma_web/components/Combobox/Combobox.config.js +39 -0
  20. package/emotion/cjs/examples/{plasma_b2c/components/Combobox/ComboboxNew → plasma_web/components/Combobox}/Combobox.js +2 -2
  21. package/emotion/cjs/examples/plasma_web/components/Combobox/{ComboboxNew/Combobox.stories.tsx → Combobox.stories.tsx} +5 -3
  22. package/emotion/cjs/examples/plasma_web/components/Combobox/Legacy/Combobox.config.js +25 -0
  23. package/emotion/{es/examples/plasma_b2c/components/Combobox/ComboboxOld → cjs/examples/plasma_web/components/Combobox/Legacy}/Combobox.stories.tsx +18 -16
  24. package/emotion/es/components/Combobox/Combobox.template-doc.mdx +344 -0
  25. package/emotion/es/components/Combobox/ComboboxNew/Combobox.js +6 -4
  26. package/emotion/es/components/Combobox/ComboboxOld/Combobox.js +15 -8
  27. package/emotion/es/components/TextArea/TextArea.js +2 -3
  28. package/emotion/es/components/TextField/TextField.js +13 -8
  29. package/emotion/es/examples/plasma_b2c/components/Combobox/Combobox.config.js +33 -0
  30. package/emotion/es/examples/plasma_b2c/components/Combobox/{ComboboxNew/Combobox.js → Combobox.js} +2 -2
  31. package/emotion/{cjs/examples/plasma_b2c/components/Combobox/ComboboxNew → es/examples/plasma_b2c/components/Combobox}/Combobox.stories.tsx +5 -3
  32. package/emotion/es/examples/plasma_b2c/components/Combobox/Legacy/Combobox.config.js +19 -0
  33. package/emotion/es/examples/{plasma_web/components/Combobox/ComboboxOld → plasma_b2c/components/Combobox/Legacy}/Combobox.stories.tsx +18 -16
  34. package/emotion/es/examples/plasma_web/components/Combobox/Combobox.config.js +33 -0
  35. package/emotion/es/examples/plasma_web/components/Combobox/{ComboboxNew/Combobox.js → Combobox.js} +2 -2
  36. package/emotion/es/examples/plasma_web/components/Combobox/{ComboboxNew/Combobox.stories.tsx → Combobox.stories.tsx} +5 -3
  37. package/emotion/es/examples/plasma_web/components/Combobox/Legacy/Combobox.config.js +19 -0
  38. package/emotion/{cjs/examples/plasma_web/components/Combobox/ComboboxOld → es/examples/plasma_web/components/Combobox/Legacy}/Combobox.stories.tsx +18 -16
  39. package/es/components/Combobox/ComboboxNew/Combobox.js +6 -4
  40. package/es/components/Combobox/ComboboxNew/Combobox.js.map +1 -1
  41. package/es/components/Combobox/ComboboxOld/Combobox.js +15 -8
  42. package/es/components/Combobox/ComboboxOld/Combobox.js.map +1 -1
  43. package/es/components/TextArea/TextArea.js +1 -2
  44. package/es/components/TextArea/TextArea.js.map +1 -1
  45. package/es/components/TextField/TextField.js +12 -7
  46. package/es/components/TextField/TextField.js.map +1 -1
  47. package/package.json +4 -5
  48. package/styled-components/cjs/components/Combobox/Combobox.template-doc.mdx +344 -0
  49. package/styled-components/cjs/components/Combobox/ComboboxNew/Combobox.js +6 -4
  50. package/styled-components/cjs/components/Combobox/ComboboxOld/Combobox.js +15 -8
  51. package/styled-components/cjs/components/TextArea/TextArea.js +1 -2
  52. package/styled-components/cjs/components/TextField/TextField.js +12 -7
  53. package/styled-components/cjs/examples/plasma_b2c/components/Combobox/Combobox.config.js +39 -0
  54. package/{emotion/cjs/examples/plasma_web/components/Combobox/ComboboxNew → styled-components/cjs/examples/plasma_b2c/components/Combobox}/Combobox.js +2 -2
  55. package/styled-components/cjs/examples/plasma_b2c/components/Combobox/Combobox.stories.tsx +368 -0
  56. package/styled-components/cjs/examples/plasma_b2c/components/Combobox/{ComboboxOld → Legacy}/Combobox.config.js +1 -1
  57. package/styled-components/cjs/examples/plasma_b2c/components/Combobox/Legacy/Combobox.stories.tsx +256 -0
  58. package/styled-components/cjs/examples/{plasma_b2c/components/Combobox/ComboboxNew → plasma_web/components/Combobox}/Combobox.config.js +1 -1
  59. package/styled-components/cjs/examples/plasma_web/components/Combobox/{ComboboxNew/Combobox.js → Combobox.js} +2 -2
  60. package/styled-components/cjs/examples/plasma_web/components/Combobox/Combobox.stories.tsx +368 -0
  61. package/styled-components/cjs/examples/plasma_web/components/Combobox/{ComboboxOld → Legacy}/Combobox.config.js +1 -1
  62. package/styled-components/cjs/examples/plasma_web/components/Combobox/Legacy/Combobox.stories.tsx +256 -0
  63. package/styled-components/es/components/Combobox/Combobox.template-doc.mdx +344 -0
  64. package/styled-components/es/components/Combobox/ComboboxNew/Combobox.js +6 -4
  65. package/styled-components/es/components/Combobox/ComboboxOld/Combobox.js +15 -8
  66. package/styled-components/es/components/TextArea/TextArea.js +1 -2
  67. package/styled-components/es/components/TextField/TextField.js +12 -7
  68. package/styled-components/es/examples/plasma_b2c/components/Combobox/Combobox.config.js +33 -0
  69. package/styled-components/es/examples/plasma_b2c/components/Combobox/{ComboboxNew/Combobox.js → Combobox.js} +2 -2
  70. package/styled-components/es/examples/plasma_b2c/components/Combobox/Combobox.stories.tsx +368 -0
  71. package/styled-components/es/examples/plasma_b2c/components/Combobox/{ComboboxOld → Legacy}/Combobox.config.js +1 -1
  72. package/styled-components/es/examples/plasma_b2c/components/Combobox/Legacy/Combobox.stories.tsx +256 -0
  73. package/styled-components/es/examples/plasma_web/components/Combobox/{ComboboxNew/Combobox.config.js → Combobox.config.js} +1 -1
  74. package/styled-components/es/examples/plasma_web/components/Combobox/{ComboboxNew/Combobox.js → Combobox.js} +2 -2
  75. package/styled-components/es/examples/plasma_web/components/Combobox/Combobox.stories.tsx +368 -0
  76. package/styled-components/es/examples/plasma_web/components/Combobox/{ComboboxOld → Legacy}/Combobox.config.js +1 -1
  77. package/styled-components/es/examples/plasma_web/components/Combobox/Legacy/Combobox.stories.tsx +256 -0
  78. package/types/components/Combobox/ComboboxNew/Combobox.d.ts.map +1 -1
  79. package/types/components/Combobox/ComboboxNew/Combobox.types.d.ts +7 -1
  80. package/types/components/Combobox/ComboboxNew/Combobox.types.d.ts.map +1 -1
  81. package/types/components/Combobox/ComboboxOld/Combobox.d.ts.map +1 -1
  82. package/types/components/Combobox/ComboboxOld/Combobox.types.d.ts +6 -0
  83. package/types/components/Combobox/ComboboxOld/Combobox.types.d.ts.map +1 -1
  84. package/types/components/TextArea/TextArea.d.ts.map +1 -1
  85. package/types/components/TextField/TextField.d.ts.map +1 -1
  86. package/types/examples/plasma_b2c/components/Combobox/Combobox.config.d.ts.map +1 -0
  87. package/types/examples/plasma_b2c/components/Combobox/{ComboboxNew/Combobox.d.ts → Combobox.d.ts} +3 -3
  88. package/types/examples/plasma_b2c/components/Combobox/Combobox.d.ts.map +1 -0
  89. package/types/examples/plasma_b2c/components/Combobox/{ComboboxOld → Legacy}/Combobox.config.d.ts.map +1 -1
  90. package/types/examples/plasma_b2c/components/Combobox/Legacy/Combobox.d.ts.map +1 -0
  91. package/types/examples/plasma_web/components/Combobox/Combobox.config.d.ts.map +1 -0
  92. package/types/examples/plasma_web/components/Combobox/{ComboboxNew/Combobox.d.ts → Combobox.d.ts} +3 -3
  93. package/types/examples/plasma_web/components/Combobox/Combobox.d.ts.map +1 -0
  94. package/types/examples/plasma_web/components/Combobox/{ComboboxOld → Legacy}/Combobox.config.d.ts.map +1 -1
  95. package/types/examples/plasma_web/components/Combobox/Legacy/Combobox.d.ts.map +1 -0
  96. package/emotion/cjs/examples/plasma_b2c/components/Combobox/ComboboxNew/Combobox.config.js +0 -39
  97. package/emotion/cjs/examples/plasma_b2c/components/Combobox/ComboboxOld/Combobox.config.js +0 -25
  98. package/emotion/cjs/examples/plasma_b2c/components/Form/Form.stories.tsx +0 -106
  99. package/emotion/cjs/examples/plasma_web/components/Combobox/ComboboxNew/Combobox.config.js +0 -39
  100. package/emotion/cjs/examples/plasma_web/components/Combobox/ComboboxOld/Combobox.config.js +0 -25
  101. package/emotion/es/examples/plasma_b2c/components/Combobox/ComboboxNew/Combobox.config.js +0 -33
  102. package/emotion/es/examples/plasma_b2c/components/Combobox/ComboboxOld/Combobox.config.js +0 -19
  103. package/emotion/es/examples/plasma_b2c/components/Form/Form.stories.tsx +0 -106
  104. package/emotion/es/examples/plasma_web/components/Combobox/ComboboxNew/Combobox.config.js +0 -33
  105. package/emotion/es/examples/plasma_web/components/Combobox/ComboboxOld/Combobox.config.js +0 -19
  106. package/styled-components/cjs/examples/plasma_b2c/components/Combobox/ComboboxNew/Combobox.stories.tsx +0 -366
  107. package/styled-components/cjs/examples/plasma_b2c/components/Combobox/ComboboxOld/Combobox.stories.tsx +0 -254
  108. package/styled-components/cjs/examples/plasma_b2c/components/Form/Form.stories.tsx +0 -106
  109. package/styled-components/cjs/examples/plasma_web/components/Combobox/ComboboxNew/Combobox.config.js +0 -39
  110. package/styled-components/cjs/examples/plasma_web/components/Combobox/ComboboxNew/Combobox.stories.tsx +0 -366
  111. package/styled-components/cjs/examples/plasma_web/components/Combobox/ComboboxOld/Combobox.stories.tsx +0 -254
  112. package/styled-components/es/examples/plasma_b2c/components/Combobox/ComboboxNew/Combobox.config.js +0 -33
  113. package/styled-components/es/examples/plasma_b2c/components/Combobox/ComboboxNew/Combobox.stories.tsx +0 -366
  114. package/styled-components/es/examples/plasma_b2c/components/Combobox/ComboboxOld/Combobox.stories.tsx +0 -254
  115. package/styled-components/es/examples/plasma_b2c/components/Form/Form.stories.tsx +0 -106
  116. package/styled-components/es/examples/plasma_web/components/Combobox/ComboboxNew/Combobox.stories.tsx +0 -366
  117. package/styled-components/es/examples/plasma_web/components/Combobox/ComboboxOld/Combobox.stories.tsx +0 -254
  118. package/types/examples/plasma_b2c/components/Combobox/ComboboxNew/Combobox.config.d.ts.map +0 -1
  119. package/types/examples/plasma_b2c/components/Combobox/ComboboxNew/Combobox.d.ts.map +0 -1
  120. package/types/examples/plasma_b2c/components/Combobox/ComboboxOld/Combobox.d.ts.map +0 -1
  121. package/types/examples/plasma_web/components/Combobox/ComboboxNew/Combobox.config.d.ts.map +0 -1
  122. package/types/examples/plasma_web/components/Combobox/ComboboxNew/Combobox.d.ts.map +0 -1
  123. package/types/examples/plasma_web/components/Combobox/ComboboxOld/Combobox.d.ts.map +0 -1
  124. /package/emotion/cjs/examples/plasma_b2c/components/Combobox/{ComboboxOld → Legacy}/Combobox.js +0 -0
  125. /package/emotion/cjs/examples/plasma_web/components/Combobox/{ComboboxOld → Legacy}/Combobox.js +0 -0
  126. /package/emotion/es/examples/plasma_b2c/components/Combobox/{ComboboxOld → Legacy}/Combobox.js +0 -0
  127. /package/emotion/es/examples/plasma_web/components/Combobox/{ComboboxOld → Legacy}/Combobox.js +0 -0
  128. /package/styled-components/cjs/examples/plasma_b2c/components/Combobox/{ComboboxOld → Legacy}/Combobox.js +0 -0
  129. /package/styled-components/cjs/examples/plasma_web/components/Combobox/{ComboboxOld → Legacy}/Combobox.js +0 -0
  130. /package/styled-components/es/examples/plasma_b2c/components/Combobox/{ComboboxOld → Legacy}/Combobox.js +0 -0
  131. /package/styled-components/es/examples/plasma_web/components/Combobox/{ComboboxOld → Legacy}/Combobox.js +0 -0
  132. /package/types/examples/plasma_b2c/components/Combobox/{ComboboxNew/Combobox.config.d.ts → Combobox.config.d.ts} +0 -0
  133. /package/types/examples/plasma_b2c/components/Combobox/{ComboboxOld → Legacy}/Combobox.config.d.ts +0 -0
  134. /package/types/examples/plasma_b2c/components/Combobox/{ComboboxOld → Legacy}/Combobox.d.ts +0 -0
  135. /package/types/examples/plasma_web/components/Combobox/{ComboboxNew/Combobox.config.d.ts → Combobox.config.d.ts} +0 -0
  136. /package/types/examples/plasma_web/components/Combobox/{ComboboxOld → Legacy}/Combobox.config.d.ts +0 -0
  137. /package/types/examples/plasma_web/components/Combobox/{ComboboxOld → Legacy}/Combobox.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"TextField.js","sources":["../../../src/components/TextField/TextField.tsx"],"sourcesContent":["import React, { forwardRef, useEffect, useRef, useState } from 'react';\nimport type { FormEventHandler, ChangeEventHandler, KeyboardEvent, ChangeEvent } from 'react';\nimport { safeUseId, useForkRef } from '@salutejs/plasma-core';\nimport { css } from '@linaria/core';\n\nimport type { RootProps } from '../../engines';\nimport { cx } from '../../utils';\n\nimport type { ChipValues, TextFieldPrimitiveValue, TextFieldProps } from './TextField.types';\nimport { base as sizeCSS } from './variations/_size/base';\nimport { base as viewCSS } from './variations/_view/base';\nimport { base as disabledCSS } from './variations/_disabled/base';\nimport { base as readOnlyCSS } from './variations/_read-only/base';\nimport { base as labelPlacementCSS } from './variations/_label-placement/base';\nimport {\n Input,\n InputContainer,\n LeftHelper,\n Label,\n InputWrapper,\n InputLabelWrapper,\n StyledContentLeft,\n StyledContentRight,\n StyledChips,\n StyledTextBefore,\n StyledTextAfter,\n StyledIndicator,\n StyledOptionalText,\n InputPlaceholder,\n} from './TextField.styles';\nimport { classes } from './TextField.tokens';\nimport { TextFieldChip } from './ui';\nimport { useKeyNavigation } from './hooks';\n\nconst optionalText = 'optional';\n\nexport const base = css`\n /* NOTE: Webkit не применяет opacity к inline тегам */\n display: block;\n`;\n\nexport const textFieldRoot = (Root: RootProps<HTMLDivElement, TextFieldProps>) =>\n forwardRef<HTMLInputElement, TextFieldProps>(\n (\n {\n id,\n className,\n style,\n\n // layout\n contentLeft,\n contentRight,\n label,\n labelPlacement,\n textBefore,\n textAfter,\n placeholder,\n leftHelper,\n enumerationType = 'plain',\n requiredPlacement = 'right',\n\n // variations\n view,\n size,\n readOnly = false,\n disabled = false,\n required = false,\n optional,\n\n // controlled\n chips: values,\n\n // events\n onChange,\n onChangeChips,\n onSearch,\n onKeyDown,\n\n ...rest\n },\n ref,\n ) => {\n const contentRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const inputForkRef = useForkRef(inputRef, ref);\n const chipsRefs = useRef<Array<HTMLButtonElement>>([]);\n\n const controlledRefs = { contentRef, inputRef, chipsRefs };\n\n const [hasValue, setHasValue] = useState(!!rest.value);\n const [chips, setChips] = useState<Array<ChipValues>>([]);\n\n const uniqId = safeUseId();\n const innerId = id || uniqId;\n const labelId = safeUseId();\n const helperTextId = safeUseId();\n\n const isChipEnumeration = enumerationType === 'chip';\n const isChipsVisible = isChipEnumeration && !!chips?.length;\n const withHasChips = isChipsVisible ? classes.hasChips : undefined;\n\n const hasLabelValue = !!label;\n const hasInnerLabel = size !== 'xs' && labelPlacement === 'inner' && !isChipsVisible && hasLabelValue;\n const hasOuterLabel = labelPlacement === 'outer' && hasLabelValue;\n const hasPlaceholder = !!placeholder && !hasInnerLabel;\n\n const innerLabelValue = hasInnerLabel || hasOuterLabel ? label : undefined;\n const innerLabelPlacementValue = labelPlacement === 'inner' && !hasInnerLabel ? undefined : labelPlacement;\n\n const innerPlaceholderValue = hasPlaceholder ? placeholder : undefined;\n const placeholderShown = !!innerPlaceholderValue && !hasValue;\n\n const requiredPlacementClass = requiredPlacement === 'right' ? 'align-right ' : undefined;\n const labelPlacementClass = innerLabelPlacementValue\n ? classes[`${innerLabelPlacementValue}LabelPlacement` as keyof typeof classes]\n : undefined;\n const hasValueClass = hasValue ? classes.hasValue : undefined;\n\n const wrapperWithoutLeftContent = !contentLeft && isChipsVisible ? classes.hasEmptyContentLeft : undefined;\n const wrapperWithoutRightContent =\n !contentRight && isChipsVisible ? classes.hasEmptyContentRight : undefined;\n\n const handleInput: FormEventHandler<HTMLInputElement> = (event) => {\n setHasValue(!!(event.target as HTMLInputElement).value);\n };\n\n const handleChange: ChangeEventHandler<HTMLInputElement> = (event) => {\n if (disabled || readOnly) {\n return;\n }\n\n const { maxLength, value } = event.target;\n\n if (maxLength !== -1 && value.length > maxLength) {\n return;\n }\n\n onChange?.(event);\n };\n\n const updateChips = (newChips: Array<ChipValues>, newValues: Array<TextFieldPrimitiveValue>) => {\n setChips(newChips);\n onChangeChips?.(newValues);\n };\n\n const { handleInputKeydown, handleChipKeyDown, onChipClear, handleContentKeyDown } = useKeyNavigation({\n controlledRefs,\n disabled,\n readOnly,\n chips,\n enumerationType,\n updateChips,\n onSearch,\n onChange,\n onEnterDisabled: (rest as any).onEnterDisabled,\n });\n\n const onChipClick = (event: React.MouseEvent<HTMLButtonElement>) => event.stopPropagation();\n\n const handleInputFocus = () => {\n if (readOnly || disabled || !inputRef?.current) {\n return;\n }\n\n inputRef.current.scrollTo({\n top: 0,\n left: inputRef.current.offsetLeft,\n behavior: 'smooth',\n });\n\n inputRef.current.focus();\n };\n\n const getRef = (element: HTMLButtonElement | null, index: number) => {\n if (element && chipsRefs?.current) {\n chipsRefs.current[index] = element;\n }\n };\n\n const handleOnKeyDown = (event: ChangeEvent<HTMLInputElement> & KeyboardEvent<HTMLInputElement>) => {\n handleInputKeydown(event);\n onKeyDown && onKeyDown(event);\n };\n\n useEffect(() => {\n if (!isChipEnumeration && !values?.length) {\n return;\n }\n\n const newChips =\n values?.map((value, index) => ({\n id: `${index}_${value}`,\n text: value,\n })) || [];\n\n setChips(newChips);\n }, [isChipEnumeration, values]);\n\n const innerOptional = Boolean(required ? false : optional);\n const hasPlaceholderOptional = innerOptional && !innerLabelValue && !hasOuterLabel;\n const optionalTextNode = innerOptional ? (\n <StyledOptionalText>\n {Boolean(hasPlaceholderOptional ? innerPlaceholderValue : innerLabelValue) && '\\xa0'}\n {optionalText}\n </StyledOptionalText>\n ) : null;\n\n return (\n <Root\n view={view}\n size={size}\n disabled={disabled}\n readOnly={!disabled && readOnly}\n labelPlacement={innerLabelPlacementValue}\n onClick={handleInputFocus}\n className={cx(labelPlacementClass, classes.textFieldGroupItem, className)}\n style={style}\n >\n {hasOuterLabel && (\n <Label id={labelId} htmlFor={id}>\n {required && (\n <StyledIndicator className={cx(classes.outerLabelPlacement, requiredPlacementClass)} />\n )}\n {innerLabelValue}\n {optionalTextNode}\n </Label>\n )}\n <InputWrapper\n // Рефка для внутреннего использования. Не отдается наружу.\n ref={(rest as any).inputWrapperRef}\n className={cx(withHasChips, wrapperWithoutLeftContent, wrapperWithoutRightContent)}\n >\n {!hasOuterLabel && required && (\n <StyledIndicator className={cx(classes.innerLabelPlacement, requiredPlacementClass)} />\n )}\n {contentLeft && <StyledContentLeft>{contentLeft}</StyledContentLeft>}\n <InputLabelWrapper\n tabIndex={-1}\n ref={contentRef}\n onKeyDown={handleContentKeyDown}\n className={withHasChips}\n >\n {textBefore && <StyledTextBefore>{textBefore}</StyledTextBefore>}\n {isChipEnumeration && Boolean(chips?.length) && (\n <StyledChips>\n {chips?.map(({ id: chipId, text }, index) => {\n return (\n <TextFieldChip\n id={chipId}\n ref={(element) => getRef(element, index)}\n key={`${chipId}_${index}`}\n disabled={disabled}\n readOnly={readOnly}\n value={text}\n text={text}\n onKeyDown={(event) => handleChipKeyDown(event, chipId, index)}\n onClear={() => onChipClear(chipId, index)}\n onClick={onChipClick}\n />\n );\n })}\n </StyledChips>\n )}\n <InputContainer>\n <Input\n ref={inputForkRef}\n id={innerId}\n aria-labelledby={labelId}\n aria-describedby={helperTextId}\n placeholder={innerPlaceholderValue}\n className={cx(hasValueClass)}\n disabled={disabled}\n readOnly={!disabled && readOnly}\n onInput={handleInput}\n onChange={handleChange}\n onKeyDown={handleOnKeyDown}\n {...rest}\n />\n {hasInnerLabel && (\n <Label id={labelId} htmlFor={innerId}>\n {innerLabelValue}\n {optionalTextNode}\n </Label>\n )}\n {placeholderShown && (\n <InputPlaceholder>\n {innerPlaceholderValue}\n {hasPlaceholderOptional && optionalTextNode}\n </InputPlaceholder>\n )}\n </InputContainer>\n {textAfter && <StyledTextAfter>{textAfter}</StyledTextAfter>}\n </InputLabelWrapper>\n {contentRight && <StyledContentRight>{contentRight}</StyledContentRight>}\n </InputWrapper>\n {leftHelper && <LeftHelper id={helperTextId}>{leftHelper}</LeftHelper>}\n </Root>\n );\n },\n );\n\nexport const textFieldConfig = {\n name: 'TextField',\n tag: 'div',\n layout: textFieldRoot,\n base,\n variations: {\n view: {\n css: viewCSS,\n },\n size: {\n css: sizeCSS,\n },\n disabled: {\n css: disabledCSS,\n attrs: true,\n },\n readOnly: {\n css: readOnlyCSS,\n attrs: true,\n },\n labelPlacement: {\n css: labelPlacementCSS,\n },\n },\n defaults: {\n size: 'm',\n view: 'default',\n },\n};\n"],"names":["optionalText","base","textFieldRoot","Root","forwardRef","_ref","ref","id","className","style","contentLeft","contentRight","label","labelPlacement","textBefore","textAfter","placeholder","leftHelper","_ref$enumerationType","enumerationType","_ref$requiredPlacemen","requiredPlacement","view","size","_ref$readOnly","readOnly","_ref$disabled","disabled","_ref$required","required","optional","values","chips","onChange","onChangeChips","onSearch","onKeyDown","rest","contentRef","useRef","inputRef","inputForkRef","useForkRef","chipsRefs","controlledRefs","_useState","useState","value","_useState2","_slicedToArray","hasValue","setHasValue","_useState3","_useState4","setChips","uniqId","safeUseId","innerId","labelId","helperTextId","isChipEnumeration","isChipsVisible","length","withHasChips","classes","hasChips","undefined","hasLabelValue","hasInnerLabel","hasOuterLabel","hasPlaceholder","innerLabelValue","innerLabelPlacementValue","innerPlaceholderValue","placeholderShown","requiredPlacementClass","labelPlacementClass","concat","hasValueClass","wrapperWithoutLeftContent","hasEmptyContentLeft","wrapperWithoutRightContent","hasEmptyContentRight","handleInput","event","target","handleChange","_event$target","maxLength","updateChips","newChips","newValues","_useKeyNavigation","useKeyNavigation","onEnterDisabled","handleInputKeydown","handleChipKeyDown","onChipClear","handleContentKeyDown","onChipClick","stopPropagation","handleInputFocus","current","scrollTo","top","left","offsetLeft","behavior","focus","getRef","element","index","handleOnKeyDown","useEffect","map","text","innerOptional","Boolean","hasPlaceholderOptional","optionalTextNode","React","createElement","StyledOptionalText","onClick","cx","textFieldGroupItem","Label","htmlFor","StyledIndicator","outerLabelPlacement","InputWrapper","inputWrapperRef","innerLabelPlacement","StyledContentLeft","InputLabelWrapper","tabIndex","StyledTextBefore","StyledChips","_ref2","chipId","TextFieldChip","key","onClear","InputContainer","Input","_extends","onInput","InputPlaceholder","StyledTextAfter","StyledContentRight","LeftHelper","textFieldConfig","name","tag","layout","variations","css","viewCSS","sizeCSS","disabledCSS","attrs","readOnlyCSS","labelPlacementCSS","defaults"],"mappings":"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"}
1
+ {"version":3,"file":"TextField.js","sources":["../../../src/components/TextField/TextField.tsx"],"sourcesContent":["import React, { forwardRef, useEffect, useRef, useState } from 'react';\nimport type { FormEventHandler, ChangeEventHandler, KeyboardEvent, ChangeEvent } from 'react';\nimport { safeUseId, useForkRef } from '@salutejs/plasma-core';\nimport { css } from '@linaria/core';\n\nimport type { RootProps } from '../../engines';\nimport { cx } from '../../utils';\n\nimport type { ChipValues, TextFieldPrimitiveValue, TextFieldProps } from './TextField.types';\nimport { base as sizeCSS } from './variations/_size/base';\nimport { base as viewCSS } from './variations/_view/base';\nimport { base as disabledCSS } from './variations/_disabled/base';\nimport { base as readOnlyCSS } from './variations/_read-only/base';\nimport { base as labelPlacementCSS } from './variations/_label-placement/base';\nimport {\n Input,\n InputContainer,\n LeftHelper,\n Label,\n InputWrapper,\n InputLabelWrapper,\n StyledContentLeft,\n StyledContentRight,\n StyledChips,\n StyledTextBefore,\n StyledTextAfter,\n StyledIndicator,\n StyledOptionalText,\n InputPlaceholder,\n} from './TextField.styles';\nimport { classes } from './TextField.tokens';\nimport { TextFieldChip } from './ui';\nimport { useKeyNavigation } from './hooks';\n\nconst optionalText = 'optional';\n\nexport const base = css`\n /* NOTE: Webkit не применяет opacity к inline тегам */\n display: block;\n`;\n\nexport const textFieldRoot = (Root: RootProps<HTMLDivElement, TextFieldProps>) =>\n forwardRef<HTMLInputElement, TextFieldProps>(\n (\n {\n id,\n className,\n style,\n\n // layout\n contentLeft,\n contentRight,\n label,\n labelPlacement,\n textBefore,\n textAfter,\n placeholder,\n leftHelper,\n enumerationType = 'plain',\n requiredPlacement = 'right',\n\n // variations\n view,\n size,\n readOnly = false,\n disabled = false,\n required = false,\n optional,\n\n // controlled\n value: outerValue,\n chips: values,\n\n // events\n onChange,\n onChangeChips,\n onSearch,\n onKeyDown,\n\n ...rest\n },\n ref,\n ) => {\n const contentRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const inputForkRef = useForkRef(inputRef, ref);\n const chipsRefs = useRef<Array<HTMLButtonElement>>([]);\n\n const controlledRefs = { contentRef, inputRef, chipsRefs };\n\n const [hasValue, setHasValue] = useState(Boolean(outerValue));\n const [chips, setChips] = useState<Array<ChipValues>>([]);\n\n const uniqId = safeUseId();\n const innerId = id || uniqId;\n const labelId = safeUseId();\n const helperTextId = safeUseId();\n\n const isChipEnumeration = enumerationType === 'chip';\n const isChipsVisible = isChipEnumeration && Boolean(chips?.length);\n const withHasChips = isChipsVisible ? classes.hasChips : undefined;\n\n const hasLabelValue = Boolean(label);\n const hasInnerLabel = size !== 'xs' && labelPlacement === 'inner' && !isChipsVisible && hasLabelValue;\n const hasOuterLabel = labelPlacement === 'outer' && hasLabelValue;\n const hasPlaceholder = Boolean(placeholder) && !hasInnerLabel;\n\n const innerLabelValue = hasInnerLabel || hasOuterLabel ? label : undefined;\n const innerLabelPlacementValue = labelPlacement === 'inner' && !hasInnerLabel ? undefined : labelPlacement;\n\n const innerPlaceholderValue = hasPlaceholder ? placeholder : undefined;\n const placeholderShown = Boolean(innerPlaceholderValue) && !hasValue;\n\n const requiredPlacementClass = requiredPlacement === 'right' ? 'align-right ' : undefined;\n const labelPlacementClass = innerLabelPlacementValue\n ? classes[`${innerLabelPlacementValue}LabelPlacement` as keyof typeof classes]\n : undefined;\n const hasValueClass = hasValue ? classes.hasValue : undefined;\n\n const wrapperWithoutLeftContent = !contentLeft && isChipsVisible ? classes.hasEmptyContentLeft : undefined;\n const wrapperWithoutRightContent =\n !contentRight && isChipsVisible ? classes.hasEmptyContentRight : undefined;\n\n const handleInput: FormEventHandler<HTMLInputElement> = (event) => {\n setHasValue(Boolean((event.target as HTMLInputElement).value));\n };\n\n const handleChange: ChangeEventHandler<HTMLInputElement> = (event) => {\n if (disabled || readOnly) {\n return;\n }\n\n const { maxLength, value } = event.target;\n\n if (maxLength !== -1 && value.length > maxLength) {\n return;\n }\n\n onChange?.(event);\n };\n\n const updateChips = (newChips: Array<ChipValues>, newValues: Array<TextFieldPrimitiveValue>) => {\n setChips(newChips);\n onChangeChips?.(newValues);\n };\n\n const { handleInputKeydown, handleChipKeyDown, onChipClear, handleContentKeyDown } = useKeyNavigation({\n controlledRefs,\n disabled,\n readOnly,\n chips,\n enumerationType,\n updateChips,\n onSearch,\n onChange,\n onEnterDisabled: (rest as any).onEnterDisabled,\n });\n\n const onChipClick = (event: React.MouseEvent<HTMLButtonElement>) => event.stopPropagation();\n\n const handleInputFocus = () => {\n if (readOnly || disabled || !inputRef?.current) {\n return;\n }\n\n inputRef.current.scrollTo({\n top: 0,\n left: inputRef.current.offsetLeft,\n behavior: 'smooth',\n });\n\n inputRef.current.focus();\n };\n\n const getRef = (element: HTMLButtonElement | null, index: number) => {\n if (element && chipsRefs?.current) {\n chipsRefs.current[index] = element;\n }\n };\n\n const handleOnKeyDown = (event: ChangeEvent<HTMLInputElement> & KeyboardEvent<HTMLInputElement>) => {\n handleInputKeydown(event);\n onKeyDown && onKeyDown(event);\n };\n\n useEffect(() => {\n if (!isChipEnumeration && !values?.length) {\n return;\n }\n\n const newChips =\n values?.map((value, index) => ({\n id: `${index}_${value}`,\n text: value,\n })) || [];\n\n setChips(newChips);\n }, [isChipEnumeration, values]);\n\n useEffect(() => {\n setHasValue(Boolean(outerValue));\n }, [outerValue]);\n\n const innerOptional = Boolean(required ? false : optional);\n const hasPlaceholderOptional = innerOptional && !innerLabelValue && !hasOuterLabel;\n const optionalTextNode = innerOptional ? (\n <StyledOptionalText>\n {Boolean(hasPlaceholderOptional ? innerPlaceholderValue : innerLabelValue) && '\\xa0'}\n {optionalText}\n </StyledOptionalText>\n ) : null;\n\n return (\n <Root\n view={view}\n size={size}\n disabled={disabled}\n readOnly={!disabled && readOnly}\n labelPlacement={innerLabelPlacementValue}\n onClick={handleInputFocus}\n className={cx(labelPlacementClass, classes.textFieldGroupItem, className)}\n style={style}\n >\n {hasOuterLabel && (\n <Label id={labelId} htmlFor={id}>\n {required && (\n <StyledIndicator className={cx(classes.outerLabelPlacement, requiredPlacementClass)} />\n )}\n {innerLabelValue}\n {optionalTextNode}\n </Label>\n )}\n <InputWrapper\n // Рефка для внутреннего использования. Не отдается наружу.\n ref={(rest as any).inputWrapperRef}\n className={cx(withHasChips, wrapperWithoutLeftContent, wrapperWithoutRightContent)}\n >\n {!hasOuterLabel && required && (\n <StyledIndicator className={cx(classes.innerLabelPlacement, requiredPlacementClass)} />\n )}\n {contentLeft && <StyledContentLeft>{contentLeft}</StyledContentLeft>}\n <InputLabelWrapper\n tabIndex={-1}\n ref={contentRef}\n onKeyDown={handleContentKeyDown}\n className={withHasChips}\n >\n {textBefore && <StyledTextBefore>{textBefore}</StyledTextBefore>}\n {isChipEnumeration && Boolean(chips?.length) && (\n <StyledChips>\n {chips?.map(({ id: chipId, text }, index) => {\n return (\n <TextFieldChip\n id={chipId}\n ref={(element) => getRef(element, index)}\n key={`${chipId}_${index}`}\n disabled={disabled}\n readOnly={readOnly}\n value={text}\n text={text}\n onKeyDown={(event) => handleChipKeyDown(event, chipId, index)}\n onClear={() => onChipClear(chipId, index)}\n onClick={onChipClick}\n />\n );\n })}\n </StyledChips>\n )}\n <InputContainer>\n <Input\n ref={inputForkRef}\n id={innerId}\n value={outerValue}\n aria-labelledby={labelId}\n aria-describedby={helperTextId}\n placeholder={innerPlaceholderValue}\n className={cx(hasValueClass)}\n disabled={disabled}\n readOnly={!disabled && readOnly}\n onInput={handleInput}\n onChange={handleChange}\n onKeyDown={handleOnKeyDown}\n {...rest}\n />\n {hasInnerLabel && (\n <Label id={labelId} htmlFor={innerId}>\n {innerLabelValue}\n {optionalTextNode}\n </Label>\n )}\n {placeholderShown && (\n <InputPlaceholder>\n {innerPlaceholderValue}\n {hasPlaceholderOptional && optionalTextNode}\n </InputPlaceholder>\n )}\n </InputContainer>\n {textAfter && <StyledTextAfter>{textAfter}</StyledTextAfter>}\n </InputLabelWrapper>\n {contentRight && <StyledContentRight>{contentRight}</StyledContentRight>}\n </InputWrapper>\n {leftHelper && <LeftHelper id={helperTextId}>{leftHelper}</LeftHelper>}\n </Root>\n );\n },\n );\n\nexport const textFieldConfig = {\n name: 'TextField',\n tag: 'div',\n layout: textFieldRoot,\n base,\n variations: {\n view: {\n css: viewCSS,\n },\n size: {\n css: sizeCSS,\n },\n disabled: {\n css: disabledCSS,\n attrs: true,\n },\n readOnly: {\n css: readOnlyCSS,\n attrs: true,\n },\n labelPlacement: {\n css: labelPlacementCSS,\n },\n },\n defaults: {\n size: 'm',\n view: 'default',\n },\n};\n"],"names":["optionalText","base","textFieldRoot","Root","forwardRef","_ref","ref","id","className","style","contentLeft","contentRight","label","labelPlacement","textBefore","textAfter","placeholder","leftHelper","_ref$enumerationType","enumerationType","_ref$requiredPlacemen","requiredPlacement","view","size","_ref$readOnly","readOnly","_ref$disabled","disabled","_ref$required","required","optional","outerValue","value","values","chips","onChange","onChangeChips","onSearch","onKeyDown","rest","contentRef","useRef","inputRef","inputForkRef","useForkRef","chipsRefs","controlledRefs","_useState","useState","Boolean","_useState2","_slicedToArray","hasValue","setHasValue","_useState3","_useState4","setChips","uniqId","safeUseId","innerId","labelId","helperTextId","isChipEnumeration","isChipsVisible","length","withHasChips","classes","hasChips","undefined","hasLabelValue","hasInnerLabel","hasOuterLabel","hasPlaceholder","innerLabelValue","innerLabelPlacementValue","innerPlaceholderValue","placeholderShown","requiredPlacementClass","labelPlacementClass","concat","hasValueClass","wrapperWithoutLeftContent","hasEmptyContentLeft","wrapperWithoutRightContent","hasEmptyContentRight","handleInput","event","target","handleChange","_event$target","maxLength","updateChips","newChips","newValues","_useKeyNavigation","useKeyNavigation","onEnterDisabled","handleInputKeydown","handleChipKeyDown","onChipClear","handleContentKeyDown","onChipClick","stopPropagation","handleInputFocus","current","scrollTo","top","left","offsetLeft","behavior","focus","getRef","element","index","handleOnKeyDown","useEffect","map","text","innerOptional","hasPlaceholderOptional","optionalTextNode","React","createElement","StyledOptionalText","onClick","cx","textFieldGroupItem","Label","htmlFor","StyledIndicator","outerLabelPlacement","InputWrapper","inputWrapperRef","innerLabelPlacement","StyledContentLeft","InputLabelWrapper","tabIndex","StyledTextBefore","StyledChips","_ref2","chipId","TextFieldChip","key","onClear","InputContainer","Input","_extends","onInput","InputPlaceholder","StyledTextAfter","StyledContentRight","LeftHelper","textFieldConfig","name","tag","layout","variations","css","viewCSS","sizeCSS","disabledCSS","attrs","readOnlyCSS","labelPlacementCSS","defaults"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salutejs/plasma-new-hope",
3
- "version": "0.141.0-canary.1421.10719019658.0",
3
+ "version": "0.141.0-canary.1422.10737462879.0",
4
4
  "description": "Salute Design System blueprint",
5
5
  "main": "cjs/index.js",
6
6
  "module": "es/index.js",
@@ -80,7 +80,7 @@
80
80
  "@rollup/plugin-babel": "^6.0.4",
81
81
  "@rollup/plugin-commonjs": "^25.0.4",
82
82
  "@rollup/plugin-node-resolve": "^15.1.0",
83
- "@salutejs/plasma-sb-utils": "0.177.0-dev.0",
83
+ "@salutejs/plasma-sb-utils": "0.177.0",
84
84
  "@storybook/addon-docs": "^7.6.17",
85
85
  "@storybook/addon-essentials": "^7.6.17",
86
86
  "@storybook/addons": "^7.6.17",
@@ -100,7 +100,6 @@
100
100
  "default-browser-id": "2.0.0",
101
101
  "react": "18.2.0",
102
102
  "react-dom": "18.2.0",
103
- "react-hook-form": "7.52.1",
104
103
  "rollup": "^3.28.0",
105
104
  "storybook": "7.6.17",
106
105
  "styled-components": "5.3.1",
@@ -114,7 +113,7 @@
114
113
  "@linaria/core": "5.0.2",
115
114
  "@linaria/react": "5.0.3",
116
115
  "@popperjs/core": "2.11.8",
117
- "@salutejs/plasma-core": "1.179.0-dev.0",
116
+ "@salutejs/plasma-core": "1.179.0",
118
117
  "dayjs": "1.11.11",
119
118
  "focus-visible": "5.2.0",
120
119
  "lodash.throttle": "4.1.1",
@@ -122,5 +121,5 @@
122
121
  "react-popper": "2.3.0",
123
122
  "storeon": "3.1.5"
124
123
  },
125
- "gitHead": "7bef74006c584c9ad801ee0e1a4fa7ef02efcf27"
124
+ "gitHead": "e96471fef668f4d2f7f0812cf223cf5d23eb618a"
126
125
  }
@@ -0,0 +1,344 @@
1
+ ---
2
+ id: combobox
3
+ title: Combobox
4
+ ---
5
+
6
+ import { PropsTable, Description, StorybookLink } from '@site/src/components';
7
+ import Tabs from '@theme/Tabs';
8
+ import TabItem from '@theme/TabItem';
9
+
10
+ # Combobox
11
+
12
+ <Description name="Combobox" />
13
+ <PropsTable name="Combobox" />
14
+
15
+ ## Использование
16
+ Обязательным параметром является только `items`. Внутри items может быть такой же вложенный массив items. Формат следующий:
17
+
18
+ ```tsx
19
+ type Items = Array<{
20
+ /**
21
+ * Значение у item
22
+ */
23
+ value: string;
24
+ /**
25
+ * Метка-подпись к item
26
+ */
27
+ label: string;
28
+ /**
29
+ * Список дочерних items.
30
+ */
31
+ items?: Array<ItemOption>;
32
+ /**
33
+ * Item не активен
34
+ */
35
+ disabled?: boolean;
36
+ /**
37
+ * Слот для контента слева
38
+ */
39
+ contentLeft?: ReactNode;
40
+ /**
41
+ * Слот для контента справа
42
+ */
43
+ contentRight?: ReactNode;
44
+ }>;
45
+ ```
46
+
47
+ Тип выбора комбобокса - одиночный или множественный зависит от типа `value` и `onChange`. В одиночном value - `string`, в множественном - `Array<string>`.\
48
+
49
+
50
+ ## Примеры
51
+
52
+ <Tabs>
53
+ <TabItem value="single" label="Single" default>
54
+ ```tsx live
55
+ import React from 'react';
56
+ import { Combobox } from '@salutejs/{{ package }}';
57
+
58
+ export function App() {
59
+ const [value, setValue] = useState('');
60
+
61
+ const items = [
62
+ {
63
+ value: 'north_america',
64
+ label: 'Северная Америка',
65
+ },
66
+ {
67
+ value: 'south_america',
68
+ label: 'Южная Америка',
69
+ items: [
70
+ {
71
+ value: 'brazil',
72
+ label: 'Бразилия',
73
+ },
74
+ {
75
+ value: 'argentina',
76
+ label: 'Аргентина',
77
+ },
78
+ ],
79
+ },
80
+ ];
81
+
82
+ return (
83
+ <div style=\{{ display: 'flex', gap: '30px', height: '300px' }}>
84
+ <div style=\{{width: '300px'}}>
85
+ <Combobox
86
+ items={items}
87
+ value={value}
88
+ onChange={setValue}
89
+ placeholder="Placeholder"
90
+ label="Label"
91
+ helperText="Helper text"
92
+ />
93
+ </div>
94
+ </div>
95
+ );
96
+ }
97
+ ```
98
+ </TabItem>
99
+ <TabItem value="multiple" label="Multiple">
100
+ ```tsx live
101
+ import React from 'react';
102
+ import { Combobox } from '@salutejs/{{ package }}';
103
+
104
+ export function App() {
105
+ const [value, setValue] = useState([]);
106
+
107
+ const items = [
108
+ {
109
+ value: 'north_america',
110
+ label: 'Северная Америка',
111
+ },
112
+ {
113
+ value: 'south_america',
114
+ label: 'Южная Америка',
115
+ items: [
116
+ {
117
+ value: 'brazil',
118
+ label: 'Бразилия',
119
+ },
120
+ {
121
+ value: 'argentina',
122
+ label: 'Аргентина',
123
+ },
124
+ ],
125
+ },
126
+ ];
127
+
128
+ return (
129
+ <div style=\{{ display: 'flex', gap: '30px', height: '300px' }}>
130
+ <div style=\{{width: '300px'}}>
131
+ <Combobox
132
+ multiple
133
+ items={items}
134
+ value={value}
135
+ onChange={setValue}
136
+ placeholder="Placeholder"
137
+ label="Label"
138
+ helperText="Helper text"
139
+ />
140
+ </div>
141
+ </div>
142
+ );
143
+ }
144
+ ```
145
+ </TabItem>
146
+ <TabItem value="predefined" label="Predefined">
147
+ Есть возможность задать значения по дефолту (главное, чтобы они находились в `items`). Также можно управлять состоянием снаружи селекта.
148
+
149
+ ```tsx live
150
+ import React from 'react';
151
+ import { Combobox, Button } from '@salutejs/{{ package }}';
152
+
153
+ export function App() {
154
+ const [multipleValue, setMultipleValue] = useState(['brazil', 'north_america']);
155
+
156
+ const items = [
157
+ {
158
+ value: 'north_america',
159
+ label: 'Северная Америка',
160
+ },
161
+ {
162
+ value: 'south_america',
163
+ label: 'Южная Америка',
164
+ items: [
165
+ {
166
+ value: 'brazil',
167
+ label: 'Бразилия',
168
+ },
169
+ {
170
+ value: 'argentina',
171
+ label: 'Аргентина',
172
+ },
173
+ ],
174
+ },
175
+ ];
176
+
177
+ return (
178
+ <div style=\{{ display: 'flex', gap: '30px', height: '300px' }}>
179
+ <div style=\{{width: '300px'}}>
180
+ <Combobox
181
+ multiple
182
+ items={items}
183
+ value={multipleValue}
184
+ onChange={setMultipleValue}
185
+ placeholder="Placeholder"
186
+ label="Label"
187
+ helperText="Helper text"
188
+ />
189
+ </div>
190
+
191
+ <Button onClick={() => setMultipleValue([])}>Очистить</Button>
192
+ </div>
193
+ );
194
+ }
195
+ ```
196
+ </TabItem>
197
+ <TabItem value="portal" label="Portal">
198
+ Иногда возникает необходимость вынесения выпадающего списка на уровни выше в DOM. К примеру, когда у родительского блока имеется скролл, и список будет обрезаться, чего хотелось бы избежать.\
199
+ Для такой реализации имеется пропс `portal`, который принимает либо `ref` либо `id` html-тега.\
200
+ Также нужно прокинуть проп `listWidth`, чтобы явно задать ширину списку. Если этого не сделать, то будет взята ширина 100% от блока, на который ведет ссылка портала.
201
+
202
+ ```tsx live
203
+ import React, { useRef } from 'react';
204
+ import { Combobox } from '@salutejs/{{ package }}';
205
+
206
+ export function App() {
207
+ const [value, setValue] = useState('');
208
+
209
+ const items = [
210
+ {
211
+ value: 'north_america',
212
+ label: 'Северная Америка',
213
+ },
214
+ {
215
+ value: 'south_america',
216
+ label: 'Южная Америка',
217
+ items: [
218
+ {
219
+ value: 'brazil',
220
+ label: 'Бразилия',
221
+ },
222
+ {
223
+ value: 'argentina',
224
+ label: 'Аргентина',
225
+ },
226
+ ],
227
+ },
228
+ ];
229
+
230
+ const ref = useRef(null)
231
+
232
+ return (
233
+ <div style=\{{ height: '300px' }} ref={ref}>
234
+ <div style=\{{width: '300px'}}>
235
+ <Combobox
236
+ items={items}
237
+ value={value}
238
+ onChange={setValue}
239
+ placeholder="Placeholder"
240
+ label="Label"
241
+ helperText="Helper text"
242
+ portal={ref}
243
+ listWidth="300px"
244
+ />
245
+ </div>
246
+ </div>
247
+ );
248
+ }
249
+ ```
250
+ </TabItem>
251
+ <TabItem value="uncontrolled" label="Uncontrolled">
252
+ `value` и `onChange` - опциональные параметры. Если вы хотите `uncontrolled` вариант компонента - их пробрасывать необязательно.
253
+
254
+ ```tsx live
255
+ import React from 'react';
256
+ import { Combobox } from '@salutejs/{{ package }}';
257
+
258
+ export function App() {
259
+ const items = [
260
+ {
261
+ value: 'north_america',
262
+ label: 'Северная Америка',
263
+ },
264
+ {
265
+ value: 'south_america',
266
+ label: 'Южная Америка',
267
+ items: [
268
+ {
269
+ value: 'brazil',
270
+ label: 'Бразилия',
271
+ },
272
+ {
273
+ value: 'argentina',
274
+ label: 'Аргентина',
275
+ },
276
+ ],
277
+ },
278
+ ];
279
+
280
+ return (
281
+ <div style=\{{ height: '300px' }}>
282
+ <div style=\{{width: '300px'}}>
283
+ <Combobox
284
+ items={items}
285
+ placeholder="Placeholder"
286
+ label="Label"
287
+ helperText="Helper text"
288
+ />
289
+ </div>
290
+ </div>
291
+ );
292
+ }
293
+ ```
294
+ </TabItem>
295
+ <TabItem value="alwaysOpened" label="Always opened">
296
+ Свойство alwaysOpened позволяет отображать Combobox всегда открытым. При этом closeAfterSelect игнорируется.
297
+
298
+ ```tsx live
299
+ import React from 'react';
300
+ import { Combobox } from '@salutejs/{{ package }}';
301
+
302
+ export function App() {
303
+ const items = [
304
+ {
305
+ value: 'north_america',
306
+ label: 'Северная Америка',
307
+ },
308
+ {
309
+ value: 'south_america',
310
+ label: 'Южная Америка',
311
+ items: [
312
+ {
313
+ value: 'brazil',
314
+ label: 'Бразилия',
315
+ },
316
+ {
317
+ value: 'argentina',
318
+ label: 'Аргентина',
319
+ },
320
+ ],
321
+ },
322
+ ];
323
+
324
+ return (
325
+ <div style=\{{ height: '300px' }}>
326
+ <div style=\{{width: '300px'}}>
327
+ <Combobox
328
+ items={items}
329
+ placeholder="Placeholder"
330
+ label="Label"
331
+ helperText="Helper text"
332
+ alwaysOpened
333
+ />
334
+ </div>
335
+ </div>
336
+ );
337
+ }
338
+ ```
339
+ </TabItem>
340
+ </Tabs>
341
+
342
+ ## Клавиатурная навигация
343
+
344
+ Данный компонент соответствует требования W3C: [Combobox](https://www.w3.org/WAI/ARIA/apg/patterns/combobox/) и частично [TreeView](https://www.w3.org/WAI/ARIA/apg/patterns/treeview/).
@@ -20,7 +20,7 @@ var _getPathMaps = /*#__PURE__*/require("./hooks/getPathMaps");
20
20
  var _Combobox2 = /*#__PURE__*/require("./Combobox.styles");
21
21
  var _base = /*#__PURE__*/require("./variations/_view/base");
22
22
  var _base2 = /*#__PURE__*/require("./variations/_size/base");
23
- var _excluded = ["multiple", "value", "onChange", "isTargetAmount", "items", "placement", "label", "placeholder", "helperText", "contentLeft", "textBefore", "textAfter", "variant", "listOverflow", "listHeight", "listWidth", "portal", "renderItem", "view", "size", "labelPlacement", "readOnly", "disabled", "filter", "closeAfterSelect"];
23
+ var _excluded = ["multiple", "value", "onChange", "isTargetAmount", "items", "placement", "label", "placeholder", "helperText", "contentLeft", "textBefore", "textAfter", "variant", "listOverflow", "listHeight", "listWidth", "portal", "renderItem", "view", "size", "labelPlacement", "readOnly", "disabled", "alwaysOpened", "filter", "closeAfterSelect"];
24
24
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
25
25
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
26
26
  function _extends() { _extends = Object.assign ? Object.assign.bind() : 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); }
@@ -67,6 +67,8 @@ var comboboxRoot = exports.comboboxRoot = function comboboxRoot(Root) {
67
67
  readOnly = _props$readOnly === void 0 ? false : _props$readOnly,
68
68
  _props$disabled = props.disabled,
69
69
  disabled = _props$disabled === void 0 ? false : _props$disabled,
70
+ _props$alwaysOpened = props.alwaysOpened,
71
+ alwaysOpened = _props$alwaysOpened === void 0 ? false : _props$alwaysOpened,
70
72
  filter = props.filter,
71
73
  outerCloseAfterSelect = props.closeAfterSelect,
72
74
  rest = _objectWithoutProperties(props, _excluded);
@@ -116,7 +118,7 @@ var comboboxRoot = exports.comboboxRoot = function comboboxRoot(Root) {
116
118
  _useState6 = _slicedToArray(_useState5, 2),
117
119
  checked = _useState6[0],
118
120
  setChecked = _useState6[1];
119
- var isCurrentListOpen = Boolean(path[0]);
121
+ var isCurrentListOpen = alwaysOpened || Boolean(path[0]);
120
122
  var activeDescendantItemValue = ((_getItemByFocused = (0, _useKeyboardNavigation.getItemByFocused)(focusedPath, focusedToValueMap)) === null || _getItemByFocused === void 0 ? void 0 : _getItemByFocused.value) || '';
121
123
  var withArrowInverse = isCurrentListOpen ? _Combobox.classes.arrowInverse : undefined;
122
124
  var closeAfterSelect = outerCloseAfterSelect !== null && outerCloseAfterSelect !== void 0 ? outerCloseAfterSelect : !multiple;
@@ -226,7 +228,7 @@ var comboboxRoot = exports.comboboxRoot = function comboboxRoot(Root) {
226
228
  newValues.push(item.value);
227
229
  }
228
230
  });
229
- if (closeAfterSelect) {
231
+ if (!alwaysOpened && closeAfterSelect) {
230
232
  dispatchPath({
231
233
  type: 'reset'
232
234
  });
@@ -271,7 +273,7 @@ var comboboxRoot = exports.comboboxRoot = function comboboxRoot(Root) {
271
273
  (0, _utils3.updateSingleAncestors)(item, checkedCopy, 'dot');
272
274
  }
273
275
  setTextValue(isCurrentChecked ? '' : item.label);
274
- if (closeAfterSelect) {
276
+ if (!alwaysOpened && closeAfterSelect) {
275
277
  dispatchPath({
276
278
  type: 'reset'
277
279
  });
@@ -15,7 +15,7 @@ var _base = /*#__PURE__*/require("./variations/_view/base");
15
15
  var _base2 = /*#__PURE__*/require("./variations/_size/base");
16
16
  var _ui = /*#__PURE__*/require("./ui");
17
17
  var _Combobox = /*#__PURE__*/require("./Combobox.styles");
18
- var _excluded = ["name", "form", "readOnly", "disabled", "label", "placeholder", "id", "children", "role", "view", "size", "frame", "usePortal", "negativeResultContent", "enumerationType", "opened", "placement", "onToggle", "onKeyDown", "filterFunction"];
18
+ var _excluded = ["name", "form", "readOnly", "disabled", "label", "placeholder", "id", "children", "role", "view", "size", "frame", "usePortal", "negativeResultContent", "enumerationType", "opened", "alwaysOpened", "placement", "onToggle", "onKeyDown", "filterFunction"];
19
19
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
20
20
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
21
21
  function _extends() { _extends = Object.assign ? Object.assign.bind() : 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); }
@@ -52,6 +52,8 @@ var comboboxRoot = exports.comboboxRoot = function comboboxRoot(Root) {
52
52
  enumerationType = _ref$enumerationType === void 0 ? 'comma' : _ref$enumerationType,
53
53
  _ref$opened = _ref.opened,
54
54
  opened = _ref$opened === void 0 ? false : _ref$opened,
55
+ _ref$alwaysOpened = _ref.alwaysOpened,
56
+ alwaysOpened = _ref$alwaysOpened === void 0 ? false : _ref$alwaysOpened,
55
57
  _ref$placement = _ref.placement,
56
58
  placement = _ref$placement === void 0 ? 'bottom' : _ref$placement,
57
59
  onToggle = _ref.onToggle,
@@ -82,7 +84,7 @@ var comboboxRoot = exports.comboboxRoot = function comboboxRoot(Root) {
82
84
  itemsRefs: itemsRefs,
83
85
  inputRef: inputRef
84
86
  };
85
- var _useState3 = (0, _react.useState)(opened),
87
+ var _useState3 = (0, _react.useState)(alwaysOpened || opened),
86
88
  _useState4 = _slicedToArray(_useState3, 2),
87
89
  isVisible = _useState4[0],
88
90
  setIsVisible = _useState4[1];
@@ -108,11 +110,11 @@ var comboboxRoot = exports.comboboxRoot = function comboboxRoot(Root) {
108
110
  if (disabled || readOnly) {
109
111
  return;
110
112
  }
111
- setIsVisible(opened);
112
- }, [opened, disabled, readOnly]);
113
+ setIsVisible(alwaysOpened || opened);
114
+ }, [opened, alwaysOpened, disabled, readOnly]);
113
115
  (0, _react.useEffect)(function () {
114
116
  // INFO: Для кейсов, когда значение выбрано и нужно вывести весь список
115
- if (opened) {
117
+ if (alwaysOpened || opened) {
116
118
  setFilterValue('');
117
119
  }
118
120
  }, []);
@@ -126,10 +128,10 @@ var comboboxRoot = exports.comboboxRoot = function comboboxRoot(Root) {
126
128
  setFilterValue('');
127
129
  }
128
130
  if (onToggle) {
129
- onToggle(openValue, event);
131
+ onToggle(alwaysOpened || openValue, event);
130
132
  return;
131
133
  }
132
- setIsVisible(openValue);
134
+ setIsVisible(alwaysOpened || openValue);
133
135
  };
134
136
  var closedWithoutChanges = (0, _react.useRef)(true);
135
137
  var updateValue = function updateValue(item, event) {
@@ -143,7 +145,7 @@ var comboboxRoot = exports.comboboxRoot = function comboboxRoot(Root) {
143
145
  }
144
146
  var newSelected = (0, _utils2.getNewSelected)(rest.value, newValue, 'single');
145
147
  (_rest$onChangeValue2 = rest.onChangeValue) === null || _rest$onChangeValue2 === void 0 || _rest$onChangeValue2.call(rest, newSelected);
146
- onInnerToggle === null || onInnerToggle === void 0 || onInnerToggle(false, event);
148
+ onInnerToggle === null || onInnerToggle === void 0 || onInnerToggle(alwaysOpened || false, event);
147
149
  closedWithoutChanges.current = false;
148
150
  };
149
151
  var onClickChildrenItem = function onClickChildrenItem(event) {
@@ -187,6 +189,11 @@ var comboboxRoot = exports.comboboxRoot = function comboboxRoot(Root) {
187
189
  onKeyDown === null || onKeyDown === void 0 || onKeyDown(event);
188
190
  onKeyDownTarget(event);
189
191
  };
192
+ (0, _react.useEffect)(function () {
193
+ if (alwaysOpened && rest.valueType === 'single') {
194
+ setSearch(String(value));
195
+ }
196
+ }, [value, alwaysOpened]);
190
197
  return /*#__PURE__*/_react["default"].createElement(_Combobox.StyledRoot, {
191
198
  ref: comboboxRef
192
199
  }, /*#__PURE__*/_react["default"].createElement(_Combobox.StyledNativeSelect, {