@scbt-ecom/ui 0.140.4 → 0.141.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as n}from"react/jsx-runtime";import{useRef as b}from"react";import{useKeyboardNavigation as v}from"./hooks/useKeyboardNavigation.js";import{isOptionActive as _}from"./model/utils.js";import{DropdownItem as I}from"./ui/dropdownItem/DropdownItem.js";import{EmptyList as L}from"./ui/Empty.js";import{useClickOutside as R}from"../../hooks/useClickOutside.js";import"react-hook-form";import{cn as g}from"../../utils/cn.js";const C=({options:f,multiple:p,onPick:t,value:d,className:l,displayValue:h,classes:o,target:u,empty:w="Список пуст",...x})=>{const a=b(null),{refs:c,focusedIndex:s,setFocusedIndex:i}=v({options:f,multiple:p,onPick:t,value:d}),y=e=>{var r,m;t==null||t(e),u&&u.current&&((m=(r=u.current)==null?void 0:r.querySelector("input"))==null||m.focus())};return R(a,()=>i(-1)),n("ul",{...x,ref:c.setRoot(),className:g("customScrollbar-y mt-1 max-h-[264px] w-full overflow-y-auto scroll-smooth rounded-md bg-color-white p-1 shadow-[0_8px_20px_0px_rgba(41,41,41,0.08)]",o==null?void 0:o.root,l),children:f.length>0?f.map((e,r)=>{const m=_(e,d);return n(I,{ref:c.setReference,item:e,active:m,focused:s===r,multiple:p,onPick:y,displayValue:h,onMouseEnter:()=>i(r),onMouseLeave:()=>i(-1),classes:o==null?void 0:o.item,"data-test-id":`list-item-${r}`},r)}):n(L,{children:w})})};export{C as DropdownList};
|
|
2
2
|
//# sourceMappingURL=DropdownList.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DropdownList.js","sources":["../../../../../lib/shared/ui/dropdownList/DropdownList.tsx"],"sourcesContent":["import { useRef } from 'react'\nimport { useKeyboardNavigation } from './hooks'\nimport { isOptionActive } from './model'\nimport { DropdownItem, type DropdownItemClasses, type DropdownItemOption, EmptyList } from './ui'\nimport { useClickOutside } from '$/shared/hooks'\nimport { cn } from '$/shared/utils'\n\nexport type DropdownListClasses = {\n root?: string\n item?: DropdownItemClasses\n}\n\nexport interface DropdownListProps<Multi extends boolean = false> extends React.HTMLAttributes<HTMLUListElement> {\n options: DropdownItemOption[]\n /**\n * Значения выбранные по умолчанию\n */\n value?: Multi extends true ? DropdownItemOption[] : DropdownItemOption | null\n /**\n * Функция при выборе значения из списка\n * @param item\n */\n onPick?: (item: DropdownItemOption) => void\n /**\n * Поддержка множественного выбора\n */\n multiple?: Multi\n /**\n * Функция для управления отображаемым значением\n */\n displayValue?: (option: DropdownItemOption) => string\n /**\n * Дополнительные стили\n */\n classes?: DropdownListClasses\n /**\n * Целевая нода, с которой будет взаимодействовать список\n */\n target?: React.RefObject<HTMLElement>\n /**\n * Отображаемое содержимое при пустом списке\n */\n empty?: React.ReactNode\n}\n\nexport const DropdownList = <Multi extends boolean>({\n options,\n multiple,\n onPick,\n value,\n className,\n displayValue,\n classes,\n target,\n empty = 'Список пуст',\n ...props\n}: DropdownListProps<Multi>) => {\n const ref = useRef<HTMLUListElement>(null)\n\n const { refs, focusedIndex, setFocusedIndex } = useKeyboardNavigation<HTMLUListElement, HTMLLIElement, Multi>({\n options,\n multiple,\n onPick,\n value\n })\n\n const elementPickHandler = (item: DropdownItemOption) => {\n onPick?.(item)\n\n if (target && target.current) {\n target.current
|
|
1
|
+
{"version":3,"file":"DropdownList.js","sources":["../../../../../lib/shared/ui/dropdownList/DropdownList.tsx"],"sourcesContent":["import { useRef } from 'react'\nimport { useKeyboardNavigation } from './hooks'\nimport { isOptionActive } from './model'\nimport { DropdownItem, type DropdownItemClasses, type DropdownItemOption, EmptyList } from './ui'\nimport { useClickOutside } from '$/shared/hooks'\nimport { cn } from '$/shared/utils'\n\nexport type DropdownListClasses = {\n root?: string\n item?: DropdownItemClasses\n}\n\nexport interface DropdownListProps<Multi extends boolean = false> extends React.HTMLAttributes<HTMLUListElement> {\n options: DropdownItemOption[]\n /**\n * Значения выбранные по умолчанию\n */\n value?: Multi extends true ? DropdownItemOption[] : DropdownItemOption | null\n /**\n * Функция при выборе значения из списка\n * @param item\n */\n onPick?: (item: DropdownItemOption) => void\n /**\n * Поддержка множественного выбора\n */\n multiple?: Multi\n /**\n * Функция для управления отображаемым значением\n */\n displayValue?: (option: DropdownItemOption) => string\n /**\n * Дополнительные стили\n */\n classes?: DropdownListClasses\n /**\n * Целевая нода, с которой будет взаимодействовать список\n */\n target?: React.RefObject<HTMLElement>\n /**\n * Отображаемое содержимое при пустом списке\n */\n empty?: React.ReactNode\n}\n\nexport const DropdownList = <Multi extends boolean>({\n options,\n multiple,\n onPick,\n value,\n className,\n displayValue,\n classes,\n target,\n empty = 'Список пуст',\n ...props\n}: DropdownListProps<Multi>) => {\n const ref = useRef<HTMLUListElement>(null)\n\n const { refs, focusedIndex, setFocusedIndex } = useKeyboardNavigation<HTMLUListElement, HTMLLIElement, Multi>({\n options,\n multiple,\n onPick,\n value\n })\n\n const elementPickHandler = (item: DropdownItemOption) => {\n onPick?.(item)\n\n if (target && target.current) {\n target.current?.querySelector('input')?.focus()\n }\n }\n\n useClickOutside(ref, () => setFocusedIndex(-1))\n\n return (\n <ul\n {...props}\n ref={refs.setRoot()}\n className={cn(\n 'customScrollbar-y mt-1 max-h-[264px] w-full overflow-y-auto scroll-smooth rounded-md bg-color-white p-1 shadow-[0_8px_20px_0px_rgba(41,41,41,0.08)]',\n classes?.root,\n className\n )}\n >\n {options.length > 0 ? (\n options.map((option, index) => {\n const active = isOptionActive(option, value)\n\n return (\n <DropdownItem\n ref={refs.setReference}\n key={index}\n item={option}\n active={active}\n focused={focusedIndex === index}\n multiple={multiple}\n onPick={elementPickHandler}\n displayValue={displayValue}\n onMouseEnter={() => setFocusedIndex(index)}\n onMouseLeave={() => setFocusedIndex(-1)}\n classes={classes?.item}\n data-test-id={`list-item-${index}`}\n />\n )\n })\n ) : (\n <EmptyList>{empty}</EmptyList>\n )}\n </ul>\n )\n}\n"],"names":["DropdownList","options","multiple","onPick","value","className","displayValue","classes","target","empty","props","ref","useRef","refs","focusedIndex","setFocusedIndex","useKeyboardNavigation","elementPickHandler","item","_b","_a","useClickOutside","jsx","cn","option","index","active","isOptionActive","DropdownItem","EmptyList"],"mappings":"6aA6CO,MAAMA,EAAe,CAAwB,CAClD,QAAAC,EACA,SAAAC,EACA,OAAAC,EACA,MAAAC,EACA,UAAAC,EACA,aAAAC,EACA,QAAAC,EACA,OAAAC,EACA,MAAAC,EAAQ,cACR,GAAGC,CACL,IAAgC,CAC9B,MAAMC,EAAMC,EAAyB,IAAI,EAEnC,CAAE,KAAAC,EAAM,aAAAC,EAAc,gBAAAC,CAAA,EAAoBC,EAA8D,CAC5G,QAAAf,EACA,SAAAC,EACA,OAAAC,EACA,MAAAC,CAAA,CACD,EAEKa,EAAsBC,GAA6B,SACvDf,GAAA,MAAAA,EAASe,GAELV,GAAUA,EAAO,WACnBW,GAAAC,EAAAZ,EAAO,UAAP,YAAAY,EAAgB,cAAc,WAA9B,MAAAD,EAAwC,QAE5C,EAEA,OAAAE,EAAgBV,EAAK,IAAMI,EAAgB,EAAE,CAAC,EAG5CO,EAAC,KAAA,CACE,GAAGZ,EACJ,IAAKG,EAAK,QAAA,EACV,UAAWU,EACT,sJACAhB,GAAA,YAAAA,EAAS,KACTF,CAAA,EAGD,WAAQ,OAAS,EAChBJ,EAAQ,IAAI,CAACuB,EAAQC,IAAU,CAC7B,MAAMC,EAASC,EAAeH,EAAQpB,CAAK,EAE3C,OACEkB,EAACM,EAAA,CACC,IAAKf,EAAK,aAEV,KAAMW,EACN,OAAAE,EACA,QAASZ,IAAiBW,EAC1B,SAAAvB,EACA,OAAQe,EACR,aAAAX,EACA,aAAc,IAAMS,EAAgBU,CAAK,EACzC,aAAc,IAAMV,EAAgB,EAAE,EACtC,QAASR,GAAA,YAAAA,EAAS,KAClB,eAAc,aAAakB,CAAK,EAAA,EAV3BA,CAAA,CAaX,CAAC,EAEDH,EAACO,EAAA,CAAW,SAAApB,CAAA,CAAM,CAAA,CAAA,CAI1B"}
|