@foxford/ui 2.82.0-beta-2c266bb-20251002 → 2.84.0-beta-4d7a4d1-20251008

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.
Files changed (126) hide show
  1. package/components/AccordionItem/AccordionItem.js +1 -1
  2. package/components/AccordionItem/AccordionItem.js.map +1 -1
  3. package/components/AccordionItem/AccordionItem.mjs +1 -1
  4. package/components/AccordionItem/AccordionItem.mjs.map +1 -1
  5. package/components/AccordionItem/useAccordionPanel.js +2 -0
  6. package/components/AccordionItem/useAccordionPanel.js.map +1 -0
  7. package/components/AccordionItem/useAccordionPanel.mjs +2 -0
  8. package/components/AccordionItem/useAccordionPanel.mjs.map +1 -0
  9. package/components/AccordionItem/useAccordionPanelProps.js +2 -0
  10. package/components/AccordionItem/useAccordionPanelProps.js.map +1 -0
  11. package/components/AccordionItem/useAccordionPanelProps.mjs +2 -0
  12. package/components/AccordionItem/useAccordionPanelProps.mjs.map +1 -0
  13. package/components/Dropdown/Dropdown.js +1 -1
  14. package/components/Dropdown/Dropdown.js.map +1 -1
  15. package/components/Dropdown/Dropdown.mjs +1 -1
  16. package/components/Dropdown/Dropdown.mjs.map +1 -1
  17. package/components/Dropdown/sizes.js +1 -1
  18. package/components/Dropdown/sizes.js.map +1 -1
  19. package/components/Dropdown/sizes.mjs +1 -1
  20. package/components/Dropdown/sizes.mjs.map +1 -1
  21. package/components/FormInput/FormInput.js +1 -1
  22. package/components/FormInput/FormInput.js.map +1 -1
  23. package/components/FormInput/FormInput.mjs +1 -1
  24. package/components/FormInput/FormInput.mjs.map +1 -1
  25. package/components/FormInput/sizes.js +2 -0
  26. package/components/FormInput/sizes.js.map +1 -0
  27. package/components/FormInput/sizes.mjs +2 -0
  28. package/components/FormInput/sizes.mjs.map +1 -0
  29. package/components/FormInput/style.js +1 -1
  30. package/components/FormInput/style.js.map +1 -1
  31. package/components/FormInput/style.mjs +1 -1
  32. package/components/FormInput/style.mjs.map +1 -1
  33. package/components/FormInputLabel/FormInputLabel.js +1 -1
  34. package/components/FormInputLabel/FormInputLabel.js.map +1 -1
  35. package/components/FormInputLabel/FormInputLabel.mjs +1 -1
  36. package/components/FormInputLabel/FormInputLabel.mjs.map +1 -1
  37. package/components/FormInputLabel/sizes.js +2 -0
  38. package/components/FormInputLabel/sizes.js.map +1 -0
  39. package/components/FormInputLabel/sizes.mjs +2 -0
  40. package/components/FormInputLabel/sizes.mjs.map +1 -0
  41. package/components/FormInputLabel/style.js +1 -1
  42. package/components/FormInputLabel/style.js.map +1 -1
  43. package/components/FormInputLabel/style.mjs +1 -1
  44. package/components/FormInputLabel/style.mjs.map +1 -1
  45. package/components/Input/Input.js +1 -1
  46. package/components/Input/Input.js.map +1 -1
  47. package/components/Input/Input.mjs +1 -1
  48. package/components/Input/Input.mjs.map +1 -1
  49. package/components/Input/sizes.js +2 -0
  50. package/components/Input/sizes.js.map +1 -0
  51. package/components/Input/sizes.mjs +2 -0
  52. package/components/Input/sizes.mjs.map +1 -0
  53. package/components/InputLabel/InputLabel.js +2 -0
  54. package/components/InputLabel/InputLabel.js.map +1 -0
  55. package/components/InputLabel/InputLabel.mjs +2 -0
  56. package/components/InputLabel/InputLabel.mjs.map +1 -0
  57. package/components/InputLabel/sizes.js +2 -0
  58. package/components/InputLabel/sizes.js.map +1 -0
  59. package/components/InputLabel/sizes.mjs +2 -0
  60. package/components/InputLabel/sizes.mjs.map +1 -0
  61. package/components/InputLabel/style.js +2 -0
  62. package/components/InputLabel/style.js.map +1 -0
  63. package/components/InputLabel/style.mjs +2 -0
  64. package/components/InputLabel/style.mjs.map +1 -0
  65. package/components/ProgressCircle/ProgressCircle.js +1 -1
  66. package/components/ProgressCircle/ProgressCircle.js.map +1 -1
  67. package/components/ProgressCircle/ProgressCircle.mjs +1 -1
  68. package/components/ProgressCircle/ProgressCircle.mjs.map +1 -1
  69. package/components/ProgressLine/style.js +1 -1
  70. package/components/ProgressLine/style.js.map +1 -1
  71. package/components/ProgressLine/style.mjs +1 -1
  72. package/components/ProgressLine/style.mjs.map +1 -1
  73. package/components/Textarea/Textarea.js +1 -1
  74. package/components/Textarea/Textarea.js.map +1 -1
  75. package/components/Textarea/Textarea.mjs +1 -1
  76. package/components/Textarea/Textarea.mjs.map +1 -1
  77. package/components/Textarea/sizes.js +2 -0
  78. package/components/Textarea/sizes.js.map +1 -0
  79. package/components/Textarea/sizes.mjs +2 -0
  80. package/components/Textarea/sizes.mjs.map +1 -0
  81. package/components/Textarea/style.js +1 -1
  82. package/components/Textarea/style.js.map +1 -1
  83. package/components/Textarea/style.mjs +1 -1
  84. package/components/Textarea/style.mjs.map +1 -1
  85. package/dts/index.d.ts +434 -285
  86. package/hooks/useClickOutside.js +1 -1
  87. package/hooks/useClickOutside.js.map +1 -1
  88. package/hooks/useClickOutside.mjs +1 -1
  89. package/hooks/useClickOutside.mjs.map +1 -1
  90. package/hooks/useResizeObserver.js +1 -1
  91. package/hooks/useResizeObserver.js.map +1 -1
  92. package/hooks/useResizeObserver.mjs +1 -1
  93. package/hooks/useResizeObserver.mjs.map +1 -1
  94. package/package.json +2 -2
  95. package/shared/utils/dom.js +1 -1
  96. package/shared/utils/dom.js.map +1 -1
  97. package/shared/utils/dom.mjs +1 -1
  98. package/shared/utils/dom.mjs.map +1 -1
  99. package/shared/utils/getDomTargets.js +2 -0
  100. package/shared/utils/getDomTargets.js.map +1 -0
  101. package/shared/utils/getDomTargets.mjs +2 -0
  102. package/shared/utils/getDomTargets.mjs.map +1 -0
  103. package/shared/utils/getProgressPercent.js +2 -0
  104. package/shared/utils/getProgressPercent.js.map +1 -0
  105. package/shared/utils/getProgressPercent.mjs +2 -0
  106. package/shared/utils/getProgressPercent.mjs.map +1 -0
  107. package/shared/utils/misc.js +1 -1
  108. package/shared/utils/misc.js.map +1 -1
  109. package/shared/utils/misc.mjs +1 -1
  110. package/shared/utils/misc.mjs.map +1 -1
  111. package/components/AccordionItem/hooks.js +0 -2
  112. package/components/AccordionItem/hooks.js.map +0 -1
  113. package/components/AccordionItem/hooks.mjs +0 -2
  114. package/components/AccordionItem/hooks.mjs.map +0 -1
  115. package/components/FormInputLabel/constants.js +0 -2
  116. package/components/FormInputLabel/constants.js.map +0 -1
  117. package/components/FormInputLabel/constants.mjs +0 -2
  118. package/components/FormInputLabel/constants.mjs.map +0 -1
  119. package/components/Input/constants.js +0 -2
  120. package/components/Input/constants.js.map +0 -1
  121. package/components/Input/constants.mjs +0 -2
  122. package/components/Input/constants.mjs.map +0 -1
  123. package/components/Textarea/constants.js +0 -2
  124. package/components/Textarea/constants.js.map +0 -1
  125. package/components/Textarea/constants.mjs +0 -2
  126. package/components/Textarea/constants.mjs.map +0 -1
@@ -1,2 +1,2 @@
1
- 'use strict';var React=require('react');var nanoid=require('nanoid');var withMergedProps=require('../../hocs/withMergedProps.js');var hooks=require('./hooks.js');var sizes=require('./sizes.js');var style=require('./style.js');var jsxRuntime=require('react/jsx-runtime');var Skeleton=require('../Skeleton/Skeleton.js');var Text=require('../Text/Text.js');var Icon=require('../Icon/Icon.js');const AccordionItem=withMergedProps.withMergedProps(React.forwardRef(((e,s)=>{const{size:i="m",defaultExpanded:n=!1,headingAs:t="h3",borderRadius:o=0,sizeXXS:a,sizeXS:r,sizeS:d,sizeM:l,sizeL:c,sizeXL:x,id:u,header:j,addon:E,content:p,title:m,subtitle:R,icon:S,panel:h,children:z,loading:y,disabled:I,expanded:b,embedded:D,onExpandedChange:T,...f}=hooks.useAccordionPanelProps(e);const k={size:i,sizeXXS:a,sizeXS:r,sizeS:d,sizeM:l,sizeL:c,sizeXL:x};const g={...k,preset:'brand',name:'chevronDown',sizes:sizes.SIZES_ICON};const A={...k,as:'span',appearance:'subheading-compact',wordBreak:'break-word',color:'inherit',sizes:sizes.SIZES_TITLE};const P={...k,as:'span',appearance:'body',wordBreak:'break-word',color:'inherit',sizes:sizes.SIZES_SUBTITLE};const{panelExpanded:_,setPanelExpanded:w}=hooks.useAccordionPanel({id:u,expanded:b,defaultExpanded:n,onExpandedChange:T});const[v,M]=React.useState(_);const Z=React.useMemo((()=>nanoid.nanoid()),[]);const L=React.useMemo((()=>nanoid.nanoid()),[]);return React.useLayoutEffect((()=>{_&&M(!0)}),[_]),jsxRuntime.jsxs(style.Root,{...f,...k,id:u,disabled:I,loading:y,expanded:_,borderRadius:o,"data-accordion-item":!0,ref:s,children:[jsxRuntime.jsx(style.Heading,{as:t,onClick:()=>{I||w(!_)},children:jsxRuntime.jsx(style.Button,{id:Z,type:"button","data-accordion-control":!0,"aria-controls":L,"aria-expanded":v,"aria-disabled":Boolean(v&&(I||b!==void 0&&!T)),disabled:I,onClick:e=>{e.stopPropagation(),w(!_)},children:y?jsxRuntime.jsx(style.Header,{...k,sizes:D?sizes.SIZES_HEADER_EMBEDDED:sizes.SIZES_HEADER,children:jsxRuntime.jsx(style.Content,{children:jsxRuntime.jsx(Skeleton.Skeleton,{as:"span",borderRadius:4,width:"90%","data-accordion-skeleton":!0,children:jsxRuntime.jsx(Text.Text,{...A})})})}):React.isValidElement(j)?j:typeof j=='function'?j({titleProps:A,subtitleProps:P,iconProps:g}):jsxRuntime.jsxs(style.Header,{...k,sizes:D?sizes.SIZES_HEADER_EMBEDDED:sizes.SIZES_HEADER,children:[E,jsxRuntime.jsx(style.Content,{children:React.isValidElement(p)?p:typeof p=='function'?p({titleProps:A,subtitleProps:P}):jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[React.isValidElement(m)?m:typeof m=='function'?m(A):typeof m=='string'||typeof m=='number'?jsxRuntime.jsx(Text.Text,{...A,children:m}):null,React.isValidElement(R)?R:typeof R=='function'?R(P):typeof R=='string'||typeof R=='number'?jsxRuntime.jsx(Text.Text,{...P,children:R}):null]})}),jsxRuntime.jsx(style.IconAnimation,{up:_,children:React.isValidElement(S)?S:typeof S=='function'?S(g):jsxRuntime.jsx(Icon.Icon,{...g})})]})})}),jsxRuntime.jsx(style.Panel,{id:L,role:"region","aria-labelledby":Z,hidden:!v,onTransitionEnd:e=>{e.propertyName!=='opacity'||_||M(!1)},children:y?jsxRuntime.jsxs(style.Details,{...k,sizes:D?sizes.SIZES_DETAILS_EMBEDDED:sizes.SIZES_DETAILS,children:[jsxRuntime.jsx(Skeleton.Skeleton,{as:"span",borderRadius:4,width:"100%",marginBottom:"0.4em",children:jsxRuntime.jsx(Text.Text,{...P})}),jsxRuntime.jsx(Skeleton.Skeleton,{as:"span",borderRadius:4,width:"70%",children:jsxRuntime.jsx(Text.Text,{...P})})]}):React.isValidElement(h)?h:jsxRuntime.jsx(style.Details,{...k,sizes:D?sizes.SIZES_DETAILS_EMBEDDED:sizes.SIZES_DETAILS,children:z})})]})})),{displayName:'AccordionItem',sizes:sizes.SIZES});exports.AccordionItem=AccordionItem;
1
+ 'use strict';var React=require('react');var nanoid=require('nanoid');var withMergedProps=require('../../hocs/withMergedProps.js');var useAccordionPanel=require('./useAccordionPanel.js');var useAccordionPanelProps=require('./useAccordionPanelProps.js');var sizes=require('./sizes.js');var style=require('./style.js');var jsxRuntime=require('react/jsx-runtime');var Skeleton=require('../Skeleton/Skeleton.js');var Text=require('../Text/Text.js');var Icon=require('../Icon/Icon.js');const AccordionItem=withMergedProps.withMergedProps(React.forwardRef(((e,s)=>{const{size:n="m",defaultExpanded:i=!1,headingAs:t="h3",borderRadius:o=0,sizeXXS:r,sizeXS:a,sizeS:d,sizeM:c,sizeL:l,sizeXL:u,id:x,header:p,addon:j,content:E,title:m,subtitle:R,icon:S,panel:h,children:z,loading:y,disabled:I,expanded:P,embedded:b,onExpandedChange:D,...A}=useAccordionPanelProps.useAccordionPanelProps(e);const T={size:n,sizeXXS:r,sizeXS:a,sizeS:d,sizeM:c,sizeL:l,sizeXL:u};const f={...T,preset:'brand',name:'chevronDown',sizes:sizes.SIZES_ICON};const g={...T,as:'span',appearance:'subheading-compact',wordBreak:'break-word',color:'inherit',sizes:sizes.SIZES_TITLE};const k={...T,as:'span',appearance:'body',wordBreak:'break-word',color:'inherit',sizes:sizes.SIZES_SUBTITLE};const{panelExpanded:_,setPanelExpanded:v}=useAccordionPanel.useAccordionPanel({id:x,expanded:P,defaultExpanded:i,onExpandedChange:D});const[w,M]=React.useState(_);const Z=React.useMemo((()=>nanoid.nanoid()),[]);const q=React.useMemo((()=>nanoid.nanoid()),[]);return React.useLayoutEffect((()=>{_&&M(!0)}),[_]),jsxRuntime.jsxs(style.Root,{...A,...T,id:x,disabled:I,loading:y,expanded:_,borderRadius:o,"data-accordion-item":!0,ref:s,children:[jsxRuntime.jsx(style.Heading,{as:t,onClick:()=>{I||v(!_)},children:jsxRuntime.jsx(style.Button,{id:Z,type:"button","data-accordion-control":!0,"aria-controls":q,"aria-expanded":w,"aria-disabled":Boolean(w&&(I||P!==void 0&&!D)),disabled:I,onClick:e=>{e.stopPropagation(),v(!_)},children:y?jsxRuntime.jsx(style.Header,{...T,sizes:b?sizes.SIZES_HEADER_EMBEDDED:sizes.SIZES_HEADER,children:jsxRuntime.jsx(style.Content,{children:jsxRuntime.jsx(Skeleton.Skeleton,{as:"span",borderRadius:4,width:"90%","data-accordion-skeleton":!0,children:jsxRuntime.jsx(Text.Text,{...g})})})}):React.isValidElement(p)?p:typeof p=='function'?p({titleProps:g,subtitleProps:k,iconProps:f}):jsxRuntime.jsxs(style.Header,{...T,sizes:b?sizes.SIZES_HEADER_EMBEDDED:sizes.SIZES_HEADER,children:[j,jsxRuntime.jsx(style.Content,{children:React.isValidElement(E)?E:typeof E=='function'?E({titleProps:g,subtitleProps:k}):jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[React.isValidElement(m)?m:typeof m=='function'?m(g):typeof m=='string'||typeof m=='number'?jsxRuntime.jsx(Text.Text,{...g,children:m}):null,React.isValidElement(R)?R:typeof R=='function'?R(k):typeof R=='string'||typeof R=='number'?jsxRuntime.jsx(Text.Text,{...k,children:R}):null]})}),jsxRuntime.jsx(style.IconAnimation,{up:_,children:React.isValidElement(S)?S:typeof S=='function'?S(f):jsxRuntime.jsx(Icon.Icon,{...f})})]})})}),jsxRuntime.jsx(style.Panel,{id:q,role:"region","aria-labelledby":Z,hidden:!w,onTransitionEnd:e=>{e.propertyName!=='opacity'||_||M(!1)},children:y?jsxRuntime.jsxs(style.Details,{...T,sizes:b?sizes.SIZES_DETAILS_EMBEDDED:sizes.SIZES_DETAILS,children:[jsxRuntime.jsx(Skeleton.Skeleton,{as:"span",borderRadius:4,width:"100%",marginBottom:"0.4em",children:jsxRuntime.jsx(Text.Text,{...k})}),jsxRuntime.jsx(Skeleton.Skeleton,{as:"span",borderRadius:4,width:"70%",children:jsxRuntime.jsx(Text.Text,{...k})})]}):React.isValidElement(h)?h:jsxRuntime.jsx(style.Details,{...T,sizes:b?sizes.SIZES_DETAILS_EMBEDDED:sizes.SIZES_DETAILS,children:z})})]})})),{displayName:'AccordionItem',sizes:sizes.SIZES});exports.AccordionItem=AccordionItem;
2
2
  //# sourceMappingURL=AccordionItem.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AccordionItem.js","sources":["../../../../src/components/AccordionItem/AccordionItem.tsx"],"sourcesContent":["import { forwardRef, useState, isValidElement, useLayoutEffect, useMemo } from 'react'\nimport { nanoid } from 'nanoid'\nimport { withMergedProps } from 'hocs/withMergedProps'\nimport { Text } from 'components/Text'\nimport { Icon } from 'components/Icon'\nimport { Skeleton } from 'components/Skeleton'\nimport type { IconProps } from 'components/Icon'\nimport type { TextProps } from 'components/Text'\nimport { useAccordionPanel, useAccordionPanelProps } from './hooks'\nimport {\n SIZES,\n SIZES_HEADER,\n SIZES_HEADER_EMBEDDED,\n SIZES_DETAILS,\n SIZES_DETAILS_EMBEDDED,\n SIZES_TITLE,\n SIZES_SUBTITLE,\n SIZES_ICON,\n} from './sizes'\nimport type { AccordionItemProps } from './types'\nimport * as Styled from './style'\n\nconst COMPONENT_NAME = 'AccordionItem'\n\n/**\n *\n * Компонент для создания сворачиваемой секции контента.\n *\n * Поддерживается \"ref\" и все нативные атрибуты \\<section\\> элемента.\n *\n * Дизайн соответствует [рекомендациям WAI-ARIA](https://www.w3.org/WAI/ARIA/apg/patterns/accordion/).\n *\n * @visibleName Accordion.Item\n */\nconst AccordionItem: React.ForwardRefExoticComponent<AccordionItemProps> = withMergedProps<\n AccordionItemProps,\n HTMLElement\n>(\n forwardRef((props, ref) => {\n const {\n size = 'm',\n defaultExpanded = false,\n headingAs = 'h3',\n borderRadius = 0,\n sizeXXS,\n sizeXS,\n sizeS,\n sizeM,\n sizeL,\n sizeXL,\n id,\n header,\n addon,\n content,\n title,\n subtitle,\n icon,\n panel,\n children,\n loading,\n disabled,\n expanded,\n embedded,\n onExpandedChange,\n ...restProps\n } = useAccordionPanelProps(props)\n\n const sizeProps = {\n size,\n sizeXXS,\n sizeXS,\n sizeS,\n sizeM,\n sizeL,\n sizeXL,\n }\n\n const iconProps: IconProps = {\n ...sizeProps,\n preset: 'brand',\n name: 'chevronDown',\n sizes: SIZES_ICON,\n }\n\n const titleProps: TextProps = {\n ...sizeProps,\n as: 'span',\n appearance: 'subheading-compact',\n wordBreak: 'break-word',\n color: 'inherit',\n sizes: SIZES_TITLE,\n }\n\n const subtitleProps: TextProps = {\n ...sizeProps,\n as: 'span',\n appearance: 'body',\n wordBreak: 'break-word',\n color: 'inherit',\n sizes: SIZES_SUBTITLE,\n }\n\n const { panelExpanded, setPanelExpanded } = useAccordionPanel({\n id,\n expanded,\n defaultExpanded,\n onExpandedChange,\n })\n\n const [panelVisible, setPanelVisible] = useState<boolean>(panelExpanded)\n\n const controlId = useMemo(() => nanoid(), [])\n const panelId = useMemo(() => nanoid(), [])\n\n useLayoutEffect(() => {\n if (panelExpanded) setPanelVisible(true)\n }, [panelExpanded])\n\n return (\n <Styled.Root\n {...restProps}\n {...sizeProps}\n id={id}\n disabled={disabled}\n loading={loading}\n expanded={panelExpanded}\n borderRadius={borderRadius}\n data-accordion-item\n ref={ref}\n >\n <Styled.Heading\n as={headingAs}\n onClick={() => {\n if (!disabled) {\n setPanelExpanded(!panelExpanded)\n }\n }}\n >\n <Styled.Button\n id={controlId}\n type='button'\n data-accordion-control\n aria-controls={panelId}\n aria-expanded={panelVisible}\n aria-disabled={Boolean(panelVisible && (disabled || (expanded !== undefined && !onExpandedChange)))}\n disabled={disabled}\n onClick={(evt) => {\n evt.stopPropagation()\n setPanelExpanded(!panelExpanded)\n }}\n >\n {loading ? (\n <Styled.Header {...sizeProps} sizes={embedded ? SIZES_HEADER_EMBEDDED : SIZES_HEADER}>\n <Styled.Content>\n <Skeleton as='span' borderRadius={4} width='90%' data-accordion-skeleton>\n <Text {...titleProps} />\n </Skeleton>\n </Styled.Content>\n </Styled.Header>\n ) : isValidElement(header) ? (\n header\n ) : typeof header === 'function' ? (\n header({\n titleProps,\n subtitleProps,\n iconProps,\n })\n ) : (\n <Styled.Header {...sizeProps} sizes={embedded ? SIZES_HEADER_EMBEDDED : SIZES_HEADER}>\n {addon}\n <Styled.Content>\n {isValidElement(content) ? (\n content\n ) : typeof content === 'function' ? (\n content({\n titleProps,\n subtitleProps,\n })\n ) : (\n <>\n {isValidElement(title) ? (\n title\n ) : typeof title === 'function' ? (\n title(titleProps)\n ) : typeof title === 'string' || typeof title === 'number' ? (\n <Text {...titleProps}>{title}</Text>\n ) : null}\n {isValidElement(subtitle) ? (\n subtitle\n ) : typeof subtitle === 'function' ? (\n subtitle(subtitleProps)\n ) : typeof subtitle === 'string' || typeof subtitle === 'number' ? (\n <Text {...subtitleProps}>{subtitle}</Text>\n ) : null}\n </>\n )}\n </Styled.Content>\n <Styled.IconAnimation up={panelExpanded}>\n {isValidElement(icon) ? icon : typeof icon === 'function' ? icon(iconProps) : <Icon {...iconProps} />}\n </Styled.IconAnimation>\n </Styled.Header>\n )}\n </Styled.Button>\n </Styled.Heading>\n <Styled.Panel\n id={panelId}\n role='region'\n aria-labelledby={controlId}\n hidden={!panelVisible}\n onTransitionEnd={(evt) => {\n if (evt.propertyName === 'opacity' && !panelExpanded) {\n setPanelVisible(false)\n }\n }}\n >\n {loading ? (\n <Styled.Details {...sizeProps} sizes={embedded ? SIZES_DETAILS_EMBEDDED : SIZES_DETAILS}>\n <Skeleton as='span' borderRadius={4} width='100%' marginBottom='0.4em'>\n <Text {...subtitleProps} />\n </Skeleton>\n <Skeleton as='span' borderRadius={4} width='70%'>\n <Text {...subtitleProps} />\n </Skeleton>\n </Styled.Details>\n ) : isValidElement(panel) ? (\n panel\n ) : (\n <Styled.Details {...sizeProps} sizes={embedded ? SIZES_DETAILS_EMBEDDED : SIZES_DETAILS}>\n {children}\n </Styled.Details>\n )}\n </Styled.Panel>\n </Styled.Root>\n )\n }),\n {\n displayName: COMPONENT_NAME,\n sizes: SIZES,\n }\n)\n\nexport { AccordionItem }\n"],"names":["AccordionItem","withMergedProps","forwardRef","props","ref","size","defaultExpanded","headingAs","borderRadius","sizeXXS","sizeXS","sizeS","sizeM","sizeL","sizeXL","id","header","addon","content","title","subtitle","icon","panel","children","loading","disabled","expanded","embedded","onExpandedChange","restProps","useAccordionPanelProps","sizeProps","iconProps","preset","name","sizes","SIZES_ICON","titleProps","as","appearance","wordBreak","color","SIZES_TITLE","subtitleProps","SIZES_SUBTITLE","panelExpanded","setPanelExpanded","useAccordionPanel","panelVisible","setPanelVisible","useState","controlId","useMemo","nanoid","panelId","useLayoutEffect","_jsxs","Styled","_jsx","jsx","onClick","type","Boolean","undefined","evt","stopPropagation","SIZES_HEADER_EMBEDDED","SIZES_HEADER","Skeleton","width","Text","isValidElement","jsxs","_Fragment","up","Icon","role","hidden","onTransitionEnd","propertyName","SIZES_DETAILS_EMBEDDED","SIZES_DETAILS","marginBottom","displayName","SIZES"],"mappings":"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"}
1
+ {"version":3,"file":"AccordionItem.js","sources":["../../../../src/components/AccordionItem/AccordionItem.tsx"],"sourcesContent":["import { forwardRef, useState, isValidElement, useLayoutEffect, useMemo } from 'react'\nimport { nanoid } from 'nanoid'\nimport { withMergedProps } from 'hocs/withMergedProps'\nimport { Text } from 'components/Text'\nimport { Icon } from 'components/Icon'\nimport { Skeleton } from 'components/Skeleton'\nimport type { IconProps } from 'components/Icon'\nimport type { TextProps } from 'components/Text'\nimport { useAccordionPanel } from './useAccordionPanel'\nimport { useAccordionPanelProps } from './useAccordionPanelProps'\nimport {\n SIZES,\n SIZES_HEADER,\n SIZES_HEADER_EMBEDDED,\n SIZES_DETAILS,\n SIZES_DETAILS_EMBEDDED,\n SIZES_TITLE,\n SIZES_SUBTITLE,\n SIZES_ICON,\n} from './sizes'\nimport type { AccordionItemProps } from './types'\nimport * as Styled from './style'\n\nconst COMPONENT_NAME = 'AccordionItem'\n\n/**\n *\n * Компонент для создания сворачиваемой секции контента.\n *\n * Поддерживается \"ref\" и все нативные атрибуты \\<section\\> элемента.\n *\n * Дизайн соответствует [рекомендациям WAI-ARIA](https://www.w3.org/WAI/ARIA/apg/patterns/accordion/).\n *\n * @visibleName Accordion.Item\n */\nconst AccordionItem: React.ForwardRefExoticComponent<AccordionItemProps> = withMergedProps<\n AccordionItemProps,\n HTMLElement\n>(\n forwardRef((props, ref) => {\n const {\n size = 'm',\n defaultExpanded = false,\n headingAs = 'h3',\n borderRadius = 0,\n sizeXXS,\n sizeXS,\n sizeS,\n sizeM,\n sizeL,\n sizeXL,\n id,\n header,\n addon,\n content,\n title,\n subtitle,\n icon,\n panel,\n children,\n loading,\n disabled,\n expanded,\n embedded,\n onExpandedChange,\n ...restProps\n } = useAccordionPanelProps(props)\n\n const sizeProps = {\n size,\n sizeXXS,\n sizeXS,\n sizeS,\n sizeM,\n sizeL,\n sizeXL,\n }\n\n const iconProps: IconProps = {\n ...sizeProps,\n preset: 'brand',\n name: 'chevronDown',\n sizes: SIZES_ICON,\n }\n\n const titleProps: TextProps = {\n ...sizeProps,\n as: 'span',\n appearance: 'subheading-compact',\n wordBreak: 'break-word',\n color: 'inherit',\n sizes: SIZES_TITLE,\n }\n\n const subtitleProps: TextProps = {\n ...sizeProps,\n as: 'span',\n appearance: 'body',\n wordBreak: 'break-word',\n color: 'inherit',\n sizes: SIZES_SUBTITLE,\n }\n\n const { panelExpanded, setPanelExpanded } = useAccordionPanel({\n id,\n expanded,\n defaultExpanded,\n onExpandedChange,\n })\n\n const [panelVisible, setPanelVisible] = useState<boolean>(panelExpanded)\n\n const controlId = useMemo(() => nanoid(), [])\n const panelId = useMemo(() => nanoid(), [])\n\n useLayoutEffect(() => {\n if (panelExpanded) setPanelVisible(true)\n }, [panelExpanded])\n\n return (\n <Styled.Root\n {...restProps}\n {...sizeProps}\n id={id}\n disabled={disabled}\n loading={loading}\n expanded={panelExpanded}\n borderRadius={borderRadius}\n data-accordion-item\n ref={ref}\n >\n <Styled.Heading\n as={headingAs}\n onClick={() => {\n if (!disabled) {\n setPanelExpanded(!panelExpanded)\n }\n }}\n >\n <Styled.Button\n id={controlId}\n type='button'\n data-accordion-control\n aria-controls={panelId}\n aria-expanded={panelVisible}\n aria-disabled={Boolean(panelVisible && (disabled || (expanded !== undefined && !onExpandedChange)))}\n disabled={disabled}\n onClick={(evt) => {\n evt.stopPropagation()\n setPanelExpanded(!panelExpanded)\n }}\n >\n {loading ? (\n <Styled.Header {...sizeProps} sizes={embedded ? SIZES_HEADER_EMBEDDED : SIZES_HEADER}>\n <Styled.Content>\n <Skeleton as='span' borderRadius={4} width='90%' data-accordion-skeleton>\n <Text {...titleProps} />\n </Skeleton>\n </Styled.Content>\n </Styled.Header>\n ) : isValidElement(header) ? (\n header\n ) : typeof header === 'function' ? (\n header({\n titleProps,\n subtitleProps,\n iconProps,\n })\n ) : (\n <Styled.Header {...sizeProps} sizes={embedded ? SIZES_HEADER_EMBEDDED : SIZES_HEADER}>\n {addon}\n <Styled.Content>\n {isValidElement(content) ? (\n content\n ) : typeof content === 'function' ? (\n content({\n titleProps,\n subtitleProps,\n })\n ) : (\n <>\n {isValidElement(title) ? (\n title\n ) : typeof title === 'function' ? (\n title(titleProps)\n ) : typeof title === 'string' || typeof title === 'number' ? (\n <Text {...titleProps}>{title}</Text>\n ) : null}\n {isValidElement(subtitle) ? (\n subtitle\n ) : typeof subtitle === 'function' ? (\n subtitle(subtitleProps)\n ) : typeof subtitle === 'string' || typeof subtitle === 'number' ? (\n <Text {...subtitleProps}>{subtitle}</Text>\n ) : null}\n </>\n )}\n </Styled.Content>\n <Styled.IconAnimation up={panelExpanded}>\n {isValidElement(icon) ? icon : typeof icon === 'function' ? icon(iconProps) : <Icon {...iconProps} />}\n </Styled.IconAnimation>\n </Styled.Header>\n )}\n </Styled.Button>\n </Styled.Heading>\n <Styled.Panel\n id={panelId}\n role='region'\n aria-labelledby={controlId}\n hidden={!panelVisible}\n onTransitionEnd={(evt) => {\n if (evt.propertyName === 'opacity' && !panelExpanded) {\n setPanelVisible(false)\n }\n }}\n >\n {loading ? (\n <Styled.Details {...sizeProps} sizes={embedded ? SIZES_DETAILS_EMBEDDED : SIZES_DETAILS}>\n <Skeleton as='span' borderRadius={4} width='100%' marginBottom='0.4em'>\n <Text {...subtitleProps} />\n </Skeleton>\n <Skeleton as='span' borderRadius={4} width='70%'>\n <Text {...subtitleProps} />\n </Skeleton>\n </Styled.Details>\n ) : isValidElement(panel) ? (\n panel\n ) : (\n <Styled.Details {...sizeProps} sizes={embedded ? SIZES_DETAILS_EMBEDDED : SIZES_DETAILS}>\n {children}\n </Styled.Details>\n )}\n </Styled.Panel>\n </Styled.Root>\n )\n }),\n {\n displayName: COMPONENT_NAME,\n sizes: SIZES,\n }\n)\n\nexport { AccordionItem }\n"],"names":["AccordionItem","withMergedProps","forwardRef","props","ref","size","defaultExpanded","headingAs","borderRadius","sizeXXS","sizeXS","sizeS","sizeM","sizeL","sizeXL","id","header","addon","content","title","subtitle","icon","panel","children","loading","disabled","expanded","embedded","onExpandedChange","restProps","useAccordionPanelProps","sizeProps","iconProps","preset","name","sizes","SIZES_ICON","titleProps","as","appearance","wordBreak","color","SIZES_TITLE","subtitleProps","SIZES_SUBTITLE","panelExpanded","setPanelExpanded","useAccordionPanel","panelVisible","setPanelVisible","useState","controlId","useMemo","nanoid","panelId","useLayoutEffect","_jsxs","Styled","_jsx","jsx","onClick","type","Boolean","undefined","evt","stopPropagation","SIZES_HEADER_EMBEDDED","SIZES_HEADER","Skeleton","width","Text","isValidElement","jsxs","_Fragment","up","Icon","role","hidden","onTransitionEnd","propertyName","SIZES_DETAILS_EMBEDDED","SIZES_DETAILS","marginBottom","displayName","SIZES"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{forwardRef,useState,useMemo,useLayoutEffect,isValidElement}from'react';import{nanoid}from'nanoid';import{withMergedProps}from'../../hocs/withMergedProps.mjs';import{useAccordionPanelProps,useAccordionPanel}from'./hooks.mjs';import{SIZES,SIZES_HEADER_EMBEDDED,SIZES_HEADER,SIZES_DETAILS_EMBEDDED,SIZES_DETAILS,SIZES_ICON,SIZES_TITLE,SIZES_SUBTITLE}from'./sizes.mjs';import{Root,Heading,Button,Header,Content,IconAnimation,Panel,Details}from'./style.mjs';import{jsxs,jsx,Fragment}from'react/jsx-runtime';import{Skeleton}from'../Skeleton/Skeleton.mjs';import{Text}from'../Text/Text.mjs';import{Icon}from'../Icon/Icon.mjs';const AccordionItem=withMergedProps(forwardRef(((e,n)=>{const{size:o="m",defaultExpanded:i=!1,headingAs:s="h3",borderRadius:t=0,sizeXXS:d,sizeXS:r,sizeS:a,sizeM:l,sizeL:c,sizeXL:E,id:S,header:p,addon:m,content:x,title:I,subtitle:u,icon:h,panel:f,children:D,loading:j,disabled:_,expanded:b,embedded:z,onExpandedChange:T,...A}=useAccordionPanelProps(e);const Z={size:o,sizeXXS:d,sizeXS:r,sizeS:a,sizeM:l,sizeL:c,sizeXL:E};const g={...Z,preset:'brand',name:'chevronDown',sizes:SIZES_ICON};const y={...Z,as:'span',appearance:'subheading-compact',wordBreak:'break-word',color:'inherit',sizes:SIZES_TITLE};const P={...Z,as:'span',appearance:'body',wordBreak:'break-word',color:'inherit',sizes:SIZES_SUBTITLE};const{panelExpanded:L,setPanelExpanded:R}=useAccordionPanel({id:S,expanded:b,defaultExpanded:i,onExpandedChange:T});const[k,B]=useState(L);const M=useMemo((()=>nanoid()),[]);const w=useMemo((()=>nanoid()),[]);return useLayoutEffect((()=>{L&&B(!0)}),[L]),jsxs(Root,{...A,...Z,id:S,disabled:_,loading:j,expanded:L,borderRadius:t,"data-accordion-item":!0,ref:n,children:[jsx(Heading,{as:s,onClick:()=>{_||R(!L)},children:jsx(Button,{id:M,type:"button","data-accordion-control":!0,"aria-controls":w,"aria-expanded":k,"aria-disabled":Boolean(k&&(_||b!==void 0&&!T)),disabled:_,onClick:e=>{e.stopPropagation(),R(!L)},children:j?jsx(Header,{...Z,sizes:z?SIZES_HEADER_EMBEDDED:SIZES_HEADER,children:jsx(Content,{children:jsx(Skeleton,{as:"span",borderRadius:4,width:"90%","data-accordion-skeleton":!0,children:jsx(Text,{...y})})})}):isValidElement(p)?p:typeof p=='function'?p({titleProps:y,subtitleProps:P,iconProps:g}):jsxs(Header,{...Z,sizes:z?SIZES_HEADER_EMBEDDED:SIZES_HEADER,children:[m,jsx(Content,{children:isValidElement(x)?x:typeof x=='function'?x({titleProps:y,subtitleProps:P}):jsxs(Fragment,{children:[isValidElement(I)?I:typeof I=='function'?I(y):typeof I=='string'||typeof I=='number'?jsx(Text,{...y,children:I}):null,isValidElement(u)?u:typeof u=='function'?u(P):typeof u=='string'||typeof u=='number'?jsx(Text,{...P,children:u}):null]})}),jsx(IconAnimation,{up:L,children:isValidElement(h)?h:typeof h=='function'?h(g):jsx(Icon,{...g})})]})})}),jsx(Panel,{id:w,role:"region","aria-labelledby":M,hidden:!k,onTransitionEnd:e=>{e.propertyName!=='opacity'||L||B(!1)},children:j?jsxs(Details,{...Z,sizes:z?SIZES_DETAILS_EMBEDDED:SIZES_DETAILS,children:[jsx(Skeleton,{as:"span",borderRadius:4,width:"100%",marginBottom:"0.4em",children:jsx(Text,{...P})}),jsx(Skeleton,{as:"span",borderRadius:4,width:"70%",children:jsx(Text,{...P})})]}):isValidElement(f)?f:jsx(Details,{...Z,sizes:z?SIZES_DETAILS_EMBEDDED:SIZES_DETAILS,children:D})})]})})),{displayName:'AccordionItem',sizes:SIZES});export{AccordionItem};
1
+ import{forwardRef,useState,useMemo,useLayoutEffect,isValidElement}from'react';import{nanoid}from'nanoid';import{withMergedProps}from'../../hocs/withMergedProps.mjs';import{useAccordionPanel}from'./useAccordionPanel.mjs';import{useAccordionPanelProps}from'./useAccordionPanelProps.mjs';import{SIZES,SIZES_HEADER_EMBEDDED,SIZES_HEADER,SIZES_DETAILS_EMBEDDED,SIZES_DETAILS,SIZES_ICON,SIZES_TITLE,SIZES_SUBTITLE}from'./sizes.mjs';import{Root,Heading,Button,Header,Content,IconAnimation,Panel,Details}from'./style.mjs';import{jsxs,jsx,Fragment}from'react/jsx-runtime';import{Skeleton}from'../Skeleton/Skeleton.mjs';import{Text}from'../Text/Text.mjs';import{Icon}from'../Icon/Icon.mjs';const AccordionItem=withMergedProps(forwardRef(((e,o)=>{const{size:n="m",defaultExpanded:i=!1,headingAs:s="h3",borderRadius:t=0,sizeXXS:r,sizeXS:d,sizeS:a,sizeM:l,sizeL:c,sizeXL:E,id:p,header:S,addon:m,content:x,title:u,subtitle:I,icon:f,panel:h,children:D,loading:j,disabled:A,expanded:_,embedded:b,onExpandedChange:z,...T}=useAccordionPanelProps(e);const P={size:n,sizeXXS:r,sizeXS:d,sizeS:a,sizeM:l,sizeL:c,sizeXL:E};const Z={...P,preset:'brand',name:'chevronDown',sizes:SIZES_ICON};const g={...P,as:'span',appearance:'subheading-compact',wordBreak:'break-word',color:'inherit',sizes:SIZES_TITLE};const y={...P,as:'span',appearance:'body',wordBreak:'break-word',color:'inherit',sizes:SIZES_SUBTITLE};const{panelExpanded:L,setPanelExpanded:R}=useAccordionPanel({id:p,expanded:_,defaultExpanded:i,onExpandedChange:z});const[B,M]=useState(L);const k=useMemo((()=>nanoid()),[]);const w=useMemo((()=>nanoid()),[]);return useLayoutEffect((()=>{L&&M(!0)}),[L]),jsxs(Root,{...T,...P,id:p,disabled:A,loading:j,expanded:L,borderRadius:t,"data-accordion-item":!0,ref:o,children:[jsx(Heading,{as:s,onClick:()=>{A||R(!L)},children:jsx(Button,{id:k,type:"button","data-accordion-control":!0,"aria-controls":w,"aria-expanded":B,"aria-disabled":Boolean(B&&(A||_!==void 0&&!z)),disabled:A,onClick:e=>{e.stopPropagation(),R(!L)},children:j?jsx(Header,{...P,sizes:b?SIZES_HEADER_EMBEDDED:SIZES_HEADER,children:jsx(Content,{children:jsx(Skeleton,{as:"span",borderRadius:4,width:"90%","data-accordion-skeleton":!0,children:jsx(Text,{...g})})})}):isValidElement(S)?S:typeof S=='function'?S({titleProps:g,subtitleProps:y,iconProps:Z}):jsxs(Header,{...P,sizes:b?SIZES_HEADER_EMBEDDED:SIZES_HEADER,children:[m,jsx(Content,{children:isValidElement(x)?x:typeof x=='function'?x({titleProps:g,subtitleProps:y}):jsxs(Fragment,{children:[isValidElement(u)?u:typeof u=='function'?u(g):typeof u=='string'||typeof u=='number'?jsx(Text,{...g,children:u}):null,isValidElement(I)?I:typeof I=='function'?I(y):typeof I=='string'||typeof I=='number'?jsx(Text,{...y,children:I}):null]})}),jsx(IconAnimation,{up:L,children:isValidElement(f)?f:typeof f=='function'?f(Z):jsx(Icon,{...Z})})]})})}),jsx(Panel,{id:w,role:"region","aria-labelledby":k,hidden:!B,onTransitionEnd:e=>{e.propertyName!=='opacity'||L||M(!1)},children:j?jsxs(Details,{...P,sizes:b?SIZES_DETAILS_EMBEDDED:SIZES_DETAILS,children:[jsx(Skeleton,{as:"span",borderRadius:4,width:"100%",marginBottom:"0.4em",children:jsx(Text,{...y})}),jsx(Skeleton,{as:"span",borderRadius:4,width:"70%",children:jsx(Text,{...y})})]}):isValidElement(h)?h:jsx(Details,{...P,sizes:b?SIZES_DETAILS_EMBEDDED:SIZES_DETAILS,children:D})})]})})),{displayName:'AccordionItem',sizes:SIZES});export{AccordionItem};
2
2
  //# sourceMappingURL=AccordionItem.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"AccordionItem.mjs","sources":["../../../../src/components/AccordionItem/AccordionItem.tsx"],"sourcesContent":["import { forwardRef, useState, isValidElement, useLayoutEffect, useMemo } from 'react'\nimport { nanoid } from 'nanoid'\nimport { withMergedProps } from 'hocs/withMergedProps'\nimport { Text } from 'components/Text'\nimport { Icon } from 'components/Icon'\nimport { Skeleton } from 'components/Skeleton'\nimport type { IconProps } from 'components/Icon'\nimport type { TextProps } from 'components/Text'\nimport { useAccordionPanel, useAccordionPanelProps } from './hooks'\nimport {\n SIZES,\n SIZES_HEADER,\n SIZES_HEADER_EMBEDDED,\n SIZES_DETAILS,\n SIZES_DETAILS_EMBEDDED,\n SIZES_TITLE,\n SIZES_SUBTITLE,\n SIZES_ICON,\n} from './sizes'\nimport type { AccordionItemProps } from './types'\nimport * as Styled from './style'\n\nconst COMPONENT_NAME = 'AccordionItem'\n\n/**\n *\n * Компонент для создания сворачиваемой секции контента.\n *\n * Поддерживается \"ref\" и все нативные атрибуты \\<section\\> элемента.\n *\n * Дизайн соответствует [рекомендациям WAI-ARIA](https://www.w3.org/WAI/ARIA/apg/patterns/accordion/).\n *\n * @visibleName Accordion.Item\n */\nconst AccordionItem: React.ForwardRefExoticComponent<AccordionItemProps> = withMergedProps<\n AccordionItemProps,\n HTMLElement\n>(\n forwardRef((props, ref) => {\n const {\n size = 'm',\n defaultExpanded = false,\n headingAs = 'h3',\n borderRadius = 0,\n sizeXXS,\n sizeXS,\n sizeS,\n sizeM,\n sizeL,\n sizeXL,\n id,\n header,\n addon,\n content,\n title,\n subtitle,\n icon,\n panel,\n children,\n loading,\n disabled,\n expanded,\n embedded,\n onExpandedChange,\n ...restProps\n } = useAccordionPanelProps(props)\n\n const sizeProps = {\n size,\n sizeXXS,\n sizeXS,\n sizeS,\n sizeM,\n sizeL,\n sizeXL,\n }\n\n const iconProps: IconProps = {\n ...sizeProps,\n preset: 'brand',\n name: 'chevronDown',\n sizes: SIZES_ICON,\n }\n\n const titleProps: TextProps = {\n ...sizeProps,\n as: 'span',\n appearance: 'subheading-compact',\n wordBreak: 'break-word',\n color: 'inherit',\n sizes: SIZES_TITLE,\n }\n\n const subtitleProps: TextProps = {\n ...sizeProps,\n as: 'span',\n appearance: 'body',\n wordBreak: 'break-word',\n color: 'inherit',\n sizes: SIZES_SUBTITLE,\n }\n\n const { panelExpanded, setPanelExpanded } = useAccordionPanel({\n id,\n expanded,\n defaultExpanded,\n onExpandedChange,\n })\n\n const [panelVisible, setPanelVisible] = useState<boolean>(panelExpanded)\n\n const controlId = useMemo(() => nanoid(), [])\n const panelId = useMemo(() => nanoid(), [])\n\n useLayoutEffect(() => {\n if (panelExpanded) setPanelVisible(true)\n }, [panelExpanded])\n\n return (\n <Styled.Root\n {...restProps}\n {...sizeProps}\n id={id}\n disabled={disabled}\n loading={loading}\n expanded={panelExpanded}\n borderRadius={borderRadius}\n data-accordion-item\n ref={ref}\n >\n <Styled.Heading\n as={headingAs}\n onClick={() => {\n if (!disabled) {\n setPanelExpanded(!panelExpanded)\n }\n }}\n >\n <Styled.Button\n id={controlId}\n type='button'\n data-accordion-control\n aria-controls={panelId}\n aria-expanded={panelVisible}\n aria-disabled={Boolean(panelVisible && (disabled || (expanded !== undefined && !onExpandedChange)))}\n disabled={disabled}\n onClick={(evt) => {\n evt.stopPropagation()\n setPanelExpanded(!panelExpanded)\n }}\n >\n {loading ? (\n <Styled.Header {...sizeProps} sizes={embedded ? SIZES_HEADER_EMBEDDED : SIZES_HEADER}>\n <Styled.Content>\n <Skeleton as='span' borderRadius={4} width='90%' data-accordion-skeleton>\n <Text {...titleProps} />\n </Skeleton>\n </Styled.Content>\n </Styled.Header>\n ) : isValidElement(header) ? (\n header\n ) : typeof header === 'function' ? (\n header({\n titleProps,\n subtitleProps,\n iconProps,\n })\n ) : (\n <Styled.Header {...sizeProps} sizes={embedded ? SIZES_HEADER_EMBEDDED : SIZES_HEADER}>\n {addon}\n <Styled.Content>\n {isValidElement(content) ? (\n content\n ) : typeof content === 'function' ? (\n content({\n titleProps,\n subtitleProps,\n })\n ) : (\n <>\n {isValidElement(title) ? (\n title\n ) : typeof title === 'function' ? (\n title(titleProps)\n ) : typeof title === 'string' || typeof title === 'number' ? (\n <Text {...titleProps}>{title}</Text>\n ) : null}\n {isValidElement(subtitle) ? (\n subtitle\n ) : typeof subtitle === 'function' ? (\n subtitle(subtitleProps)\n ) : typeof subtitle === 'string' || typeof subtitle === 'number' ? (\n <Text {...subtitleProps}>{subtitle}</Text>\n ) : null}\n </>\n )}\n </Styled.Content>\n <Styled.IconAnimation up={panelExpanded}>\n {isValidElement(icon) ? icon : typeof icon === 'function' ? icon(iconProps) : <Icon {...iconProps} />}\n </Styled.IconAnimation>\n </Styled.Header>\n )}\n </Styled.Button>\n </Styled.Heading>\n <Styled.Panel\n id={panelId}\n role='region'\n aria-labelledby={controlId}\n hidden={!panelVisible}\n onTransitionEnd={(evt) => {\n if (evt.propertyName === 'opacity' && !panelExpanded) {\n setPanelVisible(false)\n }\n }}\n >\n {loading ? (\n <Styled.Details {...sizeProps} sizes={embedded ? SIZES_DETAILS_EMBEDDED : SIZES_DETAILS}>\n <Skeleton as='span' borderRadius={4} width='100%' marginBottom='0.4em'>\n <Text {...subtitleProps} />\n </Skeleton>\n <Skeleton as='span' borderRadius={4} width='70%'>\n <Text {...subtitleProps} />\n </Skeleton>\n </Styled.Details>\n ) : isValidElement(panel) ? (\n panel\n ) : (\n <Styled.Details {...sizeProps} sizes={embedded ? SIZES_DETAILS_EMBEDDED : SIZES_DETAILS}>\n {children}\n </Styled.Details>\n )}\n </Styled.Panel>\n </Styled.Root>\n )\n }),\n {\n displayName: COMPONENT_NAME,\n sizes: SIZES,\n }\n)\n\nexport { AccordionItem }\n"],"names":["AccordionItem","withMergedProps","forwardRef","props","ref","size","defaultExpanded","headingAs","borderRadius","sizeXXS","sizeXS","sizeS","sizeM","sizeL","sizeXL","id","header","addon","content","title","subtitle","icon","panel","children","loading","disabled","expanded","embedded","onExpandedChange","restProps","useAccordionPanelProps","sizeProps","iconProps","preset","name","sizes","SIZES_ICON","titleProps","as","appearance","wordBreak","color","SIZES_TITLE","subtitleProps","SIZES_SUBTITLE","panelExpanded","setPanelExpanded","useAccordionPanel","panelVisible","setPanelVisible","useState","controlId","useMemo","nanoid","panelId","useLayoutEffect","_jsxs","Styled","_jsx","onClick","type","Boolean","undefined","evt","stopPropagation","SIZES_HEADER_EMBEDDED","SIZES_HEADER","Skeleton","width","Text","isValidElement","_Fragment","up","Icon","role","hidden","onTransitionEnd","propertyName","SIZES_DETAILS_EMBEDDED","SIZES_DETAILS","marginBottom","displayName","SIZES"],"mappings":"knBAkCMA,MAAAA,cAAqEC,gBAIzEC,YAAW,CAACC,EAAOC,KACjB,MAAMC,KACJA,EAAO,IAAGC,gBACVA,GAAkB,EAAKC,UACvBA,EAAY,KAAIC,aAChBA,EAAe,EAACC,QAChBA,EAAOC,OACPA,EAAMC,MACNA,EAAKC,MACLA,EAAKC,MACLA,EAAKC,OACLA,EAAMC,GACNA,EAAEC,OACFA,EAAMC,MACNA,EAAKC,QACLA,EAAOC,MACPA,EAAKC,SACLA,EAAQC,KACRA,EAAIC,MACJA,EAAKC,SACLA,EAAQC,QACRA,EAAOC,SACPA,EAAQC,SACRA,EAAQC,SACRA,EAAQC,iBACRA,KACGC,GACDC,uBAAuB3B,GAE3B,MAAM4B,EAAY,CAChB1B,OACAI,UACAC,SACAC,QACAC,QACAC,QACAC,UAGF,MAAMkB,EAAuB,IACxBD,EACHE,OAAQ,QACRC,KAAM,cACNC,MAAOC,YAGT,MAAMC,EAAwB,IACzBN,EACHO,GAAI,OACJC,WAAY,qBACZC,UAAW,aACXC,MAAO,UACPN,MAAOO,aAGT,MAAMC,EAA2B,IAC5BZ,EACHO,GAAI,OACJC,WAAY,OACZC,UAAW,aACXC,MAAO,UACPN,MAAOS,gBAGT,MAAMC,cAAEA,EAAaC,iBAAEA,GAAqBC,kBAAkB,CAC5DhC,KACAW,WACApB,kBACAsB,qBAGF,MAAOoB,EAAcC,GAAmBC,SAAkBL,GAE1D,MAAMM,EAAYC,SAAQ,IAAMC,UAAU,IAC1C,MAAMC,EAAUF,SAAQ,IAAMC,UAAU,IAMxC,OAJAE,iBAAgB,KACVV,GAAeI,GAAgB,EAAK,GACvC,CAACJ,IAGFW,KAACC,KAAW,IACN5B,KACAE,EACJhB,GAAIA,EACJU,SAAUA,EACVD,QAASA,EACTE,SAAUmB,EACVrC,aAAcA,EACd,uBAAmB,EACnBJ,IAAKA,EAAImB,SAETmC,CAAAA,IAACD,QAAc,CACbnB,GAAI/B,EACJoD,QAASA,KACFlC,GACHqB,GAAkBD,EACpB,EACAtB,SAEFmC,IAACD,OAAa,CACZ1C,GAAIoC,EACJS,KAAK,SACL,0BAAsB,EACtB,gBAAeN,EACf,gBAAeN,EACf,gBAAea,QAAQb,IAAiBvB,GAAaC,SAAaoC,IAAclC,IAChFH,SAAUA,EACVkC,QAAUI,IACRA,EAAIC,kBACJlB,GAAkBD,EAAc,EAChCtB,SAEDC,EACCkC,IAACD,OAAa,IAAK1B,EAAWI,MAAOR,EAAWsC,sBAAwBC,aAAa3C,SACnFmC,IAACD,QAAc,CAAAlC,SACbmC,IAACS,SAAQ,CAAC7B,GAAG,OAAO9B,aAAc,EAAG4D,MAAM,MAAM,2BAAuB,EAAA7C,SACtEmC,IAACW,KAAI,IAAKhC,UAIdiC,eAAetD,GACjBA,SACSA,GAAW,WACpBA,EAAO,CACLqB,aACAM,gBACAX,cAGFwB,KAACC,OAAa,IAAK1B,EAAWI,MAAOR,EAAWsC,sBAAwBC,aAAa3C,UAClFN,EACDyC,IAACD,QAAc,CAAAlC,SACZ+C,eAAepD,GACdA,SACSA,GAAY,WACrBA,EAAQ,CACNmB,aACAM,kBAGFa,KAAAe,SAAA,CAAAhD,SACG,CAAA+C,eAAenD,GACdA,SACSA,GAAU,WACnBA,EAAMkB,UACGlB,GAAU,iBAAmBA,GAAU,SAChDuC,IAACW,KAAI,IAAKhC,EAAUd,SAAGJ,IACrB,KACHmD,eAAelD,GACdA,SACSA,GAAa,WACtBA,EAASuB,UACAvB,GAAa,iBAAmBA,GAAa,SACtDsC,IAACW,KAAI,IAAK1B,EAAapB,SAAGH,IACxB,UAIVsC,IAACD,cAAoB,CAACe,GAAI3B,EAActB,SACrC+C,eAAejD,GAAQA,SAAcA,GAAS,WAAaA,EAAKW,GAAa0B,IAACe,KAAI,IAAKzC,aAMlG0B,IAACD,MAAY,CACX1C,GAAIuC,EACJoB,KAAK,SACL,kBAAiBvB,EACjBwB,QAAS3B,EACT4B,gBAAkBb,IACZA,EAAIc,eAAiB,WAAchC,GACrCI,GAAgB,EAClB,EACA1B,SAEDC,EACCgC,KAACC,QAAc,IAAK1B,EAAWI,MAAOR,EAAWmD,uBAAyBC,cAAcxD,SAAA,CACtFmC,IAACS,SAAQ,CAAC7B,GAAG,OAAO9B,aAAc,EAAG4D,MAAM,OAAOY,aAAa,QAAOzD,SACpEmC,IAACW,KAAI,IAAK1B,MAEZe,IAACS,SAAQ,CAAC7B,GAAG,OAAO9B,aAAc,EAAG4D,MAAM,MAAK7C,SAC9CmC,IAACW,KAAI,IAAK1B,SAGZ2B,eAAehD,GACjBA,EAEAoC,IAACD,QAAc,IAAK1B,EAAWI,MAAOR,EAAWmD,uBAAyBC,cAAcxD,SACrFA,QAIK,IAGlB,CACE0D,YAtNmB,gBAuNnB9C,MAAO+C"}
1
+ {"version":3,"file":"AccordionItem.mjs","sources":["../../../../src/components/AccordionItem/AccordionItem.tsx"],"sourcesContent":["import { forwardRef, useState, isValidElement, useLayoutEffect, useMemo } from 'react'\nimport { nanoid } from 'nanoid'\nimport { withMergedProps } from 'hocs/withMergedProps'\nimport { Text } from 'components/Text'\nimport { Icon } from 'components/Icon'\nimport { Skeleton } from 'components/Skeleton'\nimport type { IconProps } from 'components/Icon'\nimport type { TextProps } from 'components/Text'\nimport { useAccordionPanel } from './useAccordionPanel'\nimport { useAccordionPanelProps } from './useAccordionPanelProps'\nimport {\n SIZES,\n SIZES_HEADER,\n SIZES_HEADER_EMBEDDED,\n SIZES_DETAILS,\n SIZES_DETAILS_EMBEDDED,\n SIZES_TITLE,\n SIZES_SUBTITLE,\n SIZES_ICON,\n} from './sizes'\nimport type { AccordionItemProps } from './types'\nimport * as Styled from './style'\n\nconst COMPONENT_NAME = 'AccordionItem'\n\n/**\n *\n * Компонент для создания сворачиваемой секции контента.\n *\n * Поддерживается \"ref\" и все нативные атрибуты \\<section\\> элемента.\n *\n * Дизайн соответствует [рекомендациям WAI-ARIA](https://www.w3.org/WAI/ARIA/apg/patterns/accordion/).\n *\n * @visibleName Accordion.Item\n */\nconst AccordionItem: React.ForwardRefExoticComponent<AccordionItemProps> = withMergedProps<\n AccordionItemProps,\n HTMLElement\n>(\n forwardRef((props, ref) => {\n const {\n size = 'm',\n defaultExpanded = false,\n headingAs = 'h3',\n borderRadius = 0,\n sizeXXS,\n sizeXS,\n sizeS,\n sizeM,\n sizeL,\n sizeXL,\n id,\n header,\n addon,\n content,\n title,\n subtitle,\n icon,\n panel,\n children,\n loading,\n disabled,\n expanded,\n embedded,\n onExpandedChange,\n ...restProps\n } = useAccordionPanelProps(props)\n\n const sizeProps = {\n size,\n sizeXXS,\n sizeXS,\n sizeS,\n sizeM,\n sizeL,\n sizeXL,\n }\n\n const iconProps: IconProps = {\n ...sizeProps,\n preset: 'brand',\n name: 'chevronDown',\n sizes: SIZES_ICON,\n }\n\n const titleProps: TextProps = {\n ...sizeProps,\n as: 'span',\n appearance: 'subheading-compact',\n wordBreak: 'break-word',\n color: 'inherit',\n sizes: SIZES_TITLE,\n }\n\n const subtitleProps: TextProps = {\n ...sizeProps,\n as: 'span',\n appearance: 'body',\n wordBreak: 'break-word',\n color: 'inherit',\n sizes: SIZES_SUBTITLE,\n }\n\n const { panelExpanded, setPanelExpanded } = useAccordionPanel({\n id,\n expanded,\n defaultExpanded,\n onExpandedChange,\n })\n\n const [panelVisible, setPanelVisible] = useState<boolean>(panelExpanded)\n\n const controlId = useMemo(() => nanoid(), [])\n const panelId = useMemo(() => nanoid(), [])\n\n useLayoutEffect(() => {\n if (panelExpanded) setPanelVisible(true)\n }, [panelExpanded])\n\n return (\n <Styled.Root\n {...restProps}\n {...sizeProps}\n id={id}\n disabled={disabled}\n loading={loading}\n expanded={panelExpanded}\n borderRadius={borderRadius}\n data-accordion-item\n ref={ref}\n >\n <Styled.Heading\n as={headingAs}\n onClick={() => {\n if (!disabled) {\n setPanelExpanded(!panelExpanded)\n }\n }}\n >\n <Styled.Button\n id={controlId}\n type='button'\n data-accordion-control\n aria-controls={panelId}\n aria-expanded={panelVisible}\n aria-disabled={Boolean(panelVisible && (disabled || (expanded !== undefined && !onExpandedChange)))}\n disabled={disabled}\n onClick={(evt) => {\n evt.stopPropagation()\n setPanelExpanded(!panelExpanded)\n }}\n >\n {loading ? (\n <Styled.Header {...sizeProps} sizes={embedded ? SIZES_HEADER_EMBEDDED : SIZES_HEADER}>\n <Styled.Content>\n <Skeleton as='span' borderRadius={4} width='90%' data-accordion-skeleton>\n <Text {...titleProps} />\n </Skeleton>\n </Styled.Content>\n </Styled.Header>\n ) : isValidElement(header) ? (\n header\n ) : typeof header === 'function' ? (\n header({\n titleProps,\n subtitleProps,\n iconProps,\n })\n ) : (\n <Styled.Header {...sizeProps} sizes={embedded ? SIZES_HEADER_EMBEDDED : SIZES_HEADER}>\n {addon}\n <Styled.Content>\n {isValidElement(content) ? (\n content\n ) : typeof content === 'function' ? (\n content({\n titleProps,\n subtitleProps,\n })\n ) : (\n <>\n {isValidElement(title) ? (\n title\n ) : typeof title === 'function' ? (\n title(titleProps)\n ) : typeof title === 'string' || typeof title === 'number' ? (\n <Text {...titleProps}>{title}</Text>\n ) : null}\n {isValidElement(subtitle) ? (\n subtitle\n ) : typeof subtitle === 'function' ? (\n subtitle(subtitleProps)\n ) : typeof subtitle === 'string' || typeof subtitle === 'number' ? (\n <Text {...subtitleProps}>{subtitle}</Text>\n ) : null}\n </>\n )}\n </Styled.Content>\n <Styled.IconAnimation up={panelExpanded}>\n {isValidElement(icon) ? icon : typeof icon === 'function' ? icon(iconProps) : <Icon {...iconProps} />}\n </Styled.IconAnimation>\n </Styled.Header>\n )}\n </Styled.Button>\n </Styled.Heading>\n <Styled.Panel\n id={panelId}\n role='region'\n aria-labelledby={controlId}\n hidden={!panelVisible}\n onTransitionEnd={(evt) => {\n if (evt.propertyName === 'opacity' && !panelExpanded) {\n setPanelVisible(false)\n }\n }}\n >\n {loading ? (\n <Styled.Details {...sizeProps} sizes={embedded ? SIZES_DETAILS_EMBEDDED : SIZES_DETAILS}>\n <Skeleton as='span' borderRadius={4} width='100%' marginBottom='0.4em'>\n <Text {...subtitleProps} />\n </Skeleton>\n <Skeleton as='span' borderRadius={4} width='70%'>\n <Text {...subtitleProps} />\n </Skeleton>\n </Styled.Details>\n ) : isValidElement(panel) ? (\n panel\n ) : (\n <Styled.Details {...sizeProps} sizes={embedded ? SIZES_DETAILS_EMBEDDED : SIZES_DETAILS}>\n {children}\n </Styled.Details>\n )}\n </Styled.Panel>\n </Styled.Root>\n )\n }),\n {\n displayName: COMPONENT_NAME,\n sizes: SIZES,\n }\n)\n\nexport { AccordionItem }\n"],"names":["AccordionItem","withMergedProps","forwardRef","props","ref","size","defaultExpanded","headingAs","borderRadius","sizeXXS","sizeXS","sizeS","sizeM","sizeL","sizeXL","id","header","addon","content","title","subtitle","icon","panel","children","loading","disabled","expanded","embedded","onExpandedChange","restProps","useAccordionPanelProps","sizeProps","iconProps","preset","name","sizes","SIZES_ICON","titleProps","as","appearance","wordBreak","color","SIZES_TITLE","subtitleProps","SIZES_SUBTITLE","panelExpanded","setPanelExpanded","useAccordionPanel","panelVisible","setPanelVisible","useState","controlId","useMemo","nanoid","panelId","useLayoutEffect","_jsxs","Styled","_jsx","onClick","type","Boolean","undefined","evt","stopPropagation","SIZES_HEADER_EMBEDDED","SIZES_HEADER","Skeleton","width","Text","isValidElement","_Fragment","up","Icon","role","hidden","onTransitionEnd","propertyName","SIZES_DETAILS_EMBEDDED","SIZES_DETAILS","marginBottom","displayName","SIZES"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ 'use strict';var React=require('react');var accordion=require('../../shared/context/accordion.js');exports.useAccordionPanel=({defaultExpanded:e=!1,id:n,expanded:a,onExpandedChange:t})=>{const d=React.useContext(accordion.AccordionPanelsContext);const[c,o]=React.useState(a??e);const r=d!==null&&typeof n=='string';return React.useLayoutEffect((()=>{r||a===void 0||o(a)}),[r,a]),{panelExpanded:r?d.expandedPanels.includes(n):c,setPanelExpanded:e=>{r?d.updatePanels(n,e):(a===void 0&&o(e),t&&t(e))}}};
2
+ //# sourceMappingURL=useAccordionPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAccordionPanel.js","sources":["../../../../src/components/AccordionItem/useAccordionPanel.ts"],"sourcesContent":["import { useContext, useState, useLayoutEffect } from 'react'\nimport { AccordionPanelsContext } from 'shared/context/accordion'\nimport type { AccordionItemProps } from './types'\n\nexport const useAccordionPanel = ({\n defaultExpanded = false,\n id,\n expanded,\n onExpandedChange,\n}: Pick<AccordionItemProps, 'id' | 'expanded' | 'defaultExpanded' | 'onExpandedChange'>): {\n panelExpanded: boolean\n setPanelExpanded: (update: boolean) => void\n} => {\n const context = useContext(AccordionPanelsContext)\n\n const [panelExpandedLocal, setPanelExpandedLocal] = useState<boolean>(expanded ?? defaultExpanded)\n\n const contextEnabled = context !== null && typeof id === 'string'\n\n useLayoutEffect(() => {\n if (!contextEnabled && expanded !== undefined) {\n setPanelExpandedLocal(expanded)\n }\n }, [contextEnabled, expanded])\n\n return {\n panelExpanded: contextEnabled ? context.expandedPanels.includes(id) : panelExpandedLocal,\n setPanelExpanded: (update) => {\n if (contextEnabled) {\n context.updatePanels(id, update)\n } else {\n if (expanded === undefined) setPanelExpandedLocal(update)\n if (onExpandedChange) onExpandedChange(update)\n }\n },\n }\n}\n"],"names":["useAccordionPanel","defaultExpanded","id","expanded","onExpandedChange","context","useContext","AccordionPanelsContext","panelExpandedLocal","setPanelExpandedLocal","useState","contextEnabled","useLayoutEffect","undefined","panelExpanded","expandedPanels","includes","setPanelExpanded","update","updatePanels"],"mappings":"6HAIiCA,EAC/BC,mBAAkB,EAClBC,KACAC,WACAC,uBAKA,MAAMC,EAAUC,iBAAWC,UAAAA,wBAE3B,MAAOC,EAAoBC,GAAyBC,MAAAA,SAAkBP,GAAYF,GAElF,MAAMU,EAAiBN,IAAY,aAAeH,GAAO,SAQzD,OANAU,MAAAA,iBAAgB,KACTD,GAAkBR,SAAaU,GAClCJ,EAAsBN,EACxB,GACC,CAACQ,EAAgBR,IAEb,CACLW,cAAeH,EAAiBN,EAAQU,eAAeC,SAASd,GAAMM,EACtES,iBAAmBC,IACbP,EACFN,EAAQc,aAAajB,EAAIgB,IAErBf,SAAaU,GAAWJ,EAAsBS,GAC9Cd,GAAkBA,EAAiBc,GACzC,EAEH"}
@@ -0,0 +1,2 @@
1
+ import{useContext,useState,useLayoutEffect}from'react';import{AccordionPanelsContext}from'../../shared/context/accordion.mjs';const useAccordionPanel=({defaultExpanded:e=!1,id:n,expanded:t,onExpandedChange:o})=>{const a=useContext(AccordionPanelsContext);const[d,s]=useState(t??e);const c=a!==null&&typeof n=='string';return useLayoutEffect((()=>{c||t===void 0||s(t)}),[c,t]),{panelExpanded:c?a.expandedPanels.includes(n):d,setPanelExpanded:e=>{c?a.updatePanels(n,e):(t===void 0&&s(e),o&&o(e))}}};export{useAccordionPanel};
2
+ //# sourceMappingURL=useAccordionPanel.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAccordionPanel.mjs","sources":["../../../../src/components/AccordionItem/useAccordionPanel.ts"],"sourcesContent":["import { useContext, useState, useLayoutEffect } from 'react'\nimport { AccordionPanelsContext } from 'shared/context/accordion'\nimport type { AccordionItemProps } from './types'\n\nexport const useAccordionPanel = ({\n defaultExpanded = false,\n id,\n expanded,\n onExpandedChange,\n}: Pick<AccordionItemProps, 'id' | 'expanded' | 'defaultExpanded' | 'onExpandedChange'>): {\n panelExpanded: boolean\n setPanelExpanded: (update: boolean) => void\n} => {\n const context = useContext(AccordionPanelsContext)\n\n const [panelExpandedLocal, setPanelExpandedLocal] = useState<boolean>(expanded ?? defaultExpanded)\n\n const contextEnabled = context !== null && typeof id === 'string'\n\n useLayoutEffect(() => {\n if (!contextEnabled && expanded !== undefined) {\n setPanelExpandedLocal(expanded)\n }\n }, [contextEnabled, expanded])\n\n return {\n panelExpanded: contextEnabled ? context.expandedPanels.includes(id) : panelExpandedLocal,\n setPanelExpanded: (update) => {\n if (contextEnabled) {\n context.updatePanels(id, update)\n } else {\n if (expanded === undefined) setPanelExpandedLocal(update)\n if (onExpandedChange) onExpandedChange(update)\n }\n },\n }\n}\n"],"names":["useAccordionPanel","defaultExpanded","id","expanded","onExpandedChange","context","useContext","AccordionPanelsContext","panelExpandedLocal","setPanelExpandedLocal","useState","contextEnabled","useLayoutEffect","undefined","panelExpanded","expandedPanels","includes","setPanelExpanded","update","updatePanels"],"mappings":"8HAIO,MAAMA,kBAAoBA,EAC/BC,mBAAkB,EAClBC,KACAC,WACAC,uBAKA,MAAMC,EAAUC,WAAWC,wBAE3B,MAAOC,EAAoBC,GAAyBC,SAAkBP,GAAYF,GAElF,MAAMU,EAAiBN,IAAY,aAAeH,GAAO,SAQzD,OANAU,iBAAgB,KACTD,GAAkBR,SAAaU,GAClCJ,EAAsBN,EACxB,GACC,CAACQ,EAAgBR,IAEb,CACLW,cAAeH,EAAiBN,EAAQU,eAAeC,SAASd,GAAMM,EACtES,iBAAmBC,IACbP,EACFN,EAAQc,aAAajB,EAAIgB,IAErBf,SAAaU,GAAWJ,EAAsBS,GAC9Cd,GAAkBA,EAAiBc,GACzC,EAEH"}
@@ -0,0 +1,2 @@
1
+ 'use strict';var React=require('react');var accordion=require('../../shared/context/accordion.js');var misc=require('../../shared/utils/misc.js');exports.useAccordionPanelProps=e=>{const r=React.useContext(accordion.AccordionPropsContext);return r?misc.deepmerge(r,e):e};
2
+ //# sourceMappingURL=useAccordionPanelProps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAccordionPanelProps.js","sources":["../../../../src/components/AccordionItem/useAccordionPanelProps.ts"],"sourcesContent":["import { useContext } from 'react'\nimport { AccordionPropsContext } from 'shared/context/accordion'\nimport { deepmerge } from 'shared/utils/misc'\n\nexport const useAccordionPanelProps = <T>(props: T): T => {\n const contextProps = useContext(AccordionPropsContext)\n\n return (contextProps ? deepmerge(contextProps, props) : props) as T\n}\n"],"names":["props","contextProps","useContext","AccordionPropsContext","deepmerge"],"mappings":"iLAI0CA,IACxC,MAAMC,EAAeC,iBAAWC,UAAAA,uBAEhC,OAAQF,EAAeG,KAASA,UAACH,EAAcD,GAASA,CAAK"}
@@ -0,0 +1,2 @@
1
+ import{useContext}from'react';import{AccordionPropsContext}from'../../shared/context/accordion.mjs';import{deepmerge}from'../../shared/utils/misc.mjs';const useAccordionPanelProps=o=>{const e=useContext(AccordionPropsContext);return e?deepmerge(e,o):o};export{useAccordionPanelProps};
2
+ //# sourceMappingURL=useAccordionPanelProps.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAccordionPanelProps.mjs","sources":["../../../../src/components/AccordionItem/useAccordionPanelProps.ts"],"sourcesContent":["import { useContext } from 'react'\nimport { AccordionPropsContext } from 'shared/context/accordion'\nimport { deepmerge } from 'shared/utils/misc'\n\nexport const useAccordionPanelProps = <T>(props: T): T => {\n const contextProps = useContext(AccordionPropsContext)\n\n return (contextProps ? deepmerge(contextProps, props) : props) as T\n}\n"],"names":["useAccordionPanelProps","props","contextProps","useContext","AccordionPropsContext","deepmerge"],"mappings":"uJAIaA,MAAAA,uBAA6BC,IACxC,MAAMC,EAAeC,WAAWC,uBAEhC,OAAQF,EAAeG,UAAUH,EAAcD,GAASA,CAAK"}
@@ -1,2 +1,2 @@
1
- 'use strict';var React=require('react');var nanoid=require('nanoid');var withMergedProps=require('../../hocs/withMergedProps.js');var useScrollMonitor=require('../../hooks/useScrollMonitor.js');var dom=require('../../shared/utils/dom.js');var misc=require('../../shared/utils/misc.js');var constants=require('../../shared/constants.js');var DropdownMenu=require('./DropdownMenu.js');var hooks=require('./hooks.js');var sizes=require('./sizes.js');var utils=require('./utils.js');var style=require('./style.js');var jsxRuntime=require('react/jsx-runtime');var FormInputLabel=require('../FormInputLabel/FormInputLabel.js');var FormInput=require('../FormInput/FormInput.js');var Chip=require('../Chip/Chip.js');var IconButton=require('../IconButton/IconButton.js');var MenuList=require('../MenuList/MenuList.js');var ListItem=require('../ListItem/ListItem.js');var InputCheckbox=require('../InputCheckbox/InputCheckbox.js');var MenuDivider=require('../MenuDivider/MenuDivider.js');const Dropdown=withMergedProps.withMergedProps(React.forwardRef(((e,o)=>{const{size:t="m",name:n="fox-dropdown",labelPosition:s="dynamic",searchable:r=!0,primary:a=!0,optionsMultiToggle:i=!0,iconProps:l={},menuProps:c={},loadingIconProps:u={},optionsEmptyIconProps:d={},loading:p,autoFocus:b,disableAutoScrollToSelectedOption:m,closeMenuOnScroll:g,scrollMonitorTarget:v,contrast:x,selectedOption:f,defaultSelectedOption:k,icon:C,inputMode:h,loadingMessage:I,loadingIcon:R,maxLength:j,multiple:y,clearable:w,onChangeInput:D,onCloseMenu:M,onOpenMenu:S,onSelectOption:P,options:L,loadOptions:z,groupSelectedOptions:E,optionsMultiToggleCaption:B,optionsEmptyMessage:T,optionsEmptyIcon:F,palette:q,placeholder:O,readOnly:K,required:X,status:H,sizeXXS:N,sizeXS:Z,sizeS:_,sizeM:A,sizeL:$,sizeXL:U,form:G,...J}=e;const Q={size:t,sizeXXS:N,sizeXS:Z,sizeS:_,sizeM:A,sizeL:$,sizeXL:U};const V={sizes:sizes.SIZES_ICON,color:J.disabled?'content-disabled':'content-onmain-tertiary'};const W=React.useMemo((()=>J.id??`${n}-${nanoid.nanoid()}`),[n,J.id]);const Y=React.useMemo((()=>nanoid.nanoid()),[]);const ee=React.useMemo((()=>nanoid.nanoid()),[]);const[oe,te]=hooks.useFilteredOptions({options:L});const[ne,se,re]=hooks.useLoadedOptions({loadOptions:z,options:L});const[ae,ie]=React.useState((()=>utils.getDropdownSelectedOption(f!==void 0?f:k,y)));const[le,ce]=React.useState((()=>utils.getDropdownInputText(ae,y)));const[ue,de]=React.useState(!1);const[pe,be]=React.useState(!1);const me=z?ne:oe;const ge=z?p??se:p;const ve=React.useMemo((()=>y?utils.groupDropdownOptions(me,ae):[[],[]]),[y,me,ae]);const xe=pe&&!J.disabled;const fe=X&&ae.length===0;const ke=Boolean(xe||le||ue);const Ce=ve[0].length>0&&ve[1].length===0;const he=ve[0].length>0&&ve[1].length>0;const Ie=React.useRef(null);const[Re,je]=React.useState(null);const ye=React.useRef(null);const we=React.useRef(null);const De=React.useRef(xe);const Me=React.useCallback((e=>{ce(e),D&&D(e)}),[D]);const Se=React.useCallback((e=>{z?re(e):te(e)}),[z,re,te]);const Pe=React.useMemo((()=>misc.createDebouncedCallback(Se,150)),[Se]);const preventBlur=e=>{e.target!==Ie.current&&e.target instanceof Node&&(e.currentTarget.contains(e.target)||c.renderInPortal&&xe&&Re&&Re.contains(e.target))&&e.preventDefault()};return useScrollMonitor.useScrollMonitor({target:v,onScrollStart:()=>{g&&xe&&(Ie.current?.focus(),be(!1))}}),React.useLayoutEffect((()=>{f!==void 0&&(y||xe||Me(utils.getDropdownInputText(f)),ie(utils.getDropdownSelectedOption(f,y)))}),[y,f,xe,Me]),React.useEffect((()=>{xe!==De.current&&(xe&&S&&S(),!xe&&M&&M(),De.current=xe)}),[xe,M,S]),React.useEffect((()=>{if(!y&&!m&&xe&&!ge&&le.length===0&&Re&&we.current){const e=Re.getBoundingClientRect();const o=we.current.getBoundingClientRect();(o.top<e.top||o.bottom>e.bottom)&&setTimeout((()=>{Re&&we.current&&Re.scrollTo(0,we.current.offsetTop)}),0)}}),[y,m,xe,ge,le,Re]),jsxRuntime.jsx(FormInputLabel.FormInputLabel,{...J,...Q,ref:o,id:W,labelId:Y,labelPosition:s,active:ke,onColored:x,primary:a,error:H==='error',success:H==='success',focus:ue,icon:[C,jsxRuntime.jsx(style.ChevronIcon,{up:xe},'chevron')],iconProps:{...Q,...V,...l},palette:{color:J.disabled?q.labelColorDisabled:q.labelColor,backgroundColor:J.disabled?q.backgroundColorDisabled:q.backgroundColor,backgroundColorHover:J.disabled?q.backgroundColorDisabled:q.backgroundColorHover,borderColor:J.disabled?q.borderColorDisabled:q.borderColor},onClick:e=>{J.onClick&&J.onClick(e),J.disabled||(Ie.current?.focus(),xe?Re&&e.target instanceof Node&&!Re.contains(e.target)&&(be(!1),Me(utils.getDropdownInputText(ae,y))):(be(!0),Se(''),r&&Me('')))},onPointerDown:e=>{J.onPointerDown&&J.onPointerDown(e),preventBlur(e)},onMouseDown:e=>{J.onMouseDown&&J.onMouseDown(e),window.PointerEvent||preventBlur(e)},onFocus:e=>{J.onFocus&&J.onFocus(e),de(!0),Ie.current&&e.target===Ie.current&&r&&!y&&!xe&&Me('')},onBlur:e=>{J.onBlur&&J.onBlur(e),e.currentTarget.contains(e.relatedTarget)||c.renderInPortal&&xe&&Re&&Re.contains(e.relatedTarget)||(de(!1),Me(utils.getDropdownInputText(ae,y)),be(!1))},input:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[!fe||r||K?null:jsxRuntime.jsx(style.InputMimic,{required:!0,type:"text",inputMode:"none",form:G,tabIndex:-1,onFocus:()=>{Ie.current?.focus()}}),jsxRuntime.jsx(FormInput.FormInput,{ref:Ie,role:"combobox","aria-controls":ee,"aria-expanded":xe,"aria-labelledby":J.label?Y:void 0,type:"text",autoComplete:"off",autoCapitalize:"off",autoCorrect:"off",spellCheck:"false",form:G,autoFocus:b,inputMode:r?h:'none',maxLength:j,placeholder:O,readOnly:K||!r,required:fe,disabled:J.disabled,value:le,palette:{color:q.color,colorDisabled:q.colorDisabled,placeholderColor:q.placeholderColor,placeholderColorDisabled:q.placeholderColorDisabled},onClick:e=>{xe&&e.currentTarget.selectionStart!==e.currentTarget.selectionEnd&&e.stopPropagation()},onChange:e=>{const o=e.currentTarget.value;Me(o),Pe(o),be(!0)},onKeyDown:e=>{if(constants.keyboardKeys.Enter.validate(e.key)&&(Me(utils.getDropdownInputText(ae,y)),be(!1)),!constants.keyboardKeys.Space.validate(e.key)||xe&&e.currentTarget.selectionStart!==0||(e.preventDefault(),xe||(Se(''),r&&Me('')),be((e=>!e))),constants.keyboardKeys.Esc.validate(e.key)&&be(!1),constants.keyboardKeys.Tab.validate(e.key)&&xe&&(e.preventDefault(),be(!1)),constants.keyboardKeys.ArrowDown.validate(e.key)&&xe&&ye.current)if(e.preventDefault(),!y&&we.current){const e=[...ye.current.children];const o=e.findIndex((e=>e.contains(we.current)));const t=e[o+1]??e[0];t instanceof HTMLElement&&dom.focusFirstFocusable(t)}else dom.focusFirstFocusable(ye.current);if(constants.keyboardKeys.ArrowUp.validate(e.key)&&xe&&ye.current)if(e.preventDefault(),!y&&we.current){const e=[...ye.current.children];const o=e.findIndex((e=>e.contains(we.current)));const t=e[o-1]??e[e.length-1];t instanceof HTMLElement&&dom.focusFirstFocusable(t)}else dom.focusLastFocusable(ye.current)}}),ae.map((e=>jsxRuntime.jsx("input",{type:"hidden",name:n,value:e.value,form:G,disabled:J.disabled||e.disabled},e.value)))]}),addon:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[y&&ae.length>0?jsxRuntime.jsx(Chip.Chip,{size:"xs",active:!0,black:!0,marginLeft:12,disabled:J.disabled,cursor:J.disabled?'not-allowed':void 0,text:ae.length,textProps:{appearance:'caption',size:'xs'},palette:J.disabled?{color:'content-disabled',colorHover:'content-disabled',backgroundColor:'bg-disabled-small',backgroundColorHover:'bg-disabled-small'}:void 0,onPointerDown:e=>{e.preventDefault()},onMouseDown:e=>{window.PointerEvent||e.preventDefault()},discardButtonProps:{square:!0,contrast:!J.disabled,onClick:e=>{e.stopPropagation(),K||(f===void 0&&ie([]),P&&P([]),Ie.current?.focus(),Me(''),Se(''),be(!0))}}}):null,!y&&w&&ae.length>0?jsxRuntime.jsx(IconButton.IconButton,{icon:"close",size:"l",square:!0,marginLeft:12,disabled:J.disabled,onClick:e=>{e.stopPropagation(),K||(f===void 0&&ie([]),P&&P(null),Ie.current?.focus(),Me(''),Se(''),be(!0))}}):null]}),dropdown:jsxRuntime.jsx(DropdownMenu.DropdownMenu,{...c,setRef:je,open:xe,popperReferenceId:W,secondary:!x,elevated:x,disableAutoFocus:!0,palette:{backgroundColor:q.menuBackgroundColor,borderColor:q.menuBorderColor},empty:me.length===0,loading:ge,loadingMessage:I,loadingIcon:R,loadingIconProps:{...Q,...V,...u},emptyMessage:T,emptyIcon:F,emptyIconProps:{...Q,...V,...d},onKeyDown:e=>{constants.keyboardKeys.Tab.validate(e.key)&&(e.preventDefault(),Ie.current?.focus(),be(!1)),constants.keyboardKeys.Enter.validate(e.key)&&(Ie.current?.focus(),Me(utils.getDropdownInputText(ae,y)),be(!1)),constants.keyboardKeys.Esc.validate(e.key)&&(Ie.current?.focus(),be(!1)),constants.keyboardKeys.Backspace.validate(e.key)&&!K&&(y||!y&&w)&&(f===void 0&&ie([]),P&&P(y?[]:null),Me(''),Se(''))},children:jsxRuntime.jsx(MenuList.MenuList,y?{ref:ye,id:ee,role:"listbox","aria-labelledby":J.label?Y:void 0,"aria-multiselectable":!0,children:le.length===0?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[i?jsxRuntime.jsx(ListItem.ListItem,{...Q,text:B,disabled:J.disabled,borderRadius:8,ellipsis:!1,textProps:{wordBreak:'break-word'},onClick:e=>{e.stopPropagation()},control:jsxRuntime.jsx(InputCheckbox.InputCheckbox,{sizes:sizes.SIZES_CHECKBOX,form:"none",name:n,checked:Ce,indeterminate:he,error:Boolean((Ce||he)&&H==='error'),success:Boolean((Ce||he)&&H==='success'),onChange:()=>{if(!K){const e=Ce||he?ae.filter((e=>e.disabled)):me.filter((e=>!e.disabled));f===void 0&&ie(e),P&&P(e)}}})}):null,i?jsxRuntime.jsx(MenuDivider.MenuDivider,{}):null,E?ve[0].map((e=>{const o=e.status??H;const t=o==='error';const s=o==='success';return React.createElement(ListItem.ListItem,{...Q,key:e.value,active:!0,text:e.text,danger:t,success:s,disabled:J.disabled||e.disabled,borderRadius:8,ellipsis:!1,textProps:{wordBreak:'break-word'},onClick:e=>{e.stopPropagation(),Ie.current?.focus()},control:jsxRuntime.jsx(InputCheckbox.InputCheckbox,{sizes:sizes.SIZES_CHECKBOX,form:"none",role:"option","aria-selected":!0,name:n,value:e.value,checked:!0,error:t,success:s,onChange:e=>{if(!K){const o=ae.filter((o=>o.value!==e.currentTarget.value));f===void 0&&ie(o),P&&P(o)}}})})})):null,E&&ve[0].length>0&&ve[1].length>0?jsxRuntime.jsx(MenuDivider.MenuDivider,{}):null,E?ve[1].map((e=>React.createElement(ListItem.ListItem,{...Q,key:e.value,text:e.text,disabled:J.disabled||e.disabled,borderRadius:8,ellipsis:!1,textProps:{wordBreak:'break-word'},onClick:e=>{e.stopPropagation(),Ie.current?.focus()},control:jsxRuntime.jsx(InputCheckbox.InputCheckbox,{sizes:sizes.SIZES_CHECKBOX,form:"none",role:"option","aria-selected":!1,name:n,value:e.value,checked:!1,onChange:()=>{if(!K){const o=[...ae,e];f===void 0&&ie(o),P&&P(o)}}})}))):null,!E&&me.map((e=>{const o=ae.findIndex((o=>o.value===e.value))!==-1;const t=e.status??H;const s=o&&t==='error';const r=o&&t==='success';return React.createElement(ListItem.ListItem,{...Q,key:e.value,text:e.text,danger:s,success:r,disabled:J.disabled||e.disabled,active:o,borderRadius:8,ellipsis:!1,textProps:{wordBreak:'break-word'},onClick:e=>{e.stopPropagation()},control:jsxRuntime.jsx(InputCheckbox.InputCheckbox,{sizes:sizes.SIZES_CHECKBOX,form:"none",role:"option","aria-selected":o,name:n,value:e.value,checked:o,error:s,success:r,onChange:t=>{if(!K){const n=o?ae.filter((e=>e.value!==t.currentTarget.value)):[...ae,e];f===void 0&&ie(n),P&&P(n)}}})})}))]}):jsxRuntime.jsx(jsxRuntime.Fragment,{children:me.map((e=>{const o=ae.findIndex((o=>o.value===e.value))!==-1;const t=e.status??H;const s=o&&t==='error';const r=o&&t==='success';return React.createElement(ListItem.ListItem,{...Q,key:e.value,text:e.text,danger:s,success:r,disabled:J.disabled||e.disabled,active:o,borderRadius:8,ellipsis:!1,textProps:{wordBreak:'break-word'},onClick:e=>{e.stopPropagation()},control:jsxRuntime.jsx(InputCheckbox.InputCheckbox,{sizes:sizes.SIZES_CHECKBOX,form:"none",role:"option","aria-selected":o,name:n,value:e.value,checked:o,error:s,success:r,onChange:t=>{if(!K){const n=o?ae.filter((e=>e.value!==t.currentTarget.value)):[...ae,e];f===void 0&&ie(n),P&&P(n)}}})})}))})}:{ref:ye,id:ee,role:"listbox","aria-labelledby":J.label?Y:void 0,children:me.map((e=>{const o=ae.findIndex((o=>o.value===e.value))!==-1;return React.createElement(ListItem.ListItem,{...Q,role:"option","aria-selected":o,ref:o?we:void 0,key:e.value,text:e.text,active:o,danger:Boolean(o&&H==='error'),success:Boolean(o&&H==='success'),disabled:J.disabled||e.disabled,borderRadius:8,ellipsis:!1,textProps:{wordBreak:'break-word'},onClick:o=>{if(o.stopPropagation(),!K){const o={...e};f===void 0&&(Me(utils.getDropdownInputText(o)),ie(utils.getDropdownSelectedOption(o))),P&&P(o),Ie.current?.focus(),be(!1)}}})}))})})})})),{sizes:sizes.SIZES,displayName:"Dropdown"});exports.COMPONENT_NAME="Dropdown",exports.Dropdown=Dropdown;
1
+ 'use strict';var React=require('react');var nanoid=require('nanoid');var withMergedProps=require('../../hocs/withMergedProps.js');var useScrollMonitor=require('../../hooks/useScrollMonitor.js');var dom=require('../../shared/utils/dom.js');var misc=require('../../shared/utils/misc.js');var constants=require('../../shared/constants.js');var DropdownMenu=require('./DropdownMenu.js');var hooks=require('./hooks.js');var sizes=require('./sizes.js');var utils=require('./utils.js');var style=require('./style.js');var jsxRuntime=require('react/jsx-runtime');var FormInputLabel=require('../FormInputLabel/FormInputLabel.js');var FormInput=require('../FormInput/FormInput.js');var Chip=require('../Chip/Chip.js');var IconButton=require('../IconButton/IconButton.js');var MenuList=require('../MenuList/MenuList.js');var ListItem=require('../ListItem/ListItem.js');var InputCheckbox=require('../InputCheckbox/InputCheckbox.js');var MenuDivider=require('../MenuDivider/MenuDivider.js');const Dropdown=withMergedProps.withMergedProps(React.forwardRef(((e,o)=>{const{size:t="m",name:n="fox-dropdown",labelPosition:s="dynamic",searchable:r=!0,primary:a=!0,optionsMultiToggle:i=!0,iconProps:l={},menuProps:c={},loadingIconProps:u={},optionsEmptyIconProps:d={},loading:p,autoFocus:b,disableAutoScrollToSelectedOption:m,closeMenuOnScroll:g,scrollMonitorTarget:v,contrast:x,selectedOption:f,defaultSelectedOption:k,icon:C,inputMode:h,loadingMessage:I,loadingIcon:R,maxLength:j,multiple:y,clearable:w,onChangeInput:D,onCloseMenu:M,onOpenMenu:S,onSelectOption:P,options:L,loadOptions:z,groupSelectedOptions:E,optionsMultiToggleCaption:B,optionsEmptyMessage:T,optionsEmptyIcon:F,palette:q,placeholder:O,readOnly:K,required:X,status:H,sizeXXS:N,sizeXS:Z,sizeS:_,sizeM:A,sizeL:$,sizeXL:U,form:G,label:J,...Q}=e;const V={size:t,sizeXXS:N,sizeXS:Z,sizeS:_,sizeM:A,sizeL:$,sizeXL:U};const W={sizes:sizes.SIZES_ICON,color:Q.disabled?'content-disabled':'content-onmain-tertiary'};const Y=React.useMemo((()=>Q.id??`${n}-${nanoid.nanoid()}`),[n,Q.id]);const ee=React.useMemo((()=>nanoid.nanoid()),[]);const oe=React.useMemo((()=>nanoid.nanoid()),[]);const[te,ne]=hooks.useFilteredOptions({options:L});const[se,re,ae]=hooks.useLoadedOptions({loadOptions:z,options:L});const[ie,le]=React.useState((()=>utils.getDropdownSelectedOption(f!==void 0?f:k,y)));const[ce,ue]=React.useState((()=>utils.getDropdownInputText(ie,y)));const[de,pe]=React.useState(!1);const[be,me]=React.useState(!1);const ge=z?se:te;const ve=z?p??re:p;const xe=React.useMemo((()=>y?utils.groupDropdownOptions(ge,ie):[[],[]]),[y,ge,ie]);const fe=be&&!Q.disabled;const ke=X&&ie.length===0;const Ce=Boolean(fe||ce||de);const he=xe[0].length>0&&xe[1].length===0;const Ie=xe[0].length>0&&xe[1].length>0;const Re=React.useRef(null);const[je,ye]=React.useState(null);const we=React.useRef(null);const De=React.useRef(null);const Me=React.useRef(fe);const Se=React.useCallback((e=>{ue(e),D&&D(e)}),[D]);const Pe=React.useCallback((e=>{z?ae(e):ne(e)}),[z,ae,ne]);const Le=React.useMemo((()=>misc.createDebouncedCallback(Pe,150)),[Pe]);const preventBlur=e=>{e.target!==Re.current&&e.target instanceof Node&&(e.currentTarget.contains(e.target)||c.renderInPortal&&fe&&je&&je.contains(e.target))&&e.preventDefault()};return useScrollMonitor.useScrollMonitor({target:v,onScrollStart:()=>{g&&fe&&(Re.current?.focus(),me(!1))}}),React.useLayoutEffect((()=>{f!==void 0&&(y||fe||Se(utils.getDropdownInputText(f)),le(utils.getDropdownSelectedOption(f,y)))}),[y,f,fe,Se]),React.useEffect((()=>{fe!==Me.current&&(fe&&S&&S(),!fe&&M&&M(),Me.current=fe)}),[fe,M,S]),React.useEffect((()=>{if(!y&&!m&&fe&&!ve&&ce.length===0&&je&&De.current){const e=je.getBoundingClientRect();const o=De.current.getBoundingClientRect();(o.top<e.top||o.bottom>e.bottom)&&setTimeout((()=>{je&&De.current&&je.scrollTo(0,De.current.offsetTop)}),0)}}),[y,m,fe,ve,ce,je]),jsxRuntime.jsx(FormInputLabel.FormInputLabel,{...Q,...V,ref:o,id:Y,onColored:x,primary:a,error:H==='error',success:H==='success',focus:de,icon:[C,jsxRuntime.jsx(style.ChevronIcon,{up:fe},'chevron')],iconProps:{...V,...W,...l},palette:{color:Q.disabled?q.labelColorDisabled:q.labelColor,backgroundColor:Q.disabled?q.backgroundColorDisabled:q.backgroundColor,backgroundColorHover:Q.disabled?q.backgroundColorDisabled:q.backgroundColorHover,borderColor:Q.disabled?q.borderColorDisabled:q.borderColor},onClick:e=>{Q.onClick&&Q.onClick(e),Q.disabled||(Re.current?.focus(),fe?je&&e.target instanceof Node&&!je.contains(e.target)&&(me(!1),Se(utils.getDropdownInputText(ie,y))):(me(!0),Pe(''),r&&Se('')))},onPointerDown:e=>{Q.onPointerDown&&Q.onPointerDown(e),preventBlur(e)},onMouseDown:e=>{Q.onMouseDown&&Q.onMouseDown(e),window.PointerEvent||preventBlur(e)},onFocus:e=>{Q.onFocus&&Q.onFocus(e),pe(!0),Re.current&&e.target===Re.current&&r&&!y&&!fe&&Se('')},onBlur:e=>{Q.onBlur&&Q.onBlur(e),e.currentTarget.contains(e.relatedTarget)||c.renderInPortal&&fe&&je&&je.contains(e.relatedTarget)||(pe(!1),Se(utils.getDropdownInputText(ie,y)),me(!1))},input:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[!ke||r||K?null:jsxRuntime.jsx(style.InputMimic,{required:!0,type:"text",inputMode:"none",form:G,tabIndex:-1,onFocus:()=>{Re.current?.focus()}}),jsxRuntime.jsx(FormInput.FormInput,{...V,ref:Re,role:"combobox","aria-controls":oe,"aria-expanded":fe,type:"text",autoComplete:"off",autoCapitalize:"off",autoCorrect:"off",spellCheck:"false",active:Ce,label:J,labelId:ee,labelPosition:s,form:G,autoFocus:b,inputMode:r?h:'none',maxLength:j,placeholder:O,readOnly:K||!r,required:ke,disabled:Q.disabled,value:ce,palette:{color:q.color,colorDisabled:q.colorDisabled,placeholderColor:q.placeholderColor,placeholderColorDisabled:q.placeholderColorDisabled},onClick:e=>{fe&&e.currentTarget.selectionStart!==e.currentTarget.selectionEnd&&e.stopPropagation()},onChange:e=>{const o=e.currentTarget.value;Se(o),Le(o),me(!0)},onKeyDown:e=>{if(constants.keyboardKeys.Enter.validate(e.key)&&(Se(utils.getDropdownInputText(ie,y)),me(!1)),!constants.keyboardKeys.Space.validate(e.key)||fe&&e.currentTarget.selectionStart!==0||(e.preventDefault(),fe||(Pe(''),r&&Se('')),me((e=>!e))),constants.keyboardKeys.Esc.validate(e.key)&&me(!1),constants.keyboardKeys.Tab.validate(e.key)&&fe&&(e.preventDefault(),me(!1)),constants.keyboardKeys.ArrowDown.validate(e.key)&&fe&&we.current)if(e.preventDefault(),!y&&De.current){const e=[...we.current.children];const o=e.findIndex((e=>e.contains(De.current)));const t=e[o+1]??e[0];t instanceof HTMLElement&&dom.focusFirstFocusable(t)}else dom.focusFirstFocusable(we.current);if(constants.keyboardKeys.ArrowUp.validate(e.key)&&fe&&we.current)if(e.preventDefault(),!y&&De.current){const e=[...we.current.children];const o=e.findIndex((e=>e.contains(De.current)));const t=e[o-1]??e[e.length-1];t instanceof HTMLElement&&dom.focusFirstFocusable(t)}else dom.focusLastFocusable(we.current)}}),ie.map((e=>jsxRuntime.jsx("input",{type:"hidden",name:n,value:e.value,form:G,disabled:Q.disabled||e.disabled},e.value)))]}),addon:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[y&&ie.length>0?jsxRuntime.jsx(Chip.Chip,{size:"xs",active:!0,black:!0,marginLeft:"var(--gap, 12px)",disabled:Q.disabled,cursor:Q.disabled?'not-allowed':void 0,text:ie.length,textProps:{appearance:'caption',size:'xs'},palette:Q.disabled?{color:'content-disabled',colorHover:'content-disabled',backgroundColor:'bg-disabled-small',backgroundColorHover:'bg-disabled-small'}:void 0,onPointerDown:e=>{e.preventDefault()},onMouseDown:e=>{window.PointerEvent||e.preventDefault()},discardButtonProps:{square:!0,contrast:!Q.disabled,onClick:e=>{e.stopPropagation(),K||(f===void 0&&le([]),P&&P([]),Re.current?.focus(),Se(''),Pe(''),me(!0))}}}):null,!y&&w&&ie.length>0?jsxRuntime.jsx(IconButton.IconButton,{icon:"close",size:"l",square:!0,marginLeft:"var(--gap, 12px)",disabled:Q.disabled,onClick:e=>{e.stopPropagation(),K||(f===void 0&&le([]),P&&P(null),Re.current?.focus(),Se(''),Pe(''),me(!0))}}):null]}),dropdown:jsxRuntime.jsx(DropdownMenu.DropdownMenu,{...c,setRef:ye,open:fe,popperReferenceId:Y,secondary:!x,elevated:x,disableAutoFocus:!0,palette:{backgroundColor:q.menuBackgroundColor,borderColor:q.menuBorderColor},empty:ge.length===0,loading:ve,loadingMessage:I,loadingIcon:R,loadingIconProps:{...V,...W,...u},emptyMessage:T,emptyIcon:F,emptyIconProps:{...V,...W,...d},onKeyDown:e=>{constants.keyboardKeys.Tab.validate(e.key)&&(e.preventDefault(),Re.current?.focus(),me(!1)),constants.keyboardKeys.Enter.validate(e.key)&&(Re.current?.focus(),Se(utils.getDropdownInputText(ie,y)),me(!1)),constants.keyboardKeys.Esc.validate(e.key)&&(Re.current?.focus(),me(!1)),constants.keyboardKeys.Backspace.validate(e.key)&&!K&&(y||!y&&w)&&(f===void 0&&le([]),P&&P(y?[]:null),Se(''),Pe(''))},children:jsxRuntime.jsx(MenuList.MenuList,y?{ref:we,id:oe,role:"listbox","aria-labelledby":J?ee:void 0,"aria-multiselectable":!0,children:ce.length===0?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[i?jsxRuntime.jsx(ListItem.ListItem,{...V,text:B,disabled:Q.disabled,borderRadius:8,ellipsis:!1,textProps:{wordBreak:'break-word'},onClick:e=>{e.stopPropagation()},control:jsxRuntime.jsx(InputCheckbox.InputCheckbox,{sizes:sizes.SIZES_CHECKBOX,form:"none",name:n,checked:he,indeterminate:Ie,error:Boolean((he||Ie)&&H==='error'),success:Boolean((he||Ie)&&H==='success'),onChange:()=>{if(!K){const e=he||Ie?ie.filter((e=>e.disabled)):ge.filter((e=>!e.disabled));f===void 0&&le(e),P&&P(e)}}})}):null,i?jsxRuntime.jsx(MenuDivider.MenuDivider,{}):null,E?xe[0].map((e=>{const o=e.status??H;const t=o==='error';const s=o==='success';return React.createElement(ListItem.ListItem,{...V,key:e.value,active:!0,text:e.text,danger:t,success:s,disabled:Q.disabled||e.disabled,borderRadius:8,ellipsis:!1,textProps:{wordBreak:'break-word'},onClick:e=>{e.stopPropagation(),Re.current?.focus()},control:jsxRuntime.jsx(InputCheckbox.InputCheckbox,{sizes:sizes.SIZES_CHECKBOX,form:"none",role:"option","aria-selected":!0,name:n,value:e.value,checked:!0,error:t,success:s,onChange:e=>{if(!K){const o=ie.filter((o=>o.value!==e.currentTarget.value));f===void 0&&le(o),P&&P(o)}}})})})):null,E&&xe[0].length>0&&xe[1].length>0?jsxRuntime.jsx(MenuDivider.MenuDivider,{}):null,E?xe[1].map((e=>React.createElement(ListItem.ListItem,{...V,key:e.value,text:e.text,disabled:Q.disabled||e.disabled,borderRadius:8,ellipsis:!1,textProps:{wordBreak:'break-word'},onClick:e=>{e.stopPropagation(),Re.current?.focus()},control:jsxRuntime.jsx(InputCheckbox.InputCheckbox,{sizes:sizes.SIZES_CHECKBOX,form:"none",role:"option","aria-selected":!1,name:n,value:e.value,checked:!1,onChange:()=>{if(!K){const o=[...ie,e];f===void 0&&le(o),P&&P(o)}}})}))):null,!E&&ge.map((e=>{const o=ie.findIndex((o=>o.value===e.value))!==-1;const t=e.status??H;const s=o&&t==='error';const r=o&&t==='success';return React.createElement(ListItem.ListItem,{...V,key:e.value,text:e.text,danger:s,success:r,disabled:Q.disabled||e.disabled,active:o,borderRadius:8,ellipsis:!1,textProps:{wordBreak:'break-word'},onClick:e=>{e.stopPropagation()},control:jsxRuntime.jsx(InputCheckbox.InputCheckbox,{sizes:sizes.SIZES_CHECKBOX,form:"none",role:"option","aria-selected":o,name:n,value:e.value,checked:o,error:s,success:r,onChange:t=>{if(!K){const n=o?ie.filter((e=>e.value!==t.currentTarget.value)):[...ie,e];f===void 0&&le(n),P&&P(n)}}})})}))]}):jsxRuntime.jsx(jsxRuntime.Fragment,{children:ge.map((e=>{const o=ie.findIndex((o=>o.value===e.value))!==-1;const t=e.status??H;const s=o&&t==='error';const r=o&&t==='success';return React.createElement(ListItem.ListItem,{...V,key:e.value,text:e.text,danger:s,success:r,disabled:Q.disabled||e.disabled,active:o,borderRadius:8,ellipsis:!1,textProps:{wordBreak:'break-word'},onClick:e=>{e.stopPropagation()},control:jsxRuntime.jsx(InputCheckbox.InputCheckbox,{sizes:sizes.SIZES_CHECKBOX,form:"none",role:"option","aria-selected":o,name:n,value:e.value,checked:o,error:s,success:r,onChange:t=>{if(!K){const n=o?ie.filter((e=>e.value!==t.currentTarget.value)):[...ie,e];f===void 0&&le(n),P&&P(n)}}})})}))})}:{ref:we,id:oe,role:"listbox","aria-labelledby":J?ee:void 0,children:ge.map((e=>{const o=ie.findIndex((o=>o.value===e.value))!==-1;return React.createElement(ListItem.ListItem,{...V,role:"option","aria-selected":o,ref:o?De:void 0,key:e.value,text:e.text,active:o,danger:Boolean(o&&H==='error'),success:Boolean(o&&H==='success'),disabled:Q.disabled||e.disabled,borderRadius:8,ellipsis:!1,textProps:{wordBreak:'break-word'},onClick:o=>{if(o.stopPropagation(),!K){const o={...e};f===void 0&&(Se(utils.getDropdownInputText(o)),le(utils.getDropdownSelectedOption(o))),P&&P(o),Re.current?.focus(),me(!1)}}})}))})})})})),{sizes:sizes.SIZES,displayName:"Dropdown"});exports.COMPONENT_NAME="Dropdown",exports.Dropdown=Dropdown;
2
2
  //# sourceMappingURL=Dropdown.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Dropdown.js","sources":["../../../../src/components/Dropdown/Dropdown.tsx"],"sourcesContent":["import { forwardRef, useState, useRef, useEffect, useLayoutEffect, useMemo, useCallback } from 'react'\nimport { nanoid } from 'nanoid'\nimport { withMergedProps } from 'hocs/withMergedProps'\nimport type { MergedProps } from 'hocs/withMergedProps'\nimport { useScrollMonitor } from 'hooks/useScrollMonitor'\nimport { focusFirstFocusable, focusLastFocusable } from 'shared/utils/dom'\nimport { createDebouncedCallback } from 'shared/utils/misc'\nimport { keyboardKeys } from 'shared/constants'\nimport type { Nullable } from 'shared/types'\nimport { FormInput } from 'components/FormInput'\nimport { FormInputLabel } from 'components/FormInputLabel'\nimport { MenuList } from 'components/MenuList'\nimport { MenuDivider } from 'components/MenuDivider'\nimport { ListItem } from 'components/ListItem'\nimport { InputCheckbox } from 'components/InputCheckbox'\nimport { Chip } from 'components/Chip'\nimport { IconButton } from 'components/IconButton'\nimport type { IconProps } from 'components/Icon'\nimport { DropdownMenu } from './DropdownMenu'\nimport { useFilteredOptions, useLoadedOptions } from './hooks'\nimport { SIZES, SIZES_CHECKBOX, SIZES_ICON } from './sizes'\nimport { getDropdownInputText, getDropdownSelectedOption, groupDropdownOptions } from './utils'\nimport * as Styled from './style'\nimport type { DropdownProps, DropdownOption } from './types'\n\nconst COMPONENT_NAME = 'Dropdown'\n\n/**\n *\n * Компонент для выбора одной или нескольких опций из числа доступных.\n *\n * Поддерживается \"ref\" и все нативные атрибуты \\<div\\> элемента.\n */\nconst Dropdown: React.ForwardRefExoticComponent<DropdownProps> = withMergedProps<DropdownProps, HTMLDivElement>(\n forwardRef<HTMLDivElement, MergedProps<DropdownProps>>((props, ref) => {\n const {\n size = 'm',\n name = 'fox-dropdown',\n labelPosition = 'dynamic',\n searchable = true,\n primary = true,\n optionsMultiToggle = true,\n iconProps = {},\n menuProps = {},\n loadingIconProps = {},\n optionsEmptyIconProps = {},\n loading,\n autoFocus,\n disableAutoScrollToSelectedOption,\n closeMenuOnScroll,\n scrollMonitorTarget,\n contrast,\n selectedOption,\n defaultSelectedOption,\n icon,\n inputMode,\n loadingMessage,\n loadingIcon,\n maxLength,\n multiple,\n clearable,\n onChangeInput,\n onCloseMenu,\n onOpenMenu,\n onSelectOption,\n options,\n loadOptions,\n groupSelectedOptions,\n optionsMultiToggleCaption,\n optionsEmptyMessage,\n optionsEmptyIcon,\n palette,\n placeholder,\n readOnly,\n required,\n status,\n sizeXXS,\n sizeXS,\n sizeS,\n sizeM,\n sizeL,\n sizeXL,\n form,\n ...rootProps\n } = props\n\n const sizeProps = {\n size,\n sizeXXS,\n sizeXS,\n sizeS,\n sizeM,\n sizeL,\n sizeXL,\n }\n\n const iconBaseProps: IconProps = {\n sizes: SIZES_ICON,\n color: rootProps.disabled ? 'content-disabled' : 'content-onmain-tertiary',\n }\n\n const formInputLabelId = useMemo(() => rootProps.id ?? `${name}-${nanoid()}`, [name, rootProps.id])\n const inputLabelId = useMemo(() => nanoid(), [])\n const menuListId = useMemo(() => nanoid(), [])\n\n const [filteredOptions, getFilteredOptions] = useFilteredOptions({\n options,\n })\n\n const [loadedOptions, optionsLoading, getLoadedOptions] = useLoadedOptions({\n loadOptions,\n options,\n })\n\n const [dropdownSelectedOption, setDropdownSelectedOption] = useState<DropdownOption[]>(() =>\n getDropdownSelectedOption(selectedOption !== undefined ? selectedOption : defaultSelectedOption, multiple)\n )\n\n const [inputText, setInputText] = useState<string>(() => getDropdownInputText(dropdownSelectedOption, multiple))\n\n const [focusWithin, setFocusWithin] = useState<boolean>(false)\n\n const [menuOpenRequest, setMenuOpenRequest] = useState<boolean>(false)\n\n const menuOptions: DropdownOption[] = loadOptions ? loadedOptions : filteredOptions\n const menuOptionsLoading = loadOptions ? (loading ?? optionsLoading) : loading\n\n const menuOptionsGroups: ReturnType<typeof groupDropdownOptions> = useMemo(\n () => (multiple ? groupDropdownOptions(menuOptions, dropdownSelectedOption) : [[], []]),\n [multiple, menuOptions, dropdownSelectedOption]\n )\n\n const menuOpen = menuOpenRequest && !rootProps.disabled\n\n const inputRequired = required && dropdownSelectedOption.length === 0\n const inputActive = Boolean(menuOpen || inputText || focusWithin)\n\n const multiToggleChecked = menuOptionsGroups[0].length > 0 && menuOptionsGroups[1].length === 0\n const multiToggleIndeterminate = menuOptionsGroups[0].length > 0 && menuOptionsGroups[1].length > 0\n\n const inputRef = useRef<HTMLInputElement>(null)\n const [menuRef, setMenuRef] = useState<Nullable<HTMLElement>>(null)\n const menuListRef = useRef<HTMLUListElement>(null)\n const selectedOptionRef = useRef<HTMLElement>(null)\n const menuOpenPrevRef = useRef<boolean>(menuOpen)\n\n const updateInputText = useCallback(\n (inputTextValue: string) => {\n setInputText(inputTextValue)\n\n if (onChangeInput) {\n onChangeInput(inputTextValue)\n }\n },\n [onChangeInput]\n )\n\n const updateOptions = useCallback(\n (inputTextValue: string) => {\n if (loadOptions) {\n getLoadedOptions(inputTextValue)\n } else {\n getFilteredOptions(inputTextValue)\n }\n },\n [loadOptions, getLoadedOptions, getFilteredOptions]\n )\n\n const updateOptionsDebounced = useMemo(() => {\n return createDebouncedCallback(updateOptions, 150)\n }, [updateOptions])\n\n const preventBlur = (evt: React.PointerEvent<HTMLDivElement> | React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n if (\n evt.target !== inputRef.current &&\n evt.target instanceof Node &&\n (evt.currentTarget.contains(evt.target) ||\n (menuProps.renderInPortal && menuOpen && menuRef && menuRef.contains(evt.target)))\n ) {\n evt.preventDefault()\n }\n }\n\n useScrollMonitor({\n target: scrollMonitorTarget,\n onScrollStart: () => {\n if (closeMenuOnScroll && menuOpen) {\n inputRef.current?.focus()\n setMenuOpenRequest(false)\n }\n },\n })\n\n useLayoutEffect(() => {\n if (selectedOption === undefined) return\n\n if (!multiple && !menuOpen) {\n updateInputText(getDropdownInputText(selectedOption))\n }\n setDropdownSelectedOption(getDropdownSelectedOption(selectedOption, multiple))\n }, [multiple, selectedOption, menuOpen, updateInputText])\n\n useEffect(() => {\n if (menuOpen === menuOpenPrevRef.current) return\n\n if (menuOpen && onOpenMenu) onOpenMenu()\n if (!menuOpen && onCloseMenu) onCloseMenu()\n\n menuOpenPrevRef.current = menuOpen\n }, [menuOpen, onCloseMenu, onOpenMenu])\n\n useEffect(() => {\n if (\n !multiple &&\n !disableAutoScrollToSelectedOption &&\n menuOpen &&\n !menuOptionsLoading &&\n inputText.length === 0 &&\n menuRef &&\n selectedOptionRef.current\n ) {\n const menuRect = menuRef.getBoundingClientRect()\n const selectedOptionRect = selectedOptionRef.current.getBoundingClientRect()\n\n if (selectedOptionRect.top < menuRect.top || selectedOptionRect.bottom > menuRect.bottom) {\n setTimeout(() => {\n if (menuRef && selectedOptionRef.current) {\n menuRef.scrollTo(0, selectedOptionRef.current.offsetTop)\n }\n }, 0)\n }\n }\n }, [multiple, disableAutoScrollToSelectedOption, menuOpen, menuOptionsLoading, inputText, menuRef])\n\n return (\n <FormInputLabel\n {...rootProps}\n {...sizeProps}\n ref={ref}\n id={formInputLabelId}\n labelId={inputLabelId}\n labelPosition={labelPosition}\n active={inputActive}\n onColored={contrast}\n primary={primary}\n error={status === 'error'}\n success={status === 'success'}\n focus={focusWithin}\n icon={[icon, <Styled.ChevronIcon key='chevron' up={menuOpen} />]}\n iconProps={{\n ...sizeProps,\n ...iconBaseProps,\n ...iconProps,\n }}\n palette={{\n color: rootProps.disabled ? palette.labelColorDisabled : palette.labelColor,\n backgroundColor: rootProps.disabled ? palette.backgroundColorDisabled : palette.backgroundColor,\n backgroundColorHover: rootProps.disabled ? palette.backgroundColorDisabled : palette.backgroundColorHover,\n borderColor: rootProps.disabled ? palette.borderColorDisabled : palette.borderColor,\n }}\n onClick={(evt) => {\n if (rootProps.onClick) rootProps.onClick(evt)\n\n if (rootProps.disabled) return\n\n inputRef.current?.focus()\n\n if (!menuOpen) {\n setMenuOpenRequest(true)\n\n updateOptions('')\n if (searchable) {\n updateInputText('')\n }\n } else if (menuRef && evt.target instanceof Node && !menuRef.contains(evt.target)) {\n setMenuOpenRequest(false)\n updateInputText(getDropdownInputText(dropdownSelectedOption, multiple))\n }\n }}\n onPointerDown={(evt) => {\n if (rootProps.onPointerDown) rootProps.onPointerDown(evt)\n\n preventBlur(evt)\n }}\n onMouseDown={(evt) => {\n if (rootProps.onMouseDown) rootProps.onMouseDown(evt)\n\n if (!window.PointerEvent) preventBlur(evt)\n }}\n onFocus={(evt) => {\n if (rootProps.onFocus) rootProps.onFocus(evt)\n\n setFocusWithin(true)\n\n if (inputRef.current && evt.target === inputRef.current && searchable && !multiple && !menuOpen) {\n updateInputText('')\n }\n }}\n onBlur={(evt) => {\n if (rootProps.onBlur) rootProps.onBlur(evt)\n\n if (\n evt.currentTarget.contains(evt.relatedTarget) ||\n (menuProps.renderInPortal && menuOpen && menuRef && menuRef.contains(evt.relatedTarget))\n ) {\n return\n }\n\n setFocusWithin(false)\n updateInputText(getDropdownInputText(dropdownSelectedOption, multiple))\n setMenuOpenRequest(false)\n }}\n input={\n <>\n {inputRequired && !searchable && !readOnly ? (\n <Styled.InputMimic\n required\n type='text'\n inputMode='none'\n form={form}\n tabIndex={-1}\n onFocus={() => {\n inputRef.current?.focus()\n }}\n />\n ) : null}\n <FormInput\n ref={inputRef}\n role='combobox'\n aria-controls={menuListId}\n aria-expanded={menuOpen}\n aria-labelledby={rootProps.label ? inputLabelId : undefined}\n type='text'\n autoComplete='off'\n autoCapitalize='off'\n autoCorrect='off'\n spellCheck='false'\n form={form}\n autoFocus={autoFocus}\n inputMode={searchable ? inputMode : 'none'}\n maxLength={maxLength}\n placeholder={placeholder}\n readOnly={readOnly || !searchable}\n required={inputRequired}\n disabled={rootProps.disabled}\n value={inputText}\n palette={{\n color: palette.color,\n colorDisabled: palette.colorDisabled,\n placeholderColor: palette.placeholderColor,\n placeholderColorDisabled: palette.placeholderColorDisabled,\n }}\n onClick={(evt) => {\n if (menuOpen && evt.currentTarget.selectionStart !== evt.currentTarget.selectionEnd) {\n evt.stopPropagation()\n }\n }}\n onChange={(evt) => {\n const inputValue = evt.currentTarget.value\n\n updateInputText(inputValue)\n updateOptionsDebounced(inputValue)\n setMenuOpenRequest(true)\n }}\n onKeyDown={(evt) => {\n if (keyboardKeys.Enter.validate(evt.key)) {\n updateInputText(getDropdownInputText(dropdownSelectedOption, multiple))\n setMenuOpenRequest(false)\n }\n\n if (keyboardKeys.Space.validate(evt.key) && (!menuOpen || evt.currentTarget.selectionStart === 0)) {\n evt.preventDefault()\n\n if (!menuOpen) {\n updateOptions('')\n if (searchable) {\n updateInputText('')\n }\n }\n\n setMenuOpenRequest((prev) => !prev)\n }\n\n if (keyboardKeys.Esc.validate(evt.key)) {\n setMenuOpenRequest(false)\n }\n\n if (keyboardKeys.Tab.validate(evt.key) && menuOpen) {\n evt.preventDefault()\n setMenuOpenRequest(false)\n }\n\n if (keyboardKeys.ArrowDown.validate(evt.key) && menuOpen && menuListRef.current) {\n evt.preventDefault()\n\n if (!multiple && selectedOptionRef.current) {\n const menuItems = [...menuListRef.current.children]\n\n const idx = menuItems.findIndex((item) => item.contains(selectedOptionRef.current as Node))\n\n const focusTarget = menuItems[idx + 1] ?? menuItems[0]\n\n if (focusTarget instanceof HTMLElement) {\n focusFirstFocusable(focusTarget)\n }\n } else {\n focusFirstFocusable(menuListRef.current)\n }\n }\n\n if (keyboardKeys.ArrowUp.validate(evt.key) && menuOpen && menuListRef.current) {\n evt.preventDefault()\n\n if (!multiple && selectedOptionRef.current) {\n const menuItems = [...menuListRef.current.children]\n\n const idx = menuItems.findIndex((item) => item.contains(selectedOptionRef.current as Node))\n\n const focusTarget = menuItems[idx - 1] ?? menuItems[menuItems.length - 1]\n\n if (focusTarget instanceof HTMLElement) {\n focusFirstFocusable(focusTarget)\n }\n } else {\n focusLastFocusable(menuListRef.current)\n }\n }\n }}\n />\n {dropdownSelectedOption.map((option) => (\n <input\n key={option.value}\n type='hidden'\n name={name}\n value={option.value}\n form={form}\n disabled={rootProps.disabled || option.disabled}\n />\n ))}\n </>\n }\n addon={\n <>\n {multiple && dropdownSelectedOption.length > 0 ? (\n <Chip\n size='xs'\n active\n black\n marginLeft={12}\n disabled={rootProps.disabled}\n cursor={rootProps.disabled ? 'not-allowed' : undefined}\n text={dropdownSelectedOption.length}\n textProps={{\n appearance: 'caption',\n size: 'xs',\n }}\n palette={\n rootProps.disabled\n ? {\n color: 'content-disabled',\n colorHover: 'content-disabled',\n backgroundColor: 'bg-disabled-small',\n backgroundColorHover: 'bg-disabled-small',\n }\n : undefined\n }\n onPointerDown={(evt) => {\n evt.preventDefault()\n }}\n onMouseDown={(evt) => {\n if (!window.PointerEvent) evt.preventDefault()\n }}\n discardButtonProps={{\n square: true,\n contrast: !rootProps.disabled,\n onClick: (evt) => {\n evt.stopPropagation()\n\n if (!readOnly) {\n if (selectedOption === undefined) {\n setDropdownSelectedOption([])\n }\n\n if (onSelectOption) onSelectOption([])\n\n inputRef.current?.focus()\n updateInputText('')\n updateOptions('')\n setMenuOpenRequest(true)\n }\n },\n }}\n />\n ) : null}\n {!multiple && clearable && dropdownSelectedOption.length > 0 ? (\n <IconButton\n icon='close'\n size='l'\n square\n marginLeft={12}\n disabled={rootProps.disabled}\n onClick={(evt) => {\n evt.stopPropagation()\n\n if (!readOnly) {\n if (selectedOption === undefined) {\n setDropdownSelectedOption([])\n }\n\n if (onSelectOption) onSelectOption(null)\n\n inputRef.current?.focus()\n updateInputText('')\n updateOptions('')\n setMenuOpenRequest(true)\n }\n }}\n />\n ) : null}\n </>\n }\n dropdown={\n <DropdownMenu\n {...menuProps}\n setRef={setMenuRef}\n open={menuOpen}\n popperReferenceId={formInputLabelId}\n secondary={!contrast}\n elevated={contrast}\n disableAutoFocus\n palette={{\n backgroundColor: palette.menuBackgroundColor,\n borderColor: palette.menuBorderColor,\n }}\n empty={menuOptions.length === 0}\n loading={menuOptionsLoading}\n loadingMessage={loadingMessage}\n loadingIcon={loadingIcon}\n loadingIconProps={{\n ...sizeProps,\n ...iconBaseProps,\n ...loadingIconProps,\n }}\n emptyMessage={optionsEmptyMessage}\n emptyIcon={optionsEmptyIcon}\n emptyIconProps={{\n ...sizeProps,\n ...iconBaseProps,\n ...optionsEmptyIconProps,\n }}\n onKeyDown={(evt) => {\n if (keyboardKeys.Tab.validate(evt.key)) {\n evt.preventDefault()\n inputRef.current?.focus()\n setMenuOpenRequest(false)\n }\n\n if (keyboardKeys.Enter.validate(evt.key)) {\n inputRef.current?.focus()\n updateInputText(getDropdownInputText(dropdownSelectedOption, multiple))\n setMenuOpenRequest(false)\n }\n\n if (keyboardKeys.Esc.validate(evt.key)) {\n inputRef.current?.focus()\n setMenuOpenRequest(false)\n }\n\n if (keyboardKeys.Backspace.validate(evt.key) && !readOnly && (multiple || (!multiple && clearable))) {\n if (selectedOption === undefined) {\n setDropdownSelectedOption([])\n }\n\n if (onSelectOption) onSelectOption(multiple ? [] : null)\n\n updateInputText('')\n updateOptions('')\n }\n }}\n >\n {multiple ? (\n <MenuList\n ref={menuListRef}\n id={menuListId}\n role='listbox'\n aria-labelledby={rootProps.label ? inputLabelId : undefined}\n aria-multiselectable\n >\n {inputText.length === 0 ? (\n <>\n {optionsMultiToggle ? (\n <ListItem\n {...sizeProps}\n text={optionsMultiToggleCaption}\n disabled={rootProps.disabled}\n borderRadius={8}\n ellipsis={false}\n textProps={{ wordBreak: 'break-word' }}\n onClick={(evt) => {\n evt.stopPropagation()\n }}\n control={\n <InputCheckbox\n sizes={SIZES_CHECKBOX}\n form='none'\n name={name}\n checked={multiToggleChecked}\n indeterminate={multiToggleIndeterminate}\n error={Boolean((multiToggleChecked || multiToggleIndeterminate) && status === 'error')}\n success={Boolean((multiToggleChecked || multiToggleIndeterminate) && status === 'success')}\n onChange={() => {\n if (!readOnly) {\n const update =\n multiToggleChecked || multiToggleIndeterminate\n ? dropdownSelectedOption.filter((option) => option.disabled)\n : menuOptions.filter((option) => !option.disabled)\n\n if (selectedOption === undefined) {\n setDropdownSelectedOption(update)\n }\n\n if (onSelectOption) onSelectOption(update)\n }\n }}\n />\n }\n />\n ) : null}\n {optionsMultiToggle ? <MenuDivider /> : null}\n {groupSelectedOptions\n ? menuOptionsGroups[0].map((option) => {\n const optionStatus = option.status ?? status\n const optionErrorStatus = optionStatus === 'error'\n const optionSuccessStatus = optionStatus === 'success'\n\n return (\n <ListItem\n {...sizeProps}\n key={option.value}\n active\n text={option.text}\n danger={optionErrorStatus}\n success={optionSuccessStatus}\n disabled={rootProps.disabled || option.disabled}\n borderRadius={8}\n ellipsis={false}\n textProps={{ wordBreak: 'break-word' }}\n onClick={(evt) => {\n evt.stopPropagation()\n inputRef.current?.focus()\n }}\n control={\n <InputCheckbox\n sizes={SIZES_CHECKBOX}\n form='none'\n role='option'\n aria-selected\n name={name}\n value={option.value}\n checked\n error={optionErrorStatus}\n success={optionSuccessStatus}\n onChange={(evt) => {\n if (!readOnly) {\n const update = dropdownSelectedOption.filter(\n (item) => item.value !== evt.currentTarget.value\n )\n\n if (selectedOption === undefined) {\n setDropdownSelectedOption(update)\n }\n\n if (onSelectOption) onSelectOption(update)\n }\n }}\n />\n }\n />\n )\n })\n : null}\n {groupSelectedOptions && menuOptionsGroups[0].length > 0 && menuOptionsGroups[1].length > 0 ? (\n <MenuDivider />\n ) : null}\n {groupSelectedOptions\n ? menuOptionsGroups[1].map((option) => (\n <ListItem\n {...sizeProps}\n key={option.value}\n text={option.text}\n disabled={rootProps.disabled || option.disabled}\n borderRadius={8}\n ellipsis={false}\n textProps={{ wordBreak: 'break-word' }}\n onClick={(evt) => {\n evt.stopPropagation()\n inputRef.current?.focus()\n }}\n control={\n <InputCheckbox\n sizes={SIZES_CHECKBOX}\n form='none'\n role='option'\n aria-selected={false}\n name={name}\n value={option.value}\n checked={false}\n onChange={() => {\n if (!readOnly) {\n const update = [...dropdownSelectedOption, option]\n\n if (selectedOption === undefined) {\n setDropdownSelectedOption(update)\n }\n\n if (onSelectOption) onSelectOption(update)\n }\n }}\n />\n }\n />\n ))\n : null}\n {!groupSelectedOptions &&\n menuOptions.map((option) => {\n const selected = dropdownSelectedOption.findIndex((item) => item.value === option.value) !== -1\n\n const optionStatus = option.status ?? status\n const optionErrorStatus = selected && optionStatus === 'error'\n const optionSuccessStatus = selected && optionStatus === 'success'\n\n return (\n <ListItem\n {...sizeProps}\n key={option.value}\n text={option.text}\n danger={optionErrorStatus}\n success={optionSuccessStatus}\n disabled={rootProps.disabled || option.disabled}\n active={selected}\n borderRadius={8}\n ellipsis={false}\n textProps={{ wordBreak: 'break-word' }}\n onClick={(evt) => {\n evt.stopPropagation()\n }}\n control={\n <InputCheckbox\n sizes={SIZES_CHECKBOX}\n form='none'\n role='option'\n aria-selected={selected}\n name={name}\n value={option.value}\n checked={selected}\n error={optionErrorStatus}\n success={optionSuccessStatus}\n onChange={(evt) => {\n if (!readOnly) {\n const update = selected\n ? dropdownSelectedOption.filter((item) => item.value !== evt.currentTarget.value)\n : [...dropdownSelectedOption, option]\n\n if (selectedOption === undefined) {\n setDropdownSelectedOption(update)\n }\n\n if (onSelectOption) onSelectOption(update)\n }\n }}\n />\n }\n />\n )\n })}\n </>\n ) : (\n <>\n {menuOptions.map((option) => {\n const selected = dropdownSelectedOption.findIndex((item) => item.value === option.value) !== -1\n\n const optionStatus = option.status ?? status\n const optionErrorStatus = selected && optionStatus === 'error'\n const optionSuccessStatus = selected && optionStatus === 'success'\n\n return (\n <ListItem\n {...sizeProps}\n key={option.value}\n text={option.text}\n danger={optionErrorStatus}\n success={optionSuccessStatus}\n disabled={rootProps.disabled || option.disabled}\n active={selected}\n borderRadius={8}\n ellipsis={false}\n textProps={{ wordBreak: 'break-word' }}\n onClick={(evt) => {\n evt.stopPropagation()\n }}\n control={\n <InputCheckbox\n sizes={SIZES_CHECKBOX}\n form='none'\n role='option'\n aria-selected={selected}\n name={name}\n value={option.value}\n checked={selected}\n error={optionErrorStatus}\n success={optionSuccessStatus}\n onChange={(evt) => {\n if (!readOnly) {\n const update = selected\n ? dropdownSelectedOption.filter((item) => item.value !== evt.currentTarget.value)\n : [...dropdownSelectedOption, option]\n\n if (selectedOption === undefined) {\n setDropdownSelectedOption(update)\n }\n\n if (onSelectOption) onSelectOption(update)\n }\n }}\n />\n }\n />\n )\n })}\n </>\n )}\n </MenuList>\n ) : (\n <MenuList\n ref={menuListRef}\n id={menuListId}\n role='listbox'\n aria-labelledby={rootProps.label ? inputLabelId : undefined}\n >\n {menuOptions.map((option) => {\n const selected = dropdownSelectedOption.findIndex((item) => item.value === option.value) !== -1\n\n return (\n <ListItem\n {...sizeProps}\n role='option'\n aria-selected={selected}\n ref={selected ? selectedOptionRef : undefined}\n key={option.value}\n text={option.text}\n active={selected}\n danger={Boolean(selected && status === 'error')}\n success={Boolean(selected && status === 'success')}\n disabled={rootProps.disabled || option.disabled}\n borderRadius={8}\n ellipsis={false}\n textProps={{ wordBreak: 'break-word' }}\n onClick={(evt) => {\n evt.stopPropagation()\n\n if (!readOnly) {\n const update = { ...option }\n\n if (selectedOption === undefined) {\n updateInputText(getDropdownInputText(update))\n setDropdownSelectedOption(getDropdownSelectedOption(update))\n }\n\n if (onSelectOption) onSelectOption(update)\n\n inputRef.current?.focus()\n setMenuOpenRequest(false)\n }\n }}\n />\n )\n })}\n </MenuList>\n )}\n </DropdownMenu>\n }\n />\n )\n }),\n {\n sizes: SIZES,\n displayName: COMPONENT_NAME,\n }\n)\n\nexport { Dropdown, COMPONENT_NAME }\n"],"names":["Dropdown","withMergedProps","forwardRef","props","ref","size","name","labelPosition","searchable","primary","optionsMultiToggle","iconProps","menuProps","loadingIconProps","optionsEmptyIconProps","loading","autoFocus","disableAutoScrollToSelectedOption","closeMenuOnScroll","scrollMonitorTarget","contrast","selectedOption","defaultSelectedOption","icon","inputMode","loadingMessage","loadingIcon","maxLength","multiple","clearable","onChangeInput","onCloseMenu","onOpenMenu","onSelectOption","options","loadOptions","groupSelectedOptions","optionsMultiToggleCaption","optionsEmptyMessage","optionsEmptyIcon","palette","placeholder","readOnly","required","status","sizeXXS","sizeXS","sizeS","sizeM","sizeL","sizeXL","form","rootProps","sizeProps","iconBaseProps","sizes","SIZES_ICON","color","disabled","formInputLabelId","useMemo","id","nanoid","inputLabelId","menuListId","filteredOptions","getFilteredOptions","useFilteredOptions","loadedOptions","optionsLoading","getLoadedOptions","useLoadedOptions","dropdownSelectedOption","setDropdownSelectedOption","useState","getDropdownSelectedOption","undefined","inputText","setInputText","getDropdownInputText","focusWithin","setFocusWithin","menuOpenRequest","setMenuOpenRequest","menuOptions","menuOptionsLoading","menuOptionsGroups","groupDropdownOptions","menuOpen","inputRequired","length","inputActive","Boolean","multiToggleChecked","multiToggleIndeterminate","inputRef","useRef","menuRef","setMenuRef","menuListRef","selectedOptionRef","menuOpenPrevRef","updateInputText","useCallback","inputTextValue","updateOptions","updateOptionsDebounced","createDebouncedCallback","preventBlur","evt","target","current","Node","currentTarget","contains","renderInPortal","preventDefault","useScrollMonitor","onScrollStart","focus","useLayoutEffect","useEffect","menuRect","getBoundingClientRect","selectedOptionRect","top","bottom","setTimeout","scrollTo","offsetTop","_jsx","FormInputLabel","labelId","active","onColored","error","success","jsx","Styled","up","labelColorDisabled","labelColor","backgroundColor","backgroundColorDisabled","backgroundColorHover","borderColor","borderColorDisabled","onClick","onPointerDown","onMouseDown","window","PointerEvent","onFocus","onBlur","relatedTarget","input","_jsxs","jsxs","_Fragment","children","type","tabIndex","FormInput","role","label","autoComplete","autoCapitalize","autoCorrect","spellCheck","value","colorDisabled","placeholderColor","placeholderColorDisabled","selectionStart","selectionEnd","stopPropagation","onChange","inputValue","onKeyDown","keyboardKeys","Enter","validate","key","Space","prev","Esc","Tab","ArrowDown","menuItems","idx","findIndex","item","focusTarget","HTMLElement","focusFirstFocusable","ArrowUp","focusLastFocusable","map","option","addon","Chip","black","marginLeft","cursor","text","textProps","appearance","colorHover","discardButtonProps","square","IconButton","dropdown","DropdownMenu","setRef","open","popperReferenceId","secondary","elevated","disableAutoFocus","menuBackgroundColor","menuBorderColor","empty","emptyMessage","emptyIcon","emptyIconProps","Backspace","MenuList","ListItem","borderRadius","ellipsis","wordBreak","control","InputCheckbox","SIZES_CHECKBOX","checked","indeterminate","update","filter","MenuDivider","optionStatus","optionErrorStatus","optionSuccessStatus","_createElement","danger","selected","SIZES","displayName"],"mappings":"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"}
1
+ {"version":3,"file":"Dropdown.js","sources":["../../../../src/components/Dropdown/Dropdown.tsx"],"sourcesContent":["import { forwardRef, useState, useRef, useEffect, useLayoutEffect, useMemo, useCallback } from 'react'\nimport { nanoid } from 'nanoid'\nimport { withMergedProps } from 'hocs/withMergedProps'\nimport type { MergedProps } from 'hocs/withMergedProps'\nimport { useScrollMonitor } from 'hooks/useScrollMonitor'\nimport { focusFirstFocusable, focusLastFocusable } from 'shared/utils/dom'\nimport { createDebouncedCallback } from 'shared/utils/misc'\nimport { keyboardKeys } from 'shared/constants'\nimport type { Nullable } from 'shared/types'\nimport { FormInput } from 'components/FormInput'\nimport { FormInputLabel } from 'components/FormInputLabel'\nimport { MenuList } from 'components/MenuList'\nimport { MenuDivider } from 'components/MenuDivider'\nimport { ListItem } from 'components/ListItem'\nimport { InputCheckbox } from 'components/InputCheckbox'\nimport { Chip } from 'components/Chip'\nimport { IconButton } from 'components/IconButton'\nimport type { IconProps } from 'components/Icon'\nimport { DropdownMenu } from './DropdownMenu'\nimport { useFilteredOptions, useLoadedOptions } from './hooks'\nimport { SIZES, SIZES_CHECKBOX, SIZES_ICON } from './sizes'\nimport { getDropdownInputText, getDropdownSelectedOption, groupDropdownOptions } from './utils'\nimport * as Styled from './style'\nimport type { DropdownProps, DropdownOption } from './types'\n\nconst COMPONENT_NAME = 'Dropdown'\n\n/**\n *\n * Компонент для выбора одной или нескольких опций из числа доступных.\n *\n * Поддерживается \"ref\" и все нативные атрибуты \\<div\\> элемента.\n */\nconst Dropdown: React.ForwardRefExoticComponent<DropdownProps> = withMergedProps<DropdownProps, HTMLDivElement>(\n forwardRef<HTMLDivElement, MergedProps<DropdownProps>>((props, ref) => {\n const {\n size = 'm',\n name = 'fox-dropdown',\n labelPosition = 'dynamic',\n searchable = true,\n primary = true,\n optionsMultiToggle = true,\n iconProps = {},\n menuProps = {},\n loadingIconProps = {},\n optionsEmptyIconProps = {},\n loading,\n autoFocus,\n disableAutoScrollToSelectedOption,\n closeMenuOnScroll,\n scrollMonitorTarget,\n contrast,\n selectedOption,\n defaultSelectedOption,\n icon,\n inputMode,\n loadingMessage,\n loadingIcon,\n maxLength,\n multiple,\n clearable,\n onChangeInput,\n onCloseMenu,\n onOpenMenu,\n onSelectOption,\n options,\n loadOptions,\n groupSelectedOptions,\n optionsMultiToggleCaption,\n optionsEmptyMessage,\n optionsEmptyIcon,\n palette,\n placeholder,\n readOnly,\n required,\n status,\n sizeXXS,\n sizeXS,\n sizeS,\n sizeM,\n sizeL,\n sizeXL,\n form,\n label,\n ...rootProps\n } = props\n\n const sizeProps = {\n size,\n sizeXXS,\n sizeXS,\n sizeS,\n sizeM,\n sizeL,\n sizeXL,\n }\n\n const iconBaseProps: IconProps = {\n sizes: SIZES_ICON,\n color: rootProps.disabled ? 'content-disabled' : 'content-onmain-tertiary',\n }\n\n const formInputLabelId = useMemo(() => rootProps.id ?? `${name}-${nanoid()}`, [name, rootProps.id])\n const inputLabelId = useMemo(() => nanoid(), [])\n const menuListId = useMemo(() => nanoid(), [])\n\n const [filteredOptions, getFilteredOptions] = useFilteredOptions({\n options,\n })\n\n const [loadedOptions, optionsLoading, getLoadedOptions] = useLoadedOptions({\n loadOptions,\n options,\n })\n\n const [dropdownSelectedOption, setDropdownSelectedOption] = useState<DropdownOption[]>(() =>\n getDropdownSelectedOption(selectedOption !== undefined ? selectedOption : defaultSelectedOption, multiple)\n )\n\n const [inputText, setInputText] = useState<string>(() => getDropdownInputText(dropdownSelectedOption, multiple))\n\n const [focusWithin, setFocusWithin] = useState<boolean>(false)\n\n const [menuOpenRequest, setMenuOpenRequest] = useState<boolean>(false)\n\n const menuOptions: DropdownOption[] = loadOptions ? loadedOptions : filteredOptions\n const menuOptionsLoading = loadOptions ? (loading ?? optionsLoading) : loading\n\n const menuOptionsGroups: ReturnType<typeof groupDropdownOptions> = useMemo(\n () => (multiple ? groupDropdownOptions(menuOptions, dropdownSelectedOption) : [[], []]),\n [multiple, menuOptions, dropdownSelectedOption]\n )\n\n const menuOpen = menuOpenRequest && !rootProps.disabled\n\n const inputRequired = required && dropdownSelectedOption.length === 0\n const inputActive = Boolean(menuOpen || inputText || focusWithin)\n\n const multiToggleChecked = menuOptionsGroups[0].length > 0 && menuOptionsGroups[1].length === 0\n const multiToggleIndeterminate = menuOptionsGroups[0].length > 0 && menuOptionsGroups[1].length > 0\n\n const inputRef = useRef<HTMLInputElement>(null)\n const [menuRef, setMenuRef] = useState<Nullable<HTMLElement>>(null)\n const menuListRef = useRef<HTMLUListElement>(null)\n const selectedOptionRef = useRef<HTMLElement>(null)\n const menuOpenPrevRef = useRef<boolean>(menuOpen)\n\n const updateInputText = useCallback(\n (inputTextValue: string) => {\n setInputText(inputTextValue)\n\n if (onChangeInput) {\n onChangeInput(inputTextValue)\n }\n },\n [onChangeInput]\n )\n\n const updateOptions = useCallback(\n (inputTextValue: string) => {\n if (loadOptions) {\n getLoadedOptions(inputTextValue)\n } else {\n getFilteredOptions(inputTextValue)\n }\n },\n [loadOptions, getLoadedOptions, getFilteredOptions]\n )\n\n const updateOptionsDebounced = useMemo(() => {\n return createDebouncedCallback(updateOptions, 150)\n }, [updateOptions])\n\n const preventBlur = (evt: React.PointerEvent<HTMLDivElement> | React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n if (\n evt.target !== inputRef.current &&\n evt.target instanceof Node &&\n (evt.currentTarget.contains(evt.target) ||\n (menuProps.renderInPortal && menuOpen && menuRef && menuRef.contains(evt.target)))\n ) {\n evt.preventDefault()\n }\n }\n\n useScrollMonitor({\n target: scrollMonitorTarget,\n onScrollStart: () => {\n if (closeMenuOnScroll && menuOpen) {\n inputRef.current?.focus()\n setMenuOpenRequest(false)\n }\n },\n })\n\n useLayoutEffect(() => {\n if (selectedOption === undefined) return\n\n if (!multiple && !menuOpen) {\n updateInputText(getDropdownInputText(selectedOption))\n }\n setDropdownSelectedOption(getDropdownSelectedOption(selectedOption, multiple))\n }, [multiple, selectedOption, menuOpen, updateInputText])\n\n useEffect(() => {\n if (menuOpen === menuOpenPrevRef.current) return\n\n if (menuOpen && onOpenMenu) onOpenMenu()\n if (!menuOpen && onCloseMenu) onCloseMenu()\n\n menuOpenPrevRef.current = menuOpen\n }, [menuOpen, onCloseMenu, onOpenMenu])\n\n useEffect(() => {\n if (\n !multiple &&\n !disableAutoScrollToSelectedOption &&\n menuOpen &&\n !menuOptionsLoading &&\n inputText.length === 0 &&\n menuRef &&\n selectedOptionRef.current\n ) {\n const menuRect = menuRef.getBoundingClientRect()\n const selectedOptionRect = selectedOptionRef.current.getBoundingClientRect()\n\n if (selectedOptionRect.top < menuRect.top || selectedOptionRect.bottom > menuRect.bottom) {\n setTimeout(() => {\n if (menuRef && selectedOptionRef.current) {\n menuRef.scrollTo(0, selectedOptionRef.current.offsetTop)\n }\n }, 0)\n }\n }\n }, [multiple, disableAutoScrollToSelectedOption, menuOpen, menuOptionsLoading, inputText, menuRef])\n\n return (\n <FormInputLabel\n {...rootProps}\n {...sizeProps}\n ref={ref}\n id={formInputLabelId}\n onColored={contrast}\n primary={primary}\n error={status === 'error'}\n success={status === 'success'}\n focus={focusWithin}\n icon={[icon, <Styled.ChevronIcon key='chevron' up={menuOpen} />]}\n iconProps={{\n ...sizeProps,\n ...iconBaseProps,\n ...iconProps,\n }}\n palette={{\n color: rootProps.disabled ? palette.labelColorDisabled : palette.labelColor,\n backgroundColor: rootProps.disabled ? palette.backgroundColorDisabled : palette.backgroundColor,\n backgroundColorHover: rootProps.disabled ? palette.backgroundColorDisabled : palette.backgroundColorHover,\n borderColor: rootProps.disabled ? palette.borderColorDisabled : palette.borderColor,\n }}\n onClick={(evt) => {\n if (rootProps.onClick) rootProps.onClick(evt)\n\n if (rootProps.disabled) return\n\n inputRef.current?.focus()\n\n if (!menuOpen) {\n setMenuOpenRequest(true)\n\n updateOptions('')\n if (searchable) {\n updateInputText('')\n }\n } else if (menuRef && evt.target instanceof Node && !menuRef.contains(evt.target)) {\n setMenuOpenRequest(false)\n updateInputText(getDropdownInputText(dropdownSelectedOption, multiple))\n }\n }}\n onPointerDown={(evt) => {\n if (rootProps.onPointerDown) rootProps.onPointerDown(evt)\n\n preventBlur(evt)\n }}\n onMouseDown={(evt) => {\n if (rootProps.onMouseDown) rootProps.onMouseDown(evt)\n\n if (!window.PointerEvent) preventBlur(evt)\n }}\n onFocus={(evt) => {\n if (rootProps.onFocus) rootProps.onFocus(evt)\n\n setFocusWithin(true)\n\n if (inputRef.current && evt.target === inputRef.current && searchable && !multiple && !menuOpen) {\n updateInputText('')\n }\n }}\n onBlur={(evt) => {\n if (rootProps.onBlur) rootProps.onBlur(evt)\n\n if (\n evt.currentTarget.contains(evt.relatedTarget) ||\n (menuProps.renderInPortal && menuOpen && menuRef && menuRef.contains(evt.relatedTarget))\n ) {\n return\n }\n\n setFocusWithin(false)\n updateInputText(getDropdownInputText(dropdownSelectedOption, multiple))\n setMenuOpenRequest(false)\n }}\n input={\n <>\n {inputRequired && !searchable && !readOnly ? (\n <Styled.InputMimic\n required\n type='text'\n inputMode='none'\n form={form}\n tabIndex={-1}\n onFocus={() => {\n inputRef.current?.focus()\n }}\n />\n ) : null}\n <FormInput\n {...sizeProps}\n ref={inputRef}\n role='combobox'\n aria-controls={menuListId}\n aria-expanded={menuOpen}\n type='text'\n autoComplete='off'\n autoCapitalize='off'\n autoCorrect='off'\n spellCheck='false'\n active={inputActive}\n label={label}\n labelId={inputLabelId}\n labelPosition={labelPosition}\n form={form}\n autoFocus={autoFocus}\n inputMode={searchable ? inputMode : 'none'}\n maxLength={maxLength}\n placeholder={placeholder}\n readOnly={readOnly || !searchable}\n required={inputRequired}\n disabled={rootProps.disabled}\n value={inputText}\n palette={{\n color: palette.color,\n colorDisabled: palette.colorDisabled,\n placeholderColor: palette.placeholderColor,\n placeholderColorDisabled: palette.placeholderColorDisabled,\n }}\n onClick={(evt) => {\n if (menuOpen && evt.currentTarget.selectionStart !== evt.currentTarget.selectionEnd) {\n evt.stopPropagation()\n }\n }}\n onChange={(evt) => {\n const inputValue = evt.currentTarget.value\n\n updateInputText(inputValue)\n updateOptionsDebounced(inputValue)\n setMenuOpenRequest(true)\n }}\n onKeyDown={(evt) => {\n if (keyboardKeys.Enter.validate(evt.key)) {\n updateInputText(getDropdownInputText(dropdownSelectedOption, multiple))\n setMenuOpenRequest(false)\n }\n\n if (keyboardKeys.Space.validate(evt.key) && (!menuOpen || evt.currentTarget.selectionStart === 0)) {\n evt.preventDefault()\n\n if (!menuOpen) {\n updateOptions('')\n if (searchable) {\n updateInputText('')\n }\n }\n\n setMenuOpenRequest((prev) => !prev)\n }\n\n if (keyboardKeys.Esc.validate(evt.key)) {\n setMenuOpenRequest(false)\n }\n\n if (keyboardKeys.Tab.validate(evt.key) && menuOpen) {\n evt.preventDefault()\n setMenuOpenRequest(false)\n }\n\n if (keyboardKeys.ArrowDown.validate(evt.key) && menuOpen && menuListRef.current) {\n evt.preventDefault()\n\n if (!multiple && selectedOptionRef.current) {\n const menuItems = [...menuListRef.current.children]\n\n const idx = menuItems.findIndex((item) => item.contains(selectedOptionRef.current as Node))\n\n const focusTarget = menuItems[idx + 1] ?? menuItems[0]\n\n if (focusTarget instanceof HTMLElement) {\n focusFirstFocusable(focusTarget)\n }\n } else {\n focusFirstFocusable(menuListRef.current)\n }\n }\n\n if (keyboardKeys.ArrowUp.validate(evt.key) && menuOpen && menuListRef.current) {\n evt.preventDefault()\n\n if (!multiple && selectedOptionRef.current) {\n const menuItems = [...menuListRef.current.children]\n\n const idx = menuItems.findIndex((item) => item.contains(selectedOptionRef.current as Node))\n\n const focusTarget = menuItems[idx - 1] ?? menuItems[menuItems.length - 1]\n\n if (focusTarget instanceof HTMLElement) {\n focusFirstFocusable(focusTarget)\n }\n } else {\n focusLastFocusable(menuListRef.current)\n }\n }\n }}\n />\n {dropdownSelectedOption.map((option) => (\n <input\n key={option.value}\n type='hidden'\n name={name}\n value={option.value}\n form={form}\n disabled={rootProps.disabled || option.disabled}\n />\n ))}\n </>\n }\n addon={\n <>\n {multiple && dropdownSelectedOption.length > 0 ? (\n <Chip\n size='xs'\n active\n black\n marginLeft='var(--gap, 12px)'\n disabled={rootProps.disabled}\n cursor={rootProps.disabled ? 'not-allowed' : undefined}\n text={dropdownSelectedOption.length}\n textProps={{\n appearance: 'caption',\n size: 'xs',\n }}\n palette={\n rootProps.disabled\n ? {\n color: 'content-disabled',\n colorHover: 'content-disabled',\n backgroundColor: 'bg-disabled-small',\n backgroundColorHover: 'bg-disabled-small',\n }\n : undefined\n }\n onPointerDown={(evt) => {\n evt.preventDefault()\n }}\n onMouseDown={(evt) => {\n if (!window.PointerEvent) evt.preventDefault()\n }}\n discardButtonProps={{\n square: true,\n contrast: !rootProps.disabled,\n onClick: (evt) => {\n evt.stopPropagation()\n\n if (!readOnly) {\n if (selectedOption === undefined) {\n setDropdownSelectedOption([])\n }\n\n if (onSelectOption) onSelectOption([])\n\n inputRef.current?.focus()\n updateInputText('')\n updateOptions('')\n setMenuOpenRequest(true)\n }\n },\n }}\n />\n ) : null}\n {!multiple && clearable && dropdownSelectedOption.length > 0 ? (\n <IconButton\n icon='close'\n size='l'\n square\n marginLeft='var(--gap, 12px)'\n disabled={rootProps.disabled}\n onClick={(evt) => {\n evt.stopPropagation()\n\n if (!readOnly) {\n if (selectedOption === undefined) {\n setDropdownSelectedOption([])\n }\n\n if (onSelectOption) onSelectOption(null)\n\n inputRef.current?.focus()\n updateInputText('')\n updateOptions('')\n setMenuOpenRequest(true)\n }\n }}\n />\n ) : null}\n </>\n }\n dropdown={\n <DropdownMenu\n {...menuProps}\n setRef={setMenuRef}\n open={menuOpen}\n popperReferenceId={formInputLabelId}\n secondary={!contrast}\n elevated={contrast}\n disableAutoFocus\n palette={{\n backgroundColor: palette.menuBackgroundColor,\n borderColor: palette.menuBorderColor,\n }}\n empty={menuOptions.length === 0}\n loading={menuOptionsLoading}\n loadingMessage={loadingMessage}\n loadingIcon={loadingIcon}\n loadingIconProps={{\n ...sizeProps,\n ...iconBaseProps,\n ...loadingIconProps,\n }}\n emptyMessage={optionsEmptyMessage}\n emptyIcon={optionsEmptyIcon}\n emptyIconProps={{\n ...sizeProps,\n ...iconBaseProps,\n ...optionsEmptyIconProps,\n }}\n onKeyDown={(evt) => {\n if (keyboardKeys.Tab.validate(evt.key)) {\n evt.preventDefault()\n inputRef.current?.focus()\n setMenuOpenRequest(false)\n }\n\n if (keyboardKeys.Enter.validate(evt.key)) {\n inputRef.current?.focus()\n updateInputText(getDropdownInputText(dropdownSelectedOption, multiple))\n setMenuOpenRequest(false)\n }\n\n if (keyboardKeys.Esc.validate(evt.key)) {\n inputRef.current?.focus()\n setMenuOpenRequest(false)\n }\n\n if (keyboardKeys.Backspace.validate(evt.key) && !readOnly && (multiple || (!multiple && clearable))) {\n if (selectedOption === undefined) {\n setDropdownSelectedOption([])\n }\n\n if (onSelectOption) onSelectOption(multiple ? [] : null)\n\n updateInputText('')\n updateOptions('')\n }\n }}\n >\n {multiple ? (\n <MenuList\n ref={menuListRef}\n id={menuListId}\n role='listbox'\n aria-labelledby={label ? inputLabelId : undefined}\n aria-multiselectable\n >\n {inputText.length === 0 ? (\n <>\n {optionsMultiToggle ? (\n <ListItem\n {...sizeProps}\n text={optionsMultiToggleCaption}\n disabled={rootProps.disabled}\n borderRadius={8}\n ellipsis={false}\n textProps={{ wordBreak: 'break-word' }}\n onClick={(evt) => {\n evt.stopPropagation()\n }}\n control={\n <InputCheckbox\n sizes={SIZES_CHECKBOX}\n form='none'\n name={name}\n checked={multiToggleChecked}\n indeterminate={multiToggleIndeterminate}\n error={Boolean((multiToggleChecked || multiToggleIndeterminate) && status === 'error')}\n success={Boolean((multiToggleChecked || multiToggleIndeterminate) && status === 'success')}\n onChange={() => {\n if (!readOnly) {\n const update =\n multiToggleChecked || multiToggleIndeterminate\n ? dropdownSelectedOption.filter((option) => option.disabled)\n : menuOptions.filter((option) => !option.disabled)\n\n if (selectedOption === undefined) {\n setDropdownSelectedOption(update)\n }\n\n if (onSelectOption) onSelectOption(update)\n }\n }}\n />\n }\n />\n ) : null}\n {optionsMultiToggle ? <MenuDivider /> : null}\n {groupSelectedOptions\n ? menuOptionsGroups[0].map((option) => {\n const optionStatus = option.status ?? status\n const optionErrorStatus = optionStatus === 'error'\n const optionSuccessStatus = optionStatus === 'success'\n\n return (\n <ListItem\n {...sizeProps}\n key={option.value}\n active\n text={option.text}\n danger={optionErrorStatus}\n success={optionSuccessStatus}\n disabled={rootProps.disabled || option.disabled}\n borderRadius={8}\n ellipsis={false}\n textProps={{ wordBreak: 'break-word' }}\n onClick={(evt) => {\n evt.stopPropagation()\n inputRef.current?.focus()\n }}\n control={\n <InputCheckbox\n sizes={SIZES_CHECKBOX}\n form='none'\n role='option'\n aria-selected\n name={name}\n value={option.value}\n checked\n error={optionErrorStatus}\n success={optionSuccessStatus}\n onChange={(evt) => {\n if (!readOnly) {\n const update = dropdownSelectedOption.filter(\n (item) => item.value !== evt.currentTarget.value\n )\n\n if (selectedOption === undefined) {\n setDropdownSelectedOption(update)\n }\n\n if (onSelectOption) onSelectOption(update)\n }\n }}\n />\n }\n />\n )\n })\n : null}\n {groupSelectedOptions && menuOptionsGroups[0].length > 0 && menuOptionsGroups[1].length > 0 ? (\n <MenuDivider />\n ) : null}\n {groupSelectedOptions\n ? menuOptionsGroups[1].map((option) => (\n <ListItem\n {...sizeProps}\n key={option.value}\n text={option.text}\n disabled={rootProps.disabled || option.disabled}\n borderRadius={8}\n ellipsis={false}\n textProps={{ wordBreak: 'break-word' }}\n onClick={(evt) => {\n evt.stopPropagation()\n inputRef.current?.focus()\n }}\n control={\n <InputCheckbox\n sizes={SIZES_CHECKBOX}\n form='none'\n role='option'\n aria-selected={false}\n name={name}\n value={option.value}\n checked={false}\n onChange={() => {\n if (!readOnly) {\n const update = [...dropdownSelectedOption, option]\n\n if (selectedOption === undefined) {\n setDropdownSelectedOption(update)\n }\n\n if (onSelectOption) onSelectOption(update)\n }\n }}\n />\n }\n />\n ))\n : null}\n {!groupSelectedOptions &&\n menuOptions.map((option) => {\n const selected = dropdownSelectedOption.findIndex((item) => item.value === option.value) !== -1\n\n const optionStatus = option.status ?? status\n const optionErrorStatus = selected && optionStatus === 'error'\n const optionSuccessStatus = selected && optionStatus === 'success'\n\n return (\n <ListItem\n {...sizeProps}\n key={option.value}\n text={option.text}\n danger={optionErrorStatus}\n success={optionSuccessStatus}\n disabled={rootProps.disabled || option.disabled}\n active={selected}\n borderRadius={8}\n ellipsis={false}\n textProps={{ wordBreak: 'break-word' }}\n onClick={(evt) => {\n evt.stopPropagation()\n }}\n control={\n <InputCheckbox\n sizes={SIZES_CHECKBOX}\n form='none'\n role='option'\n aria-selected={selected}\n name={name}\n value={option.value}\n checked={selected}\n error={optionErrorStatus}\n success={optionSuccessStatus}\n onChange={(evt) => {\n if (!readOnly) {\n const update = selected\n ? dropdownSelectedOption.filter((item) => item.value !== evt.currentTarget.value)\n : [...dropdownSelectedOption, option]\n\n if (selectedOption === undefined) {\n setDropdownSelectedOption(update)\n }\n\n if (onSelectOption) onSelectOption(update)\n }\n }}\n />\n }\n />\n )\n })}\n </>\n ) : (\n <>\n {menuOptions.map((option) => {\n const selected = dropdownSelectedOption.findIndex((item) => item.value === option.value) !== -1\n\n const optionStatus = option.status ?? status\n const optionErrorStatus = selected && optionStatus === 'error'\n const optionSuccessStatus = selected && optionStatus === 'success'\n\n return (\n <ListItem\n {...sizeProps}\n key={option.value}\n text={option.text}\n danger={optionErrorStatus}\n success={optionSuccessStatus}\n disabled={rootProps.disabled || option.disabled}\n active={selected}\n borderRadius={8}\n ellipsis={false}\n textProps={{ wordBreak: 'break-word' }}\n onClick={(evt) => {\n evt.stopPropagation()\n }}\n control={\n <InputCheckbox\n sizes={SIZES_CHECKBOX}\n form='none'\n role='option'\n aria-selected={selected}\n name={name}\n value={option.value}\n checked={selected}\n error={optionErrorStatus}\n success={optionSuccessStatus}\n onChange={(evt) => {\n if (!readOnly) {\n const update = selected\n ? dropdownSelectedOption.filter((item) => item.value !== evt.currentTarget.value)\n : [...dropdownSelectedOption, option]\n\n if (selectedOption === undefined) {\n setDropdownSelectedOption(update)\n }\n\n if (onSelectOption) onSelectOption(update)\n }\n }}\n />\n }\n />\n )\n })}\n </>\n )}\n </MenuList>\n ) : (\n <MenuList\n ref={menuListRef}\n id={menuListId}\n role='listbox'\n aria-labelledby={label ? inputLabelId : undefined}\n >\n {menuOptions.map((option) => {\n const selected = dropdownSelectedOption.findIndex((item) => item.value === option.value) !== -1\n\n return (\n <ListItem\n {...sizeProps}\n role='option'\n aria-selected={selected}\n ref={selected ? selectedOptionRef : undefined}\n key={option.value}\n text={option.text}\n active={selected}\n danger={Boolean(selected && status === 'error')}\n success={Boolean(selected && status === 'success')}\n disabled={rootProps.disabled || option.disabled}\n borderRadius={8}\n ellipsis={false}\n textProps={{ wordBreak: 'break-word' }}\n onClick={(evt) => {\n evt.stopPropagation()\n\n if (!readOnly) {\n const update = { ...option }\n\n if (selectedOption === undefined) {\n updateInputText(getDropdownInputText(update))\n setDropdownSelectedOption(getDropdownSelectedOption(update))\n }\n\n if (onSelectOption) onSelectOption(update)\n\n inputRef.current?.focus()\n setMenuOpenRequest(false)\n }\n }}\n />\n )\n })}\n </MenuList>\n )}\n </DropdownMenu>\n }\n />\n )\n }),\n {\n sizes: SIZES,\n displayName: COMPONENT_NAME,\n }\n)\n\nexport { Dropdown, COMPONENT_NAME }\n"],"names":["Dropdown","withMergedProps","forwardRef","props","ref","size","name","labelPosition","searchable","primary","optionsMultiToggle","iconProps","menuProps","loadingIconProps","optionsEmptyIconProps","loading","autoFocus","disableAutoScrollToSelectedOption","closeMenuOnScroll","scrollMonitorTarget","contrast","selectedOption","defaultSelectedOption","icon","inputMode","loadingMessage","loadingIcon","maxLength","multiple","clearable","onChangeInput","onCloseMenu","onOpenMenu","onSelectOption","options","loadOptions","groupSelectedOptions","optionsMultiToggleCaption","optionsEmptyMessage","optionsEmptyIcon","palette","placeholder","readOnly","required","status","sizeXXS","sizeXS","sizeS","sizeM","sizeL","sizeXL","form","label","rootProps","sizeProps","iconBaseProps","sizes","SIZES_ICON","color","disabled","formInputLabelId","useMemo","id","nanoid","inputLabelId","menuListId","filteredOptions","getFilteredOptions","useFilteredOptions","loadedOptions","optionsLoading","getLoadedOptions","useLoadedOptions","dropdownSelectedOption","setDropdownSelectedOption","useState","getDropdownSelectedOption","undefined","inputText","setInputText","getDropdownInputText","focusWithin","setFocusWithin","menuOpenRequest","setMenuOpenRequest","menuOptions","menuOptionsLoading","menuOptionsGroups","groupDropdownOptions","menuOpen","inputRequired","length","inputActive","Boolean","multiToggleChecked","multiToggleIndeterminate","inputRef","useRef","menuRef","setMenuRef","menuListRef","selectedOptionRef","menuOpenPrevRef","updateInputText","useCallback","inputTextValue","updateOptions","updateOptionsDebounced","createDebouncedCallback","preventBlur","evt","target","current","Node","currentTarget","contains","renderInPortal","preventDefault","useScrollMonitor","onScrollStart","focus","useLayoutEffect","useEffect","menuRect","getBoundingClientRect","selectedOptionRect","top","bottom","setTimeout","scrollTo","offsetTop","_jsx","FormInputLabel","onColored","error","success","jsx","Styled","up","labelColorDisabled","labelColor","backgroundColor","backgroundColorDisabled","backgroundColorHover","borderColor","borderColorDisabled","onClick","onPointerDown","onMouseDown","window","PointerEvent","onFocus","onBlur","relatedTarget","input","_jsxs","jsxs","_Fragment","children","type","tabIndex","FormInput","role","autoComplete","autoCapitalize","autoCorrect","spellCheck","active","labelId","value","colorDisabled","placeholderColor","placeholderColorDisabled","selectionStart","selectionEnd","stopPropagation","onChange","inputValue","onKeyDown","keyboardKeys","Enter","validate","key","Space","prev","Esc","Tab","ArrowDown","menuItems","idx","findIndex","item","focusTarget","HTMLElement","focusFirstFocusable","ArrowUp","focusLastFocusable","map","option","addon","Chip","black","marginLeft","cursor","text","textProps","appearance","colorHover","discardButtonProps","square","IconButton","dropdown","DropdownMenu","setRef","open","popperReferenceId","secondary","elevated","disableAutoFocus","menuBackgroundColor","menuBorderColor","empty","emptyMessage","emptyIcon","emptyIconProps","Backspace","MenuList","ListItem","borderRadius","ellipsis","wordBreak","control","InputCheckbox","SIZES_CHECKBOX","checked","indeterminate","update","filter","MenuDivider","optionStatus","optionErrorStatus","optionSuccessStatus","_createElement","danger","selected","SIZES","displayName"],"mappings":"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"}