@scbt-ecom/ui 0.143.1 → 0.144.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.
Files changed (48) hide show
  1. package/dist/lib/shared/ui/dropdownList/DropdownList.js +1 -1
  2. package/dist/lib/shared/ui/dropdownList/DropdownList.js.map +1 -1
  3. package/dist/lib/shared/ui/formElements/controlled/autocomplete/AutocompleteControl.js +1 -1
  4. package/dist/lib/shared/ui/formElements/controlled/autocomplete/AutocompleteControl.js.map +1 -1
  5. package/dist/lib/shared/ui/formElements/controlled/combobox/ComboboxControl.js +1 -1
  6. package/dist/lib/shared/ui/formElements/controlled/combobox/ComboboxControl.js.map +1 -1
  7. package/dist/lib/shared/ui/formElements/controlled/dayPickerControl/single.js +1 -1
  8. package/dist/lib/shared/ui/formElements/controlled/dayPickerControl/single.js.map +1 -1
  9. package/dist/lib/shared/ui/formElements/controlled/editor/model/helper.js +1 -1
  10. package/dist/lib/shared/ui/formElements/controlled/editor/model/helper.js.map +1 -1
  11. package/dist/lib/shared/ui/formElements/controlled/editor/ui/Editor.js +1 -1
  12. package/dist/lib/shared/ui/formElements/controlled/editor/ui/Editor.js.map +1 -1
  13. package/dist/lib/shared/ui/formElements/controlled/input/InputControl.js +1 -1
  14. package/dist/lib/shared/ui/formElements/controlled/input/InputControl.js.map +1 -1
  15. package/dist/lib/shared/ui/formElements/uncontrolled/combobox/combobox.js +1 -1
  16. package/dist/lib/shared/ui/formElements/uncontrolled/combobox/combobox.js.map +1 -1
  17. package/dist/lib/shared/ui/formElements/uncontrolled/input/Input.js +1 -1
  18. package/dist/lib/shared/ui/formElements/uncontrolled/input/Input.js.map +1 -1
  19. package/dist/lib/shared/ui/formElements/uncontrolled/radio/RadioGroup.js +1 -1
  20. package/dist/lib/shared/ui/formElements/uncontrolled/radio/RadioGroup.js.map +1 -1
  21. package/dist/lib/shared/ui/formElements/uncontrolled/slider/ui/sliderAlgorithmic/SliderAlgorithmic.js +1 -1
  22. package/dist/lib/shared/ui/formElements/uncontrolled/slider/ui/sliderAlgorithmic/SliderAlgorithmic.js.map +1 -1
  23. package/dist/lib/shared/ui/formElements/uncontrolled/slider/ui/sliderMarks/SliderMarks.js +1 -1
  24. package/dist/lib/shared/ui/formElements/uncontrolled/slider/ui/sliderMarks/SliderMarks.js.map +1 -1
  25. package/dist/lib/shared/ui/formElements/uncontrolled/slider/ui/sliderStep/SliderStep.js +1 -1
  26. package/dist/lib/shared/ui/formElements/uncontrolled/slider/ui/sliderStep/SliderStep.js.map +1 -1
  27. package/dist/lib/shared/ui/formElements/uncontrolled/textarea/Textarea.js +1 -1
  28. package/dist/lib/shared/ui/formElements/uncontrolled/textarea/Textarea.js.map +1 -1
  29. package/dist/lib/shared/ui/formElements/uncontrolled/uploader/ui/UploaderFiles.js +1 -1
  30. package/dist/lib/shared/ui/formElements/uncontrolled/uploader/ui/UploaderFiles.js.map +1 -1
  31. package/dist/lib/shared/ui/formElements/uncontrolled/uploader/ui/UploaderInput.js +1 -1
  32. package/dist/lib/shared/ui/formElements/uncontrolled/uploader/ui/UploaderInput.js.map +1 -1
  33. package/dist/lib/shared/ui/icon/allowedIcons.js +1 -1
  34. package/dist/lib/shared/ui/icon/allowedIcons.js.map +1 -1
  35. package/dist/lib/shared/ui/icon/iconsMap.js +1 -1
  36. package/dist/lib/shared/ui/icon/iconsMap.js.map +1 -1
  37. package/dist/lib/shared/ui/modal/Modal.js +1 -1
  38. package/dist/lib/shared/ui/modal/Modal.js.map +1 -1
  39. package/dist/lib/widgets/model/helpers.js +2 -2
  40. package/dist/lib/widgets/model/helpers.js.map +1 -1
  41. package/dist/static/editor/nbsp.svg.js +2 -0
  42. package/dist/static/editor/nbsp.svg.js.map +1 -0
  43. package/dist/static/static/editor/nbsp.svg +1 -0
  44. package/dist/stats.html +1 -1
  45. package/dist/types/lib/shared/ui/formElements/controlled/input/InputControl.d.ts +1 -1
  46. package/dist/types/lib/shared/ui/icon/allowedIcons.d.ts +2 -2
  47. package/dist/types/lib/shared/ui/icon/iconsMap.d.ts +6 -0
  48. package/package.json +1 -1
@@ -1,2 +1,2 @@
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};
1
+ import{jsx as n}from"react/jsx-runtime";import{useRef as s}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=s(null),{refs:c,focusedIndex:y,setFocusedIndex:i}=v({options:f,multiple:p,onPick:t,value:d}),b=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:y===r,multiple:p,onPick:b,displayValue:h,onMouseEnter:()=>i(r),onMouseLeave:()=>i(-1),classes:o==null?void 0:o.item,"data-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?.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"}
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-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,UAAS,aAAakB,CAAK,EAAA,EAVtBA,CAAA,CAaX,CAAC,EAEDH,EAACO,EAAA,CAAW,SAAApB,CAAA,CAAM,CAAA,CAAA,CAI1B"}
@@ -1,2 +1,2 @@
1
- import{jsxs as x,jsx as i}from"react/jsx-runtime";import{useController as v}from"react-hook-form";import{cn as w}from"../../../../utils/cn.js";import"react";import"../../../button/Button.js";import"../../../buttonIcon/ButtonIcon.js";import"../../../calendar/Calendar.js";import"../../../calendar/model/utils.js";import"../../../accordion/Accordion.js";import"react-dom";import"../../../modal/ui/IframeModalContent.js";import"../../../../../../node_modules/react-hot-toast/dist/index.js";import"../../../table/ui/primitives/Primitives.js";import"../../../carousel/ui/CarouselContent.js";import"../../../slot/Slot.js";import{AutocompleteBase as j}from"../../uncontrolled/autocomplete/Autocomplete.js";import"../../uncontrolled/checkbox/Checkbox.js";import"../../uncontrolled/combobox/combobox.js";import"../../uncontrolled/dayPicker/DayPicker.js";import"../../uncontrolled/input/Input.js";import"../../uncontrolled/inputOtp/InputOtpBase.js";import"../../uncontrolled/maskInput/MaskInput.js";import"../../uncontrolled/radio/RadioGroup.js";import"../../uncontrolled/radio/ui/RadioItem.js";import"../../uncontrolled/slider/SliderBase.js";import"../../uncontrolled/switch/Switch.js";import"../../uncontrolled/textarea/Textarea.js";import"../../uncontrolled/uploader/UploaderBase.js";import"../../uncontrolled/inputCurrency/InputCurrency.js";import"../../../../../../src/configs/api.js";import"../editor/ui/Editor.js";import"../input/MaskInputControl.js";import"../../../dropdownList/ui/dropdownItem/DropdownItem.js";import{MessageView as A}from"../../ui/MessageView.js";const mt=({control:r,name:e,defaultValue:p,disabled:a,helperText:s,rules:n,shouldUnregister:c,classes:l,...o})=>{const{field:d,fieldState:f}=v({control:r,name:e,defaultValue:p,disabled:a,rules:n,shouldUnregister:c}),{error:t,invalid:m,isTouched:u}=f,{container:g,message:h}=l||{};return x("div",{className:w("w-full",g),"data-test-id":"autocomplete",children:[i(j,{...o,...d,invalid:m,attachmentProps:{...o==null?void 0:o.attachmentProps,icon:void 0,invalid:m,isTouched:u,withValidateIcons:!0},"data-error-message":t==null?void 0:t.message}),i(A,{className:h,text:(t==null?void 0:t.message)||s,intent:t?"error":"simple"})]})};export{mt as AutocompleteControl};
1
+ import{jsxs as x,jsx as i}from"react/jsx-runtime";import{useController as v}from"react-hook-form";import{cn as w}from"../../../../utils/cn.js";import"react";import"../../../button/Button.js";import"../../../buttonIcon/ButtonIcon.js";import"../../../calendar/Calendar.js";import"../../../calendar/model/utils.js";import"../../../accordion/Accordion.js";import"react-dom";import"../../../modal/ui/IframeModalContent.js";import"../../../../../../node_modules/react-hot-toast/dist/index.js";import"../../../table/ui/primitives/Primitives.js";import"../../../carousel/ui/CarouselContent.js";import"../../../slot/Slot.js";import{AutocompleteBase as j}from"../../uncontrolled/autocomplete/Autocomplete.js";import"../../uncontrolled/checkbox/Checkbox.js";import"../../uncontrolled/combobox/combobox.js";import"../../uncontrolled/dayPicker/DayPicker.js";import"../../uncontrolled/input/Input.js";import"../../uncontrolled/inputOtp/InputOtpBase.js";import"../../uncontrolled/maskInput/MaskInput.js";import"../../uncontrolled/radio/RadioGroup.js";import"../../uncontrolled/radio/ui/RadioItem.js";import"../../uncontrolled/slider/SliderBase.js";import"../../uncontrolled/switch/Switch.js";import"../../uncontrolled/textarea/Textarea.js";import"../../uncontrolled/uploader/UploaderBase.js";import"../../uncontrolled/inputCurrency/InputCurrency.js";import"../../../../../../src/configs/api.js";import"../editor/ui/Editor.js";import"../input/MaskInputControl.js";import"../../../dropdownList/ui/dropdownItem/DropdownItem.js";import{MessageView as A}from"../../ui/MessageView.js";const mt=({control:r,name:e,defaultValue:p,disabled:a,helperText:s,rules:n,shouldUnregister:c,classes:l,...o})=>{const{field:d,fieldState:f}=v({control:r,name:e,defaultValue:p,disabled:a,rules:n,shouldUnregister:c}),{error:t,invalid:m,isTouched:u}=f,{container:g,message:h}=l||{};return x("div",{className:w("w-full",g),"data-id":"autocomplete",children:[i(j,{...o,...d,invalid:m,attachmentProps:{...o==null?void 0:o.attachmentProps,icon:void 0,invalid:m,isTouched:u,withValidateIcons:!0},"data-error-message":t==null?void 0:t.message}),i(A,{className:h,text:(t==null?void 0:t.message)||s,intent:t?"error":"simple"})]})};export{mt as AutocompleteControl};
2
2
  //# sourceMappingURL=AutocompleteControl.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AutocompleteControl.js","sources":["../../../../../../../lib/shared/ui/formElements/controlled/autocomplete/AutocompleteControl.tsx"],"sourcesContent":["import { type Control, type FieldValues, type Path, useController, type UseControllerProps } from 'react-hook-form'\nimport { MessageView } from '../../ui'\nimport { AutocompleteBase, type AutocompleteBaseProps } from '$/shared/ui'\nimport { cn } from '$/shared/utils'\n\nexport type AutocompleteControlProps<\n TFieldValues extends FieldValues,\n T,\n TName extends Path<TFieldValues> = Path<TFieldValues>\n> = UseControllerProps<TFieldValues, TName> &\n Omit<AutocompleteBaseProps<T>, 'classes'> & {\n control: Control<TFieldValues>\n helperText?: string\n classes?: AutocompleteBaseProps<T>['classes'] & {\n container?: string\n message?: string\n }\n }\n\nexport const AutocompleteControl = <TFieldValues extends FieldValues, T>({\n control,\n name,\n defaultValue,\n disabled,\n helperText,\n rules,\n shouldUnregister,\n classes,\n ...props\n}: AutocompleteControlProps<TFieldValues, T>) => {\n const { field, fieldState } = useController({\n control,\n name,\n defaultValue,\n disabled,\n rules,\n shouldUnregister\n })\n\n const { error, invalid, isTouched } = fieldState\n const { container, message } = classes || {}\n\n return (\n <div className={cn('w-full', container)} data-test-id='autocomplete'>\n <AutocompleteBase\n {...props}\n {...field}\n invalid={invalid}\n attachmentProps={{ ...props?.attachmentProps, icon: undefined, invalid, isTouched, withValidateIcons: true }}\n data-error-message={error?.message}\n />\n <MessageView className={message} text={error?.message || helperText} intent={error ? 'error' : 'simple'} />\n </div>\n )\n}\n"],"names":["AutocompleteControl","control","name","defaultValue","disabled","helperText","rules","shouldUnregister","classes","props","field","fieldState","useController","error","invalid","isTouched","container","message","jsxs","cn","jsx","AutocompleteBase","MessageView"],"mappings":"4hDAmBO,MAAMA,GAAsB,CAAsC,CACvE,QAAAC,EACA,KAAAC,EACA,aAAAC,EACA,SAAAC,EACA,WAAAC,EACA,MAAAC,EACA,iBAAAC,EACA,QAAAC,EACA,GAAGC,CACL,IAAiD,CAC/C,KAAM,CAAE,MAAAC,EAAO,WAAAC,CAAA,EAAeC,EAAc,CAC1C,QAAAX,EACA,KAAAC,EACA,aAAAC,EACA,SAAAC,EACA,MAAAE,EACA,iBAAAC,CAAA,CACD,EAEK,CAAE,MAAAM,EAAO,QAAAC,EAAS,UAAAC,CAAA,EAAcJ,EAChC,CAAE,UAAAK,EAAW,QAAAC,CAAA,EAAYT,GAAW,CAAA,EAE1C,OACEU,EAAC,OAAI,UAAWC,EAAG,SAAUH,CAAS,EAAG,eAAa,eACpD,SAAA,CAAAI,EAACC,EAAA,CACE,GAAGZ,EACH,GAAGC,EACJ,QAAAI,EACA,gBAAiB,CAAE,GAAGL,GAAA,YAAAA,EAAO,gBAAiB,KAAM,OAAW,QAAAK,EAAS,UAAAC,EAAW,kBAAmB,EAAA,EACtG,qBAAoBF,GAAA,YAAAA,EAAO,OAAA,CAAA,EAE7BO,EAACE,EAAA,CAAY,UAAWL,EAAS,MAAMJ,GAAA,YAAAA,EAAO,UAAWR,EAAY,OAAQQ,EAAQ,QAAU,QAAA,CAAU,CAAA,EAC3G,CAEJ"}
1
+ {"version":3,"file":"AutocompleteControl.js","sources":["../../../../../../../lib/shared/ui/formElements/controlled/autocomplete/AutocompleteControl.tsx"],"sourcesContent":["import { type Control, type FieldValues, type Path, useController, type UseControllerProps } from 'react-hook-form'\nimport { MessageView } from '../../ui'\nimport { AutocompleteBase, type AutocompleteBaseProps } from '$/shared/ui'\nimport { cn } from '$/shared/utils'\n\nexport type AutocompleteControlProps<\n TFieldValues extends FieldValues,\n T,\n TName extends Path<TFieldValues> = Path<TFieldValues>\n> = UseControllerProps<TFieldValues, TName> &\n Omit<AutocompleteBaseProps<T>, 'classes'> & {\n control: Control<TFieldValues>\n helperText?: string\n classes?: AutocompleteBaseProps<T>['classes'] & {\n container?: string\n message?: string\n }\n }\n\nexport const AutocompleteControl = <TFieldValues extends FieldValues, T>({\n control,\n name,\n defaultValue,\n disabled,\n helperText,\n rules,\n shouldUnregister,\n classes,\n ...props\n}: AutocompleteControlProps<TFieldValues, T>) => {\n const { field, fieldState } = useController({\n control,\n name,\n defaultValue,\n disabled,\n rules,\n shouldUnregister\n })\n\n const { error, invalid, isTouched } = fieldState\n const { container, message } = classes || {}\n\n return (\n <div className={cn('w-full', container)} data-id='autocomplete'>\n <AutocompleteBase\n {...props}\n {...field}\n invalid={invalid}\n attachmentProps={{ ...props?.attachmentProps, icon: undefined, invalid, isTouched, withValidateIcons: true }}\n data-error-message={error?.message}\n />\n <MessageView className={message} text={error?.message || helperText} intent={error ? 'error' : 'simple'} />\n </div>\n )\n}\n"],"names":["AutocompleteControl","control","name","defaultValue","disabled","helperText","rules","shouldUnregister","classes","props","field","fieldState","useController","error","invalid","isTouched","container","message","jsxs","cn","jsx","AutocompleteBase","MessageView"],"mappings":"4hDAmBO,MAAMA,GAAsB,CAAsC,CACvE,QAAAC,EACA,KAAAC,EACA,aAAAC,EACA,SAAAC,EACA,WAAAC,EACA,MAAAC,EACA,iBAAAC,EACA,QAAAC,EACA,GAAGC,CACL,IAAiD,CAC/C,KAAM,CAAE,MAAAC,EAAO,WAAAC,CAAA,EAAeC,EAAc,CAC1C,QAAAX,EACA,KAAAC,EACA,aAAAC,EACA,SAAAC,EACA,MAAAE,EACA,iBAAAC,CAAA,CACD,EAEK,CAAE,MAAAM,EAAO,QAAAC,EAAS,UAAAC,CAAA,EAAcJ,EAChC,CAAE,UAAAK,EAAW,QAAAC,CAAA,EAAYT,GAAW,CAAA,EAE1C,OACEU,EAAC,OAAI,UAAWC,EAAG,SAAUH,CAAS,EAAG,UAAQ,eAC/C,SAAA,CAAAI,EAACC,EAAA,CACE,GAAGZ,EACH,GAAGC,EACJ,QAAAI,EACA,gBAAiB,CAAE,GAAGL,GAAA,YAAAA,EAAO,gBAAiB,KAAM,OAAW,QAAAK,EAAS,UAAAC,EAAW,kBAAmB,EAAA,EACtG,qBAAoBF,GAAA,YAAAA,EAAO,OAAA,CAAA,EAE7BO,EAACE,EAAA,CAAY,UAAWL,EAAS,MAAMJ,GAAA,YAAAA,EAAO,UAAWR,EAAY,OAAQQ,EAAQ,QAAU,QAAA,CAAU,CAAA,EAC3G,CAEJ"}
@@ -1,2 +1,2 @@
1
- import{jsxs as y,jsx as e}from"react/jsx-runtime";import{useController as F}from"react-hook-form";import{Combobox as H}from"../../uncontrolled/combobox/combobox.js";import{useComboboxControl as I}from"./hooks/useComboboxControl.js";import{cn as M}from"../../../../utils/cn.js";import"react";import"../../../button/Button.js";import"../../../buttonIcon/ButtonIcon.js";import"../../../calendar/Calendar.js";import"../../../calendar/model/utils.js";import"../../../accordion/Accordion.js";import"react-dom";import"../../../modal/ui/IframeModalContent.js";import"../../../../../../node_modules/react-hot-toast/dist/index.js";import"../../../table/ui/primitives/Primitives.js";import"../../../carousel/ui/CarouselContent.js";import"../../../slot/Slot.js";import"../../uncontrolled/autocomplete/Autocomplete.js";import"../../uncontrolled/checkbox/Checkbox.js";import"../../uncontrolled/dayPicker/DayPicker.js";import"../../uncontrolled/input/Input.js";import"../../uncontrolled/inputOtp/InputOtpBase.js";import"../../uncontrolled/maskInput/MaskInput.js";import"../../uncontrolled/radio/RadioGroup.js";import"../../uncontrolled/radio/ui/RadioItem.js";import"../../uncontrolled/slider/SliderBase.js";import"../../uncontrolled/switch/Switch.js";import"../../uncontrolled/textarea/Textarea.js";import"../../uncontrolled/uploader/UploaderBase.js";import"../../uncontrolled/inputCurrency/InputCurrency.js";import"../../../../../../src/configs/api.js";import"../editor/ui/Editor.js";import"../input/MaskInputControl.js";import"../../../dropdownList/ui/dropdownItem/DropdownItem.js";import{MessageView as S}from"../../ui/MessageView.js";const go=({control:p,className:s,name:a,rules:n,shouldUnregister:c,disabled:t,defaultValue:l,options:r,helperText:f,returnValue:g,classes:x,multiple:m,...i})=>{const{field:b,fieldState:d}=F({control:p,name:a,rules:n,shouldUnregister:c,disabled:t,defaultValue:l}),{error:o,invalid:C}=d,{value:h,onChange:u,...v}=b,{root:w,combobox:j,message:N}=x??{},{selected:P,changeHandler:V}=I({value:h,onChange:u,multiple:m,returnValue:g,options:r});return y("div",{className:M("w-full items-start gap-y-2",w,s),"data-test-id":"combobox",children:[e(H,{...i,...v,options:r,value:P,onChange:V,invalid:C,disabled:t,multiple:m,classes:j,attachmentProps:{withValidateIcons:!1,...i.attachmentProps},"data-error-message":o==null?void 0:o.message}),e(S,{text:o?o.message:f,className:N,intent:o?"error":"simple",disabled:t})]})};export{go as ComboboxControl};
1
+ import{jsxs as y,jsx as e}from"react/jsx-runtime";import{useController as F}from"react-hook-form";import{Combobox as H}from"../../uncontrolled/combobox/combobox.js";import{useComboboxControl as I}from"./hooks/useComboboxControl.js";import{cn as M}from"../../../../utils/cn.js";import"react";import"../../../button/Button.js";import"../../../buttonIcon/ButtonIcon.js";import"../../../calendar/Calendar.js";import"../../../calendar/model/utils.js";import"../../../accordion/Accordion.js";import"react-dom";import"../../../modal/ui/IframeModalContent.js";import"../../../../../../node_modules/react-hot-toast/dist/index.js";import"../../../table/ui/primitives/Primitives.js";import"../../../carousel/ui/CarouselContent.js";import"../../../slot/Slot.js";import"../../uncontrolled/autocomplete/Autocomplete.js";import"../../uncontrolled/checkbox/Checkbox.js";import"../../uncontrolled/dayPicker/DayPicker.js";import"../../uncontrolled/input/Input.js";import"../../uncontrolled/inputOtp/InputOtpBase.js";import"../../uncontrolled/maskInput/MaskInput.js";import"../../uncontrolled/radio/RadioGroup.js";import"../../uncontrolled/radio/ui/RadioItem.js";import"../../uncontrolled/slider/SliderBase.js";import"../../uncontrolled/switch/Switch.js";import"../../uncontrolled/textarea/Textarea.js";import"../../uncontrolled/uploader/UploaderBase.js";import"../../uncontrolled/inputCurrency/InputCurrency.js";import"../../../../../../src/configs/api.js";import"../editor/ui/Editor.js";import"../input/MaskInputControl.js";import"../../../dropdownList/ui/dropdownItem/DropdownItem.js";import{MessageView as S}from"../../ui/MessageView.js";const go=({control:p,className:s,name:a,rules:n,shouldUnregister:c,disabled:t,defaultValue:l,options:r,helperText:f,returnValue:g,classes:x,multiple:m,...i})=>{const{field:b,fieldState:d}=F({control:p,name:a,rules:n,shouldUnregister:c,disabled:t,defaultValue:l}),{error:o,invalid:C}=d,{value:h,onChange:u,...v}=b,{root:w,combobox:j,message:N}=x??{},{selected:P,changeHandler:V}=I({value:h,onChange:u,multiple:m,returnValue:g,options:r});return y("div",{className:M("w-full items-start gap-y-2",w,s),"data-id":"combobox",children:[e(H,{...i,...v,options:r,value:P,onChange:V,invalid:C,disabled:t,multiple:m,classes:j,attachmentProps:{withValidateIcons:!1,...i.attachmentProps},"data-error-message":o==null?void 0:o.message}),e(S,{text:o?o.message:f,className:N,intent:o?"error":"simple",disabled:t})]})};export{go as ComboboxControl};
2
2
  //# sourceMappingURL=ComboboxControl.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ComboboxControl.js","sources":["../../../../../../../lib/shared/ui/formElements/controlled/combobox/ComboboxControl.tsx"],"sourcesContent":["import { type Control, type FieldPath, type FieldValues, useController, type UseControllerProps } from 'react-hook-form'\nimport { Combobox, type ComboboxClasses, type ComboboxItemOption, type ComboboxProps } from '../../uncontrolled/combobox'\nimport { useComboboxControl } from './hooks'\nimport { MessageView } from '$/shared/ui/formElements/ui'\nimport { cn } from '$/shared/utils'\n\nexport type ComboboxControlClasses = {\n root?: string\n message?: string\n combobox?: ComboboxClasses\n}\n\nexport type ComboboxControlProps<\n Multi extends boolean = false,\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n> = UseControllerProps<TFieldValues, TName> &\n ComboboxProps<Multi> & {\n control: Control<TFieldValues>\n helperText?: string\n returnValue?: (option: ComboboxItemOption) => string | null\n classes?: ComboboxControlClasses\n }\n\nexport const ComboboxControl = <Multi extends boolean = false, TFieldValues extends FieldValues = FieldValues>({\n control,\n className,\n name,\n rules,\n shouldUnregister,\n disabled,\n defaultValue,\n options,\n helperText,\n returnValue,\n classes,\n multiple,\n ...props\n}: ComboboxControlProps<Multi, TFieldValues>) => {\n const { field, fieldState } = useController({\n control,\n name,\n rules,\n shouldUnregister,\n disabled,\n defaultValue\n })\n\n const { error, invalid } = fieldState\n const { value, onChange, ...restField } = field\n\n const { root, combobox, message } = classes ?? {}\n\n const { selected, changeHandler } = useComboboxControl({\n value,\n onChange,\n multiple,\n returnValue,\n options\n })\n\n return (\n <div className={cn('w-full items-start gap-y-2', root, className)} data-test-id='combobox'>\n <Combobox\n {...props}\n {...restField}\n options={options}\n value={selected}\n onChange={changeHandler}\n invalid={invalid}\n disabled={disabled}\n multiple={multiple}\n classes={combobox}\n attachmentProps={{\n withValidateIcons: false,\n ...props.attachmentProps\n }}\n data-error-message={error?.message}\n />\n <MessageView\n text={error ? error.message : helperText}\n className={message}\n intent={error ? 'error' : 'simple'}\n disabled={disabled}\n />\n </div>\n )\n}\n"],"names":["ComboboxControl","control","className","name","rules","shouldUnregister","disabled","defaultValue","options","helperText","returnValue","classes","multiple","props","field","fieldState","useController","error","invalid","value","onChange","restField","root","combobox","message","selected","changeHandler","useComboboxControl","jsxs","cn","jsx","Combobox","MessageView"],"mappings":"ulDAwBO,MAAMA,GAAkB,CAAgF,CAC7G,QAAAC,EACA,UAAAC,EACA,KAAAC,EACA,MAAAC,EACA,iBAAAC,EACA,SAAAC,EACA,aAAAC,EACA,QAAAC,EACA,WAAAC,EACA,YAAAC,EACA,QAAAC,EACA,SAAAC,EACA,GAAGC,CACL,IAAiD,CAC/C,KAAM,CAAE,MAAAC,EAAO,WAAAC,CAAA,EAAeC,EAAc,CAC1C,QAAAf,EACA,KAAAE,EACA,MAAAC,EACA,iBAAAC,EACA,SAAAC,EACA,aAAAC,CAAA,CACD,EAEK,CAAE,MAAAU,EAAO,QAAAC,CAAA,EAAYH,EACrB,CAAE,MAAAI,EAAO,SAAAC,EAAU,GAAGC,GAAcP,EAEpC,CAAE,KAAAQ,EAAM,SAAAC,EAAU,QAAAC,CAAA,EAAYb,GAAW,CAAA,EAEzC,CAAE,SAAAc,EAAU,cAAAC,CAAA,EAAkBC,EAAmB,CACrD,MAAAR,EACA,SAAAC,EACA,SAAAR,EACA,YAAAF,EACA,QAAAF,CAAA,CACD,EAED,OACEoB,EAAC,OAAI,UAAWC,EAAG,6BAA8BP,EAAMpB,CAAS,EAAG,eAAa,WAC9E,SAAA,CAAA4B,EAACC,EAAA,CACE,GAAGlB,EACH,GAAGQ,EACJ,QAAAb,EACA,MAAOiB,EACP,SAAUC,EACV,QAAAR,EACA,SAAAZ,EACA,SAAAM,EACA,QAASW,EACT,gBAAiB,CACf,kBAAmB,GACnB,GAAGV,EAAM,eAAA,EAEX,qBAAoBI,GAAA,YAAAA,EAAO,OAAA,CAAA,EAE7Ba,EAACE,EAAA,CACC,KAAMf,EAAQA,EAAM,QAAUR,EAC9B,UAAWe,EACX,OAAQP,EAAQ,QAAU,SAC1B,SAAAX,CAAA,CAAA,CACF,EACF,CAEJ"}
1
+ {"version":3,"file":"ComboboxControl.js","sources":["../../../../../../../lib/shared/ui/formElements/controlled/combobox/ComboboxControl.tsx"],"sourcesContent":["import { type Control, type FieldPath, type FieldValues, useController, type UseControllerProps } from 'react-hook-form'\nimport { Combobox, type ComboboxClasses, type ComboboxItemOption, type ComboboxProps } from '../../uncontrolled/combobox'\nimport { useComboboxControl } from './hooks'\nimport { MessageView } from '$/shared/ui/formElements/ui'\nimport { cn } from '$/shared/utils'\n\nexport type ComboboxControlClasses = {\n root?: string\n message?: string\n combobox?: ComboboxClasses\n}\n\nexport type ComboboxControlProps<\n Multi extends boolean = false,\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n> = UseControllerProps<TFieldValues, TName> &\n ComboboxProps<Multi> & {\n control: Control<TFieldValues>\n helperText?: string\n returnValue?: (option: ComboboxItemOption) => string | null\n classes?: ComboboxControlClasses\n }\n\nexport const ComboboxControl = <Multi extends boolean = false, TFieldValues extends FieldValues = FieldValues>({\n control,\n className,\n name,\n rules,\n shouldUnregister,\n disabled,\n defaultValue,\n options,\n helperText,\n returnValue,\n classes,\n multiple,\n ...props\n}: ComboboxControlProps<Multi, TFieldValues>) => {\n const { field, fieldState } = useController({\n control,\n name,\n rules,\n shouldUnregister,\n disabled,\n defaultValue\n })\n\n const { error, invalid } = fieldState\n const { value, onChange, ...restField } = field\n\n const { root, combobox, message } = classes ?? {}\n\n const { selected, changeHandler } = useComboboxControl({\n value,\n onChange,\n multiple,\n returnValue,\n options\n })\n\n return (\n <div className={cn('w-full items-start gap-y-2', root, className)} data-id='combobox'>\n <Combobox\n {...props}\n {...restField}\n options={options}\n value={selected}\n onChange={changeHandler}\n invalid={invalid}\n disabled={disabled}\n multiple={multiple}\n classes={combobox}\n attachmentProps={{\n withValidateIcons: false,\n ...props.attachmentProps\n }}\n data-error-message={error?.message}\n />\n <MessageView\n text={error ? error.message : helperText}\n className={message}\n intent={error ? 'error' : 'simple'}\n disabled={disabled}\n />\n </div>\n )\n}\n"],"names":["ComboboxControl","control","className","name","rules","shouldUnregister","disabled","defaultValue","options","helperText","returnValue","classes","multiple","props","field","fieldState","useController","error","invalid","value","onChange","restField","root","combobox","message","selected","changeHandler","useComboboxControl","jsxs","cn","jsx","Combobox","MessageView"],"mappings":"ulDAwBO,MAAMA,GAAkB,CAAgF,CAC7G,QAAAC,EACA,UAAAC,EACA,KAAAC,EACA,MAAAC,EACA,iBAAAC,EACA,SAAAC,EACA,aAAAC,EACA,QAAAC,EACA,WAAAC,EACA,YAAAC,EACA,QAAAC,EACA,SAAAC,EACA,GAAGC,CACL,IAAiD,CAC/C,KAAM,CAAE,MAAAC,EAAO,WAAAC,CAAA,EAAeC,EAAc,CAC1C,QAAAf,EACA,KAAAE,EACA,MAAAC,EACA,iBAAAC,EACA,SAAAC,EACA,aAAAC,CAAA,CACD,EAEK,CAAE,MAAAU,EAAO,QAAAC,CAAA,EAAYH,EACrB,CAAE,MAAAI,EAAO,SAAAC,EAAU,GAAGC,GAAcP,EAEpC,CAAE,KAAAQ,EAAM,SAAAC,EAAU,QAAAC,CAAA,EAAYb,GAAW,CAAA,EAEzC,CAAE,SAAAc,EAAU,cAAAC,CAAA,EAAkBC,EAAmB,CACrD,MAAAR,EACA,SAAAC,EACA,SAAAR,EACA,YAAAF,EACA,QAAAF,CAAA,CACD,EAED,OACEoB,EAAC,OAAI,UAAWC,EAAG,6BAA8BP,EAAMpB,CAAS,EAAG,UAAQ,WACzE,SAAA,CAAA4B,EAACC,EAAA,CACE,GAAGlB,EACH,GAAGQ,EACJ,QAAAb,EACA,MAAOiB,EACP,SAAUC,EACV,QAAAR,EACA,SAAAZ,EACA,SAAAM,EACA,QAASW,EACT,gBAAiB,CACf,kBAAmB,GACnB,GAAGV,EAAM,eAAA,EAEX,qBAAoBI,GAAA,YAAAA,EAAO,OAAA,CAAA,EAE7Ba,EAACE,EAAA,CACC,KAAMf,EAAQA,EAAM,QAAUR,EAC9B,UAAWe,EACX,OAAQP,EAAQ,QAAU,SAC1B,SAAAX,CAAA,CAAA,CACF,EACF,CAEJ"}
@@ -1,2 +1,2 @@
1
- import{jsxs as _,jsx as c}from"react/jsx-runtime";import{useRef as G,useState as E,useEffect as P}from"react";import{createPortal as j}from"react-dom";import{useFloating as K}from"../../../../../../node_modules/@floating-ui/react/dist/floating-ui.react.js";import{SINGLE_MASK as q,SINGLE_VALIDATION_REGEX as B}from"./model/constants.js";import{getCurrentDate as H,getInitialValue as I}from"./model/utils.js";import{useClickOutside as U}from"../../../../hooks/useClickOutside.js";import"react-hook-form";import{cn as b}from"../../../../utils/cn.js";import{mergeRefs as X}from"../../../../utils/mergeRefs.js";import{TypeGuards as D}from"../../../../utils/typeGuards.js";import"../../../button/Button.js";import"../../../buttonIcon/ButtonIcon.js";import{Calendar as v}from"../../../calendar/Calendar.js";import{DATE_VISIBLE_PATTERN as O}from"../../../calendar/model/utils.js";import"../../../accordion/Accordion.js";import"../../../modal/ui/IframeModalContent.js";import"../../../../../../node_modules/react-hot-toast/dist/index.js";import{Icon as z}from"../../../icon/Icon.js";import"../../../table/ui/primitives/Primitives.js";import"../../../carousel/ui/CarouselContent.js";import"../../../slot/Slot.js";import"../../uncontrolled/autocomplete/Autocomplete.js";import"../../uncontrolled/checkbox/Checkbox.js";import"../../uncontrolled/combobox/combobox.js";import"../../uncontrolled/dayPicker/DayPicker.js";import"../../uncontrolled/input/Input.js";import"../../uncontrolled/inputOtp/InputOtpBase.js";import{MaskInput as J}from"../../uncontrolled/maskInput/MaskInput.js";import"../../uncontrolled/radio/RadioGroup.js";import"../../uncontrolled/radio/ui/RadioItem.js";import"../../uncontrolled/slider/SliderBase.js";import"../../uncontrolled/switch/Switch.js";import"../../uncontrolled/textarea/Textarea.js";import"../../uncontrolled/uploader/UploaderBase.js";import"../../uncontrolled/inputCurrency/InputCurrency.js";import"../../../../../../src/configs/api.js";import"../editor/ui/Editor.js";import"../input/MaskInputControl.js";import"../../../dropdownList/ui/dropdownItem/DropdownItem.js";import{autoUpdate as Q}from"../../../../../../node_modules/@floating-ui/dom/dist/floating-ui.dom.js";import{flip as W,offset as Y}from"../../../../../../node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.js";import{parse as Z}from"../../../../../../node_modules/date-fns/parse.js";import{isValid as $}from"../../../../../../node_modules/date-fns/isValid.js";import{formatDate as h}from"../../../../../../node_modules/date-fns/format.js";const vt=({inputProps:s,classes:i,value:e,onChange:l,externalHandlers:V,month:x,onMonthChange:r,...m})=>{const{onChange:a,onFocus:d,...A}=V||{},u=G(null),{refs:g,floatingStyles:N}=K({placement:"bottom-end",middleware:[W({boundary:"clippingAncestors",crossAxis:!1}),Y(0)],whileElementsMounted:Q}),{calendar:k,...C}=i||{},[L,n]=E(!1),S=()=>{n(t=>!t)},R=H("single",e),[w,f]=E(I("single",e));P(()=>{e&&!D.isStringEmpty(e)&&(f(I("single",e)),r&&r(new Date(e)))},[e]),U(u,()=>n(!1));const F=t=>{const{value:o}=t.target;if(f(o),D.isStringEmpty(o))return l("");if(!B.test(o))return;const p=Z(o,O,new Date);if($(p)){const y=p.toISOString();l(y),r&&r(p),a&&a(y)}},T=t=>{r&&r(t);const o=t.toISOString();l(o),f(h(t,O)),n(!1),a&&a(o)};return _("div",{ref:g.setReference,className:b("relative w-full",i==null?void 0:i.container),children:[c(J,{mask:q,...s,...A,classes:C,value:w,onChange:F,autoComplete:"off",onFocus:t=>{n(!0),d&&d(t)},onKeyDown:t=>{t.key==="Enter"&&S()},attachmentProps:{disabled:s.disabled,icon:c(z,{name:"general/calendar",className:"text-icon-blue-grey-600"}),onClickIcon:S,...s.attachmentProps},dataLayers:m==null?void 0:m.dataLayers}),L&&j(c(v,{ref:X(u,g.setFloating),...m,required:!0,mode:"single",style:{...N,width:"max-content"},month:x,onMonthChange:r,selected:R,onSelect:T,className:b(k),"data-test-id":"calendar"}),document.body)]})};export{vt as SingleDayPicker};
1
+ import{jsxs as _,jsx as c}from"react/jsx-runtime";import{useRef as G,useState as E,useEffect as P}from"react";import{createPortal as j}from"react-dom";import{useFloating as K}from"../../../../../../node_modules/@floating-ui/react/dist/floating-ui.react.js";import{SINGLE_MASK as q,SINGLE_VALIDATION_REGEX as B}from"./model/constants.js";import{getCurrentDate as H,getInitialValue as I}from"./model/utils.js";import{useClickOutside as U}from"../../../../hooks/useClickOutside.js";import"react-hook-form";import{cn as b}from"../../../../utils/cn.js";import{mergeRefs as X}from"../../../../utils/mergeRefs.js";import{TypeGuards as D}from"../../../../utils/typeGuards.js";import"../../../button/Button.js";import"../../../buttonIcon/ButtonIcon.js";import{Calendar as v}from"../../../calendar/Calendar.js";import{DATE_VISIBLE_PATTERN as O}from"../../../calendar/model/utils.js";import"../../../accordion/Accordion.js";import"../../../modal/ui/IframeModalContent.js";import"../../../../../../node_modules/react-hot-toast/dist/index.js";import{Icon as z}from"../../../icon/Icon.js";import"../../../table/ui/primitives/Primitives.js";import"../../../carousel/ui/CarouselContent.js";import"../../../slot/Slot.js";import"../../uncontrolled/autocomplete/Autocomplete.js";import"../../uncontrolled/checkbox/Checkbox.js";import"../../uncontrolled/combobox/combobox.js";import"../../uncontrolled/dayPicker/DayPicker.js";import"../../uncontrolled/input/Input.js";import"../../uncontrolled/inputOtp/InputOtpBase.js";import{MaskInput as J}from"../../uncontrolled/maskInput/MaskInput.js";import"../../uncontrolled/radio/RadioGroup.js";import"../../uncontrolled/radio/ui/RadioItem.js";import"../../uncontrolled/slider/SliderBase.js";import"../../uncontrolled/switch/Switch.js";import"../../uncontrolled/textarea/Textarea.js";import"../../uncontrolled/uploader/UploaderBase.js";import"../../uncontrolled/inputCurrency/InputCurrency.js";import"../../../../../../src/configs/api.js";import"../editor/ui/Editor.js";import"../input/MaskInputControl.js";import"../../../dropdownList/ui/dropdownItem/DropdownItem.js";import{autoUpdate as Q}from"../../../../../../node_modules/@floating-ui/dom/dist/floating-ui.dom.js";import{flip as W,offset as Y}from"../../../../../../node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.js";import{parse as Z}from"../../../../../../node_modules/date-fns/parse.js";import{isValid as $}from"../../../../../../node_modules/date-fns/isValid.js";import{formatDate as h}from"../../../../../../node_modules/date-fns/format.js";const vt=({inputProps:s,classes:i,value:e,onChange:l,externalHandlers:V,month:x,onMonthChange:r,...m})=>{const{onChange:a,onFocus:d,...A}=V||{},u=G(null),{refs:g,floatingStyles:N}=K({placement:"bottom-end",middleware:[W({boundary:"clippingAncestors",crossAxis:!1}),Y(0)],whileElementsMounted:Q}),{calendar:k,...C}=i||{},[L,n]=E(!1),S=()=>{n(t=>!t)},R=H("single",e),[w,f]=E(I("single",e));P(()=>{e&&!D.isStringEmpty(e)&&(f(I("single",e)),r&&r(new Date(e)))},[e]),U(u,()=>n(!1));const F=t=>{const{value:o}=t.target;if(f(o),D.isStringEmpty(o))return l("");if(!B.test(o))return;const p=Z(o,O,new Date);if($(p)){const y=p.toISOString();l(y),r&&r(p),a&&a(y)}},T=t=>{r&&r(t);const o=t.toISOString();l(o),f(h(t,O)),n(!1),a&&a(o)};return _("div",{ref:g.setReference,className:b("relative w-full",i==null?void 0:i.container),children:[c(J,{mask:q,...s,...A,classes:C,value:w,onChange:F,autoComplete:"off",onFocus:t=>{n(!0),d&&d(t)},onKeyDown:t=>{t.key==="Enter"&&S()},attachmentProps:{disabled:s.disabled,icon:c(z,{name:"general/calendar",className:"text-icon-blue-grey-600"}),onClickIcon:S,...s.attachmentProps},dataLayers:m==null?void 0:m.dataLayers}),L&&j(c(v,{ref:X(u,g.setFloating),...m,required:!0,mode:"single",style:{...N,width:"max-content"},month:x,onMonthChange:r,selected:R,onSelect:T,className:b(k),"data-id":"calendar"}),document.body)]})};export{vt as SingleDayPicker};
2
2
  //# sourceMappingURL=single.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"single.js","sources":["../../../../../../../lib/shared/ui/formElements/controlled/dayPickerControl/single.tsx"],"sourcesContent":["'use client'\n\nimport { useEffect, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport { autoUpdate, flip, offset, useFloating } from '@floating-ui/react'\nimport { format, isValid, parse } from 'date-fns'\nimport { type DataLayers } from '../../../../types'\nimport { type ExternalHandlers } from './dayPickerControl'\nimport { getCurrentDate, getInitialValue, SINGLE_MASK, SINGLE_VALIDATION_REGEX } from './model'\nimport { useClickOutside } from '$/shared/hooks'\nimport { Calendar, DATE_VISIBLE_PATTERN, Icon, MaskInput, type MaskInputProps } from '$/shared/ui'\nimport { cn, mergeRefs, TypeGuards } from '$/shared/utils'\n\ntype CalendarProps = React.ComponentPropsWithoutRef<typeof Calendar>\n\ntype SingleDayPickerClasses = MaskInputProps['classes'] & {\n calendar?: string\n}\n\ntype SingleDayPickerProps = Omit<CalendarProps, 'mode'> & {\n /**\n * Свойства Input компонента\n */\n inputProps: Omit<MaskInputProps, 'mask'>\n /**\n * Стили внутренних компонентов\n */\n classes?: SingleDayPickerClasses\n /**\n * Управляемое значение\n */\n value: string\n /**\n * Функция для управления значением\n */\n onChange: (value: string) => void\n /**\n * Дополнительные хендлеры\n */\n externalHandlers?: ExternalHandlers\n /**\n * Даталееры\n */\n dataLayers?: DataLayers\n}\n\nexport const SingleDayPicker = ({\n inputProps,\n classes,\n value,\n onChange,\n externalHandlers,\n month,\n onMonthChange,\n ...props\n}: SingleDayPickerProps) => {\n const { onChange: externalOnChange, onFocus: externalOnFocus, ...restHandlers } = externalHandlers || {}\n\n const calendarRef = useRef<HTMLDivElement>(null)\n\n const { refs, floatingStyles } = useFloating({\n placement: 'bottom-end',\n middleware: [\n flip({\n boundary: 'clippingAncestors',\n crossAxis: false\n }),\n offset(0)\n ],\n whileElementsMounted: autoUpdate\n })\n\n const { calendar, ...restClasses } = classes || {}\n\n const [calendarOpen, setCalendarOpen] = useState<boolean>(false)\n\n const onCalendarOpenChange = () => {\n setCalendarOpen((prev) => !prev)\n }\n\n const date = getCurrentDate('single', value)\n\n const [visibleValue, setVisibleValue] = useState<string>(getInitialValue('single', value))\n\n useEffect(() => {\n if (value && !TypeGuards.isStringEmpty(value)) {\n setVisibleValue(getInitialValue('single', value))\n if (onMonthChange) onMonthChange(new Date(value))\n }\n }, [value])\n\n useClickOutside(calendarRef, () => setCalendarOpen(false))\n\n const onVisibleValueChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const { value } = event.target\n\n setVisibleValue(value)\n\n if (TypeGuards.isStringEmpty(value)) {\n return onChange('')\n }\n\n if (!SINGLE_VALIDATION_REGEX.test(value)) {\n return\n }\n\n const date = parse(value, DATE_VISIBLE_PATTERN, new Date())\n\n if (isValid(date)) {\n const isoDate = date.toISOString()\n\n onChange(isoDate)\n if (onMonthChange) onMonthChange(date)\n\n if (externalOnChange) externalOnChange(isoDate)\n }\n }\n\n const onDateChange = (newDate: Date) => {\n if (onMonthChange) onMonthChange(newDate)\n\n const isoDate = newDate.toISOString()\n\n onChange(isoDate)\n setVisibleValue(format(newDate, DATE_VISIBLE_PATTERN))\n setCalendarOpen(false)\n\n if (externalOnChange) externalOnChange(isoDate)\n }\n\n return (\n <div ref={refs.setReference} className={cn('relative w-full', classes?.container)}>\n <MaskInput\n mask={SINGLE_MASK}\n {...inputProps}\n {...restHandlers}\n classes={restClasses}\n value={visibleValue}\n onChange={onVisibleValueChange}\n autoComplete='off'\n onFocus={(event) => {\n setCalendarOpen(true)\n if (externalOnFocus) externalOnFocus(event)\n }}\n onKeyDown={(event) => {\n if (event.key === 'Enter') {\n onCalendarOpenChange()\n }\n }}\n attachmentProps={{\n disabled: inputProps.disabled,\n icon: <Icon name='general/calendar' className='text-icon-blue-grey-600' />,\n onClickIcon: onCalendarOpenChange,\n ...inputProps.attachmentProps\n }}\n dataLayers={props?.dataLayers}\n />\n {calendarOpen &&\n createPortal(\n <Calendar\n // @ts-expect-error asdf\n ref={mergeRefs(calendarRef, refs.setFloating)}\n {...props}\n required\n mode='single'\n style={{\n ...floatingStyles,\n width: 'max-content'\n }}\n month={month}\n onMonthChange={onMonthChange}\n selected={date}\n onSelect={onDateChange}\n className={cn(calendar)}\n data-test-id='calendar'\n />,\n document.body\n )}\n </div>\n )\n}\n"],"names":["SingleDayPicker","inputProps","classes","value","onChange","externalHandlers","month","onMonthChange","props","externalOnChange","externalOnFocus","restHandlers","calendarRef","useRef","refs","floatingStyles","useFloating","flip","offset","autoUpdate","calendar","restClasses","calendarOpen","setCalendarOpen","useState","onCalendarOpenChange","prev","date","getCurrentDate","visibleValue","setVisibleValue","getInitialValue","useEffect","TypeGuards","useClickOutside","onVisibleValueChange","event","SINGLE_VALIDATION_REGEX","parse","DATE_VISIBLE_PATTERN","isValid","isoDate","onDateChange","newDate","format","jsxs","cn","jsx","MaskInput","SINGLE_MASK","Icon","createPortal","Calendar","mergeRefs"],"mappings":"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"}
1
+ {"version":3,"file":"single.js","sources":["../../../../../../../lib/shared/ui/formElements/controlled/dayPickerControl/single.tsx"],"sourcesContent":["'use client'\n\nimport { useEffect, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport { autoUpdate, flip, offset, useFloating } from '@floating-ui/react'\nimport { format, isValid, parse } from 'date-fns'\nimport { type DataLayers } from '../../../../types'\nimport { type ExternalHandlers } from './dayPickerControl'\nimport { getCurrentDate, getInitialValue, SINGLE_MASK, SINGLE_VALIDATION_REGEX } from './model'\nimport { useClickOutside } from '$/shared/hooks'\nimport { Calendar, DATE_VISIBLE_PATTERN, Icon, MaskInput, type MaskInputProps } from '$/shared/ui'\nimport { cn, mergeRefs, TypeGuards } from '$/shared/utils'\n\ntype CalendarProps = React.ComponentPropsWithoutRef<typeof Calendar>\n\ntype SingleDayPickerClasses = MaskInputProps['classes'] & {\n calendar?: string\n}\n\ntype SingleDayPickerProps = Omit<CalendarProps, 'mode'> & {\n /**\n * Свойства Input компонента\n */\n inputProps: Omit<MaskInputProps, 'mask'>\n /**\n * Стили внутренних компонентов\n */\n classes?: SingleDayPickerClasses\n /**\n * Управляемое значение\n */\n value: string\n /**\n * Функция для управления значением\n */\n onChange: (value: string) => void\n /**\n * Дополнительные хендлеры\n */\n externalHandlers?: ExternalHandlers\n /**\n * Даталееры\n */\n dataLayers?: DataLayers\n}\n\nexport const SingleDayPicker = ({\n inputProps,\n classes,\n value,\n onChange,\n externalHandlers,\n month,\n onMonthChange,\n ...props\n}: SingleDayPickerProps) => {\n const { onChange: externalOnChange, onFocus: externalOnFocus, ...restHandlers } = externalHandlers || {}\n\n const calendarRef = useRef<HTMLDivElement>(null)\n\n const { refs, floatingStyles } = useFloating({\n placement: 'bottom-end',\n middleware: [\n flip({\n boundary: 'clippingAncestors',\n crossAxis: false\n }),\n offset(0)\n ],\n whileElementsMounted: autoUpdate\n })\n\n const { calendar, ...restClasses } = classes || {}\n\n const [calendarOpen, setCalendarOpen] = useState<boolean>(false)\n\n const onCalendarOpenChange = () => {\n setCalendarOpen((prev) => !prev)\n }\n\n const date = getCurrentDate('single', value)\n\n const [visibleValue, setVisibleValue] = useState<string>(getInitialValue('single', value))\n\n useEffect(() => {\n if (value && !TypeGuards.isStringEmpty(value)) {\n setVisibleValue(getInitialValue('single', value))\n if (onMonthChange) onMonthChange(new Date(value))\n }\n }, [value])\n\n useClickOutside(calendarRef, () => setCalendarOpen(false))\n\n const onVisibleValueChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const { value } = event.target\n\n setVisibleValue(value)\n\n if (TypeGuards.isStringEmpty(value)) {\n return onChange('')\n }\n\n if (!SINGLE_VALIDATION_REGEX.test(value)) {\n return\n }\n\n const date = parse(value, DATE_VISIBLE_PATTERN, new Date())\n\n if (isValid(date)) {\n const isoDate = date.toISOString()\n\n onChange(isoDate)\n if (onMonthChange) onMonthChange(date)\n\n if (externalOnChange) externalOnChange(isoDate)\n }\n }\n\n const onDateChange = (newDate: Date) => {\n if (onMonthChange) onMonthChange(newDate)\n\n const isoDate = newDate.toISOString()\n\n onChange(isoDate)\n setVisibleValue(format(newDate, DATE_VISIBLE_PATTERN))\n setCalendarOpen(false)\n\n if (externalOnChange) externalOnChange(isoDate)\n }\n\n return (\n <div ref={refs.setReference} className={cn('relative w-full', classes?.container)}>\n <MaskInput\n mask={SINGLE_MASK}\n {...inputProps}\n {...restHandlers}\n classes={restClasses}\n value={visibleValue}\n onChange={onVisibleValueChange}\n autoComplete='off'\n onFocus={(event) => {\n setCalendarOpen(true)\n if (externalOnFocus) externalOnFocus(event)\n }}\n onKeyDown={(event) => {\n if (event.key === 'Enter') {\n onCalendarOpenChange()\n }\n }}\n attachmentProps={{\n disabled: inputProps.disabled,\n icon: <Icon name='general/calendar' className='text-icon-blue-grey-600' />,\n onClickIcon: onCalendarOpenChange,\n ...inputProps.attachmentProps\n }}\n dataLayers={props?.dataLayers}\n />\n {calendarOpen &&\n createPortal(\n <Calendar\n // @ts-expect-error asdf\n ref={mergeRefs(calendarRef, refs.setFloating)}\n {...props}\n required\n mode='single'\n style={{\n ...floatingStyles,\n width: 'max-content'\n }}\n month={month}\n onMonthChange={onMonthChange}\n selected={date}\n onSelect={onDateChange}\n className={cn(calendar)}\n data-id='calendar'\n />,\n document.body\n )}\n </div>\n )\n}\n"],"names":["SingleDayPicker","inputProps","classes","value","onChange","externalHandlers","month","onMonthChange","props","externalOnChange","externalOnFocus","restHandlers","calendarRef","useRef","refs","floatingStyles","useFloating","flip","offset","autoUpdate","calendar","restClasses","calendarOpen","setCalendarOpen","useState","onCalendarOpenChange","prev","date","getCurrentDate","visibleValue","setVisibleValue","getInitialValue","useEffect","TypeGuards","useClickOutside","onVisibleValueChange","event","SINGLE_VALIDATION_REGEX","parse","DATE_VISIBLE_PATTERN","isValid","isoDate","onDateChange","newDate","format","jsxs","cn","jsx","MaskInput","SINGLE_MASK","Icon","createPortal","Calendar","mergeRefs"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{jsx as i}from"react/jsx-runtime";import"../../../../../../../node_modules/classnames/index.js";import"react";import"../../../../button/Button.js";import"../../../../buttonIcon/ButtonIcon.js";import"../../../../calendar/Calendar.js";import"../../../../calendar/model/utils.js";import"../../../../accordion/Accordion.js";import"react-hook-form";import"react-dom";import"../../../../modal/ui/IframeModalContent.js";import"../../../../../../../node_modules/react-hot-toast/dist/index.js";import{Icon as o}from"../../../../icon/Icon.js";import"../../../../table/ui/primitives/Primitives.js";import"../../../../carousel/ui/CarouselContent.js";import"../../../../slot/Slot.js";import"../../../uncontrolled/autocomplete/Autocomplete.js";import"../../../uncontrolled/checkbox/Checkbox.js";import"../../../uncontrolled/combobox/combobox.js";import"../../../uncontrolled/dayPicker/DayPicker.js";import"../../../uncontrolled/input/Input.js";import"../../../uncontrolled/inputOtp/InputOtpBase.js";import"../../../uncontrolled/maskInput/MaskInput.js";import"../../../uncontrolled/radio/RadioGroup.js";import"../../../uncontrolled/radio/ui/RadioItem.js";import"../../../uncontrolled/slider/SliderBase.js";import"../../../uncontrolled/switch/Switch.js";import"../../../uncontrolled/textarea/Textarea.js";import"../../../uncontrolled/uploader/UploaderBase.js";import"../../../uncontrolled/inputCurrency/InputCurrency.js";import"../../../../../../../src/configs/api.js";import"../ui/Editor.js";import"../../input/MaskInputControl.js";import"../../../../dropdownList/ui/dropdownItem/DropdownItem.js";const M=[1,2,3,4],U={1:"mob-headline-bold-m desktop:desk-headline-bold-l",2:"mob-headline-bold-s desktop:desk-headline-bold-m",3:"mob-title-bold-l desktop:desk-title-bold-l",4:"mob-title-bold-m desktop:desk-title-bold-s"},q=[{label:"12px",value:"12px"},{label:"14px",value:"14px"},{label:"16px",value:"16px"},{label:"18px",value:"18px"},{label:"20px",value:"20px"},{label:"24px",value:"24px"}],D=["#292929","#FFFFFF","#40465A","#5A6E85","#A9B6C5","#94A4B7","#003790","#042E73","#809BC7","#76BC21","#F49F00","#F42500"],G=e=>[{label:"Жирный текст",icon:i(o,{name:"editor/bold",className:"size-4"}),onClick:()=>e.chain().focus().toggleBold().run(),isActive:e.isActive("bold")},{label:"Курсивный текст",icon:i(o,{name:"editor/italic",className:"size-4"}),onClick:()=>e.chain().focus().toggleItalic().run(),isActive:e.isActive("italic")},{label:"Подчеркнутый текст",icon:i(o,{name:"editor/underline",className:"size-4"}),onClick:()=>e.chain().focus().toggleUnderline().run(),isActive:e.isActive("underline")},{label:"Зачеркнутый текст",icon:i(o,{name:"editor/strikethrough",className:"size-4"}),onClick:()=>e.chain().focus().toggleStrike().run(),isActive:e.isActive("strike")},{label:"Обычный текст",icon:i(o,{name:"editor/typography",className:"size-4"}),onClick:()=>e.chain().focus().setParagraph().run()},{label:"Маркированный список",icon:i(o,{name:"editor/list",className:"size-4"}),onClick:()=>e.chain().focus().toggleBulletList().run(),isActive:e.isActive("bulletList")},{label:"Перенос строки",icon:i(o,{name:"editor/space",className:"size-4"}),onClick:()=>e.chain().focus().setHardBreak().run()},{label:"Отменить",icon:i(o,{name:"editor/undo",className:"size-4"}),onClick:()=>e.chain().focus().undo().run()},{label:"Вернуть",icon:i(o,{name:"editor/redo",className:"size-4"}),onClick:()=>e.chain().focus().redo().run()},{label:"Очистить стили и теги",icon:i(o,{name:"editor/removeFormatting",className:"size-4"}),onClick:()=>e.chain().focus().clearNodes().unsetAllMarks().run()},{label:"Удалить все",icon:i(o,{name:"general/close",className:"size-4"}),onClick:()=>e.commands.clearContent()}];export{D as editorAllowedColors,U as editorHeadingClasses,q as fontSizesOptions,M as headingsOptions,G as renderEditorPanel};
1
+ import{jsx as i}from"react/jsx-runtime";import"../../../../../../../node_modules/classnames/index.js";import"react";import"../../../../button/Button.js";import"../../../../buttonIcon/ButtonIcon.js";import"../../../../calendar/Calendar.js";import"../../../../calendar/model/utils.js";import"../../../../accordion/Accordion.js";import"react-hook-form";import"react-dom";import"../../../../modal/ui/IframeModalContent.js";import"../../../../../../../node_modules/react-hot-toast/dist/index.js";import{Icon as o}from"../../../../icon/Icon.js";import"../../../../table/ui/primitives/Primitives.js";import"../../../../carousel/ui/CarouselContent.js";import"../../../../slot/Slot.js";import"../../../uncontrolled/autocomplete/Autocomplete.js";import"../../../uncontrolled/checkbox/Checkbox.js";import"../../../uncontrolled/combobox/combobox.js";import"../../../uncontrolled/dayPicker/DayPicker.js";import"../../../uncontrolled/input/Input.js";import"../../../uncontrolled/inputOtp/InputOtpBase.js";import"../../../uncontrolled/maskInput/MaskInput.js";import"../../../uncontrolled/radio/RadioGroup.js";import"../../../uncontrolled/radio/ui/RadioItem.js";import"../../../uncontrolled/slider/SliderBase.js";import"../../../uncontrolled/switch/Switch.js";import"../../../uncontrolled/textarea/Textarea.js";import"../../../uncontrolled/uploader/UploaderBase.js";import"../../../uncontrolled/inputCurrency/InputCurrency.js";import"../../../../../../../src/configs/api.js";import"../ui/Editor.js";import"../../input/MaskInputControl.js";import"../../../../dropdownList/ui/dropdownItem/DropdownItem.js";const M=[1,2,3,4],U={1:"mob-headline-bold-m desktop:desk-headline-bold-l",2:"mob-headline-bold-s desktop:desk-headline-bold-m",3:"mob-title-bold-l desktop:desk-title-bold-l",4:"mob-title-bold-m desktop:desk-title-bold-s"},q=[{label:"12px",value:"12px"},{label:"14px",value:"14px"},{label:"16px",value:"16px"},{label:"18px",value:"18px"},{label:"20px",value:"20px"},{label:"24px",value:"24px"}],D=["#292929","#FFFFFF","#40465A","#5A6E85","#A9B6C5","#94A4B7","#003790","#042E73","#809BC7","#76BC21","#F49F00","#F42500"],G=e=>[{label:"Жирный текст",icon:i(o,{name:"editor/bold",className:"size-4"}),onClick:()=>e.chain().focus().toggleBold().run(),isActive:e.isActive("bold")},{label:"Курсивный текст",icon:i(o,{name:"editor/italic",className:"size-4"}),onClick:()=>e.chain().focus().toggleItalic().run(),isActive:e.isActive("italic")},{label:"Подчеркнутый текст",icon:i(o,{name:"editor/underline",className:"size-4"}),onClick:()=>e.chain().focus().toggleUnderline().run(),isActive:e.isActive("underline")},{label:"Зачеркнутый текст",icon:i(o,{name:"editor/strikethrough",className:"size-4"}),onClick:()=>e.chain().focus().toggleStrike().run(),isActive:e.isActive("strike")},{label:"Обычный текст",icon:i(o,{name:"editor/typography",className:"size-4"}),onClick:()=>e.chain().focus().setParagraph().run()},{label:"Маркированный список",icon:i(o,{name:"editor/list",className:"size-4"}),onClick:()=>e.chain().focus().toggleBulletList().run(),isActive:e.isActive("bulletList")},{label:"Перенос строки <br />",icon:i(o,{name:"editor/space",className:"size-4"}),onClick:()=>e.chain().focus().setHardBreak().run()},{label:"Добавить неразрывной пробел &nbsp;",icon:i(o,{name:"editor/nbsp",className:"size-4"}),onClick:()=>e.chain().focus().insertContent(" ").run()},{label:"Отменить",icon:i(o,{name:"editor/undo",className:"size-4"}),onClick:()=>e.chain().focus().undo().run()},{label:"Вернуть",icon:i(o,{name:"editor/redo",className:"size-4"}),onClick:()=>e.chain().focus().redo().run()},{label:"Очистить стили и теги",icon:i(o,{name:"editor/removeFormatting",className:"size-4"}),onClick:()=>e.chain().focus().clearNodes().unsetAllMarks().run()},{label:"Удалить все",icon:i(o,{name:"general/close",className:"size-4"}),onClick:()=>e.commands.clearContent()}];export{D as editorAllowedColors,U as editorHeadingClasses,q as fontSizesOptions,M as headingsOptions,G as renderEditorPanel};
2
2
  //# sourceMappingURL=helper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helper.js","sources":["../../../../../../../../lib/shared/ui/formElements/controlled/editor/model/helper.tsx"],"sourcesContent":["import type { Editor } from '@tiptap/react'\nimport { type ColorOption, type HeadingLevel } from './types'\nimport { Icon } from '$/shared/ui'\n\nexport const headingsOptions: HeadingLevel[] = [1, 2, 3, 4]\n\nexport const editorHeadingClasses: Record<number, string> = {\n 1: 'mob-headline-bold-m desktop:desk-headline-bold-l',\n 2: 'mob-headline-bold-s desktop:desk-headline-bold-m',\n 3: 'mob-title-bold-l desktop:desk-title-bold-l',\n 4: 'mob-title-bold-m desktop:desk-title-bold-s'\n}\n\nexport const fontSizesOptions = [\n { label: '12px', value: '12px' },\n { label: '14px', value: '14px' },\n { label: '16px', value: '16px' },\n { label: '18px', value: '18px' },\n { label: '20px', value: '20px' },\n { label: '24px', value: '24px' }\n]\n\nexport const editorAllowedColors: ColorOption[] = [\n '#292929',\n '#FFFFFF',\n '#40465A',\n '#5A6E85',\n '#A9B6C5',\n '#94A4B7',\n '#003790',\n '#042E73',\n '#809BC7',\n '#76BC21',\n '#F49F00',\n '#F42500'\n]\n\nexport const renderEditorPanel = (editor: Editor) => [\n {\n label: 'Жирный текст',\n icon: <Icon name='editor/bold' className='size-4' />,\n onClick: () => editor.chain().focus().toggleBold().run(),\n isActive: editor.isActive('bold')\n },\n {\n label: 'Курсивный текст',\n icon: <Icon name='editor/italic' className='size-4' />,\n onClick: () => editor.chain().focus().toggleItalic().run(),\n isActive: editor.isActive('italic')\n },\n {\n label: 'Подчеркнутый текст',\n icon: <Icon name='editor/underline' className='size-4' />,\n onClick: () => editor.chain().focus().toggleUnderline().run(),\n isActive: editor.isActive('underline')\n },\n {\n label: 'Зачеркнутый текст',\n icon: <Icon name='editor/strikethrough' className='size-4' />,\n onClick: () => editor.chain().focus().toggleStrike().run(),\n isActive: editor.isActive('strike')\n },\n {\n label: 'Обычный текст',\n icon: <Icon name='editor/typography' className='size-4' />,\n onClick: () => editor.chain().focus().setParagraph().run()\n },\n {\n label: 'Маркированный список',\n icon: <Icon name='editor/list' className='size-4' />,\n onClick: () => editor.chain().focus().toggleBulletList().run(),\n isActive: editor.isActive('bulletList')\n },\n {\n label: 'Перенос строки',\n icon: <Icon name='editor/space' className='size-4' />,\n onClick: () => editor.chain().focus().setHardBreak().run()\n },\n {\n label: 'Отменить',\n icon: <Icon name='editor/undo' className='size-4' />,\n onClick: () => editor.chain().focus().undo().run()\n },\n {\n label: 'Вернуть',\n icon: <Icon name='editor/redo' className='size-4' />,\n onClick: () => editor.chain().focus().redo().run()\n },\n {\n label: 'Очистить стили и теги',\n icon: <Icon name='editor/removeFormatting' className='size-4' />,\n onClick: () => editor.chain().focus().clearNodes().unsetAllMarks().run()\n },\n {\n label: 'Удалить все',\n icon: <Icon name='general/close' className='size-4' />,\n onClick: () => editor.commands.clearContent()\n }\n]\n"],"names":["headingsOptions","editorHeadingClasses","fontSizesOptions","editorAllowedColors","renderEditorPanel","editor","jsx","Icon"],"mappings":"ojDAIO,MAAMA,EAAkC,CAAC,EAAG,EAAG,EAAG,CAAC,EAE7CC,EAA+C,CAC1D,EAAG,mDACH,EAAG,mDACH,EAAG,6CACH,EAAG,4CACL,EAEaC,EAAmB,CAC9B,CAAE,MAAO,OAAQ,MAAO,MAAA,EACxB,CAAE,MAAO,OAAQ,MAAO,MAAA,EACxB,CAAE,MAAO,OAAQ,MAAO,MAAA,EACxB,CAAE,MAAO,OAAQ,MAAO,MAAA,EACxB,CAAE,MAAO,OAAQ,MAAO,MAAA,EACxB,CAAE,MAAO,OAAQ,MAAO,MAAA,CAC1B,EAEaC,EAAqC,CAChD,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EAEaC,EAAqBC,GAAmB,CACnD,CACE,MAAO,eACP,KAAMC,EAACC,EAAA,CAAK,KAAK,cAAc,UAAU,SAAS,EAClD,QAAS,IAAMF,EAAO,MAAA,EAAQ,QAAQ,WAAA,EAAa,IAAA,EACnD,SAAUA,EAAO,SAAS,MAAM,CAAA,EAElC,CACE,MAAO,kBACP,KAAMC,EAACC,EAAA,CAAK,KAAK,gBAAgB,UAAU,SAAS,EACpD,QAAS,IAAMF,EAAO,MAAA,EAAQ,QAAQ,aAAA,EAAe,IAAA,EACrD,SAAUA,EAAO,SAAS,QAAQ,CAAA,EAEpC,CACE,MAAO,qBACP,KAAMC,EAACC,EAAA,CAAK,KAAK,mBAAmB,UAAU,SAAS,EACvD,QAAS,IAAMF,EAAO,MAAA,EAAQ,QAAQ,gBAAA,EAAkB,IAAA,EACxD,SAAUA,EAAO,SAAS,WAAW,CAAA,EAEvC,CACE,MAAO,oBACP,KAAMC,EAACC,EAAA,CAAK,KAAK,uBAAuB,UAAU,SAAS,EAC3D,QAAS,IAAMF,EAAO,MAAA,EAAQ,QAAQ,aAAA,EAAe,IAAA,EACrD,SAAUA,EAAO,SAAS,QAAQ,CAAA,EAEpC,CACE,MAAO,gBACP,KAAMC,EAACC,EAAA,CAAK,KAAK,oBAAoB,UAAU,SAAS,EACxD,QAAS,IAAMF,EAAO,MAAA,EAAQ,MAAA,EAAQ,aAAA,EAAe,IAAA,CAAI,EAE3D,CACE,MAAO,uBACP,KAAMC,EAACC,EAAA,CAAK,KAAK,cAAc,UAAU,SAAS,EAClD,QAAS,IAAMF,EAAO,MAAA,EAAQ,QAAQ,iBAAA,EAAmB,IAAA,EACzD,SAAUA,EAAO,SAAS,YAAY,CAAA,EAExC,CACE,MAAO,iBACP,KAAMC,EAACC,EAAA,CAAK,KAAK,eAAe,UAAU,SAAS,EACnD,QAAS,IAAMF,EAAO,MAAA,EAAQ,MAAA,EAAQ,aAAA,EAAe,IAAA,CAAI,EAE3D,CACE,MAAO,WACP,KAAMC,EAACC,EAAA,CAAK,KAAK,cAAc,UAAU,SAAS,EAClD,QAAS,IAAMF,EAAO,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,IAAA,CAAI,EAEnD,CACE,MAAO,UACP,KAAMC,EAACC,EAAA,CAAK,KAAK,cAAc,UAAU,SAAS,EAClD,QAAS,IAAMF,EAAO,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,IAAA,CAAI,EAEnD,CACE,MAAO,wBACP,KAAMC,EAACC,EAAA,CAAK,KAAK,0BAA0B,UAAU,SAAS,EAC9D,QAAS,IAAMF,EAAO,MAAA,EAAQ,MAAA,EAAQ,WAAA,EAAa,cAAA,EAAgB,IAAA,CAAI,EAEzE,CACE,MAAO,cACP,KAAMC,EAACC,EAAA,CAAK,KAAK,gBAAgB,UAAU,SAAS,EACpD,QAAS,IAAMF,EAAO,SAAS,aAAA,CAAa,CAEhD"}
1
+ {"version":3,"file":"helper.js","sources":["../../../../../../../../lib/shared/ui/formElements/controlled/editor/model/helper.tsx"],"sourcesContent":["import type { Editor } from '@tiptap/react'\nimport { type ColorOption, type HeadingLevel } from './types'\nimport { Icon } from '$/shared/ui'\n\nexport const headingsOptions: HeadingLevel[] = [1, 2, 3, 4]\n\nexport const editorHeadingClasses: Record<number, string> = {\n 1: 'mob-headline-bold-m desktop:desk-headline-bold-l',\n 2: 'mob-headline-bold-s desktop:desk-headline-bold-m',\n 3: 'mob-title-bold-l desktop:desk-title-bold-l',\n 4: 'mob-title-bold-m desktop:desk-title-bold-s'\n}\n\nexport const fontSizesOptions = [\n { label: '12px', value: '12px' },\n { label: '14px', value: '14px' },\n { label: '16px', value: '16px' },\n { label: '18px', value: '18px' },\n { label: '20px', value: '20px' },\n { label: '24px', value: '24px' }\n]\n\nexport const editorAllowedColors: ColorOption[] = [\n '#292929',\n '#FFFFFF',\n '#40465A',\n '#5A6E85',\n '#A9B6C5',\n '#94A4B7',\n '#003790',\n '#042E73',\n '#809BC7',\n '#76BC21',\n '#F49F00',\n '#F42500'\n]\n\nexport const renderEditorPanel = (editor: Editor) => [\n {\n label: 'Жирный текст',\n icon: <Icon name='editor/bold' className='size-4' />,\n onClick: () => editor.chain().focus().toggleBold().run(),\n isActive: editor.isActive('bold')\n },\n {\n label: 'Курсивный текст',\n icon: <Icon name='editor/italic' className='size-4' />,\n onClick: () => editor.chain().focus().toggleItalic().run(),\n isActive: editor.isActive('italic')\n },\n {\n label: 'Подчеркнутый текст',\n icon: <Icon name='editor/underline' className='size-4' />,\n onClick: () => editor.chain().focus().toggleUnderline().run(),\n isActive: editor.isActive('underline')\n },\n {\n label: 'Зачеркнутый текст',\n icon: <Icon name='editor/strikethrough' className='size-4' />,\n onClick: () => editor.chain().focus().toggleStrike().run(),\n isActive: editor.isActive('strike')\n },\n {\n label: 'Обычный текст',\n icon: <Icon name='editor/typography' className='size-4' />,\n onClick: () => editor.chain().focus().setParagraph().run()\n },\n {\n label: 'Маркированный список',\n icon: <Icon name='editor/list' className='size-4' />,\n onClick: () => editor.chain().focus().toggleBulletList().run(),\n isActive: editor.isActive('bulletList')\n },\n {\n label: 'Перенос строки <br />',\n icon: <Icon name='editor/space' className='size-4' />,\n onClick: () => editor.chain().focus().setHardBreak().run()\n },\n {\n label: 'Добавить неразрывной пробел &nbsp;',\n icon: <Icon name='editor/nbsp' className='size-4' />,\n onClick: () => editor.chain().focus().insertContent(' ').run()\n },\n {\n label: 'Отменить',\n icon: <Icon name='editor/undo' className='size-4' />,\n onClick: () => editor.chain().focus().undo().run()\n },\n {\n label: 'Вернуть',\n icon: <Icon name='editor/redo' className='size-4' />,\n onClick: () => editor.chain().focus().redo().run()\n },\n {\n label: 'Очистить стили и теги',\n icon: <Icon name='editor/removeFormatting' className='size-4' />,\n onClick: () => editor.chain().focus().clearNodes().unsetAllMarks().run()\n },\n {\n label: 'Удалить все',\n icon: <Icon name='general/close' className='size-4' />,\n onClick: () => editor.commands.clearContent()\n }\n]\n"],"names":["headingsOptions","editorHeadingClasses","fontSizesOptions","editorAllowedColors","renderEditorPanel","editor","jsx","Icon"],"mappings":"ojDAIO,MAAMA,EAAkC,CAAC,EAAG,EAAG,EAAG,CAAC,EAE7CC,EAA+C,CAC1D,EAAG,mDACH,EAAG,mDACH,EAAG,6CACH,EAAG,4CACL,EAEaC,EAAmB,CAC9B,CAAE,MAAO,OAAQ,MAAO,MAAA,EACxB,CAAE,MAAO,OAAQ,MAAO,MAAA,EACxB,CAAE,MAAO,OAAQ,MAAO,MAAA,EACxB,CAAE,MAAO,OAAQ,MAAO,MAAA,EACxB,CAAE,MAAO,OAAQ,MAAO,MAAA,EACxB,CAAE,MAAO,OAAQ,MAAO,MAAA,CAC1B,EAEaC,EAAqC,CAChD,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EAEaC,EAAqBC,GAAmB,CACnD,CACE,MAAO,eACP,KAAMC,EAACC,EAAA,CAAK,KAAK,cAAc,UAAU,SAAS,EAClD,QAAS,IAAMF,EAAO,MAAA,EAAQ,QAAQ,WAAA,EAAa,IAAA,EACnD,SAAUA,EAAO,SAAS,MAAM,CAAA,EAElC,CACE,MAAO,kBACP,KAAMC,EAACC,EAAA,CAAK,KAAK,gBAAgB,UAAU,SAAS,EACpD,QAAS,IAAMF,EAAO,MAAA,EAAQ,QAAQ,aAAA,EAAe,IAAA,EACrD,SAAUA,EAAO,SAAS,QAAQ,CAAA,EAEpC,CACE,MAAO,qBACP,KAAMC,EAACC,EAAA,CAAK,KAAK,mBAAmB,UAAU,SAAS,EACvD,QAAS,IAAMF,EAAO,MAAA,EAAQ,QAAQ,gBAAA,EAAkB,IAAA,EACxD,SAAUA,EAAO,SAAS,WAAW,CAAA,EAEvC,CACE,MAAO,oBACP,KAAMC,EAACC,EAAA,CAAK,KAAK,uBAAuB,UAAU,SAAS,EAC3D,QAAS,IAAMF,EAAO,MAAA,EAAQ,QAAQ,aAAA,EAAe,IAAA,EACrD,SAAUA,EAAO,SAAS,QAAQ,CAAA,EAEpC,CACE,MAAO,gBACP,KAAMC,EAACC,EAAA,CAAK,KAAK,oBAAoB,UAAU,SAAS,EACxD,QAAS,IAAMF,EAAO,MAAA,EAAQ,MAAA,EAAQ,aAAA,EAAe,IAAA,CAAI,EAE3D,CACE,MAAO,uBACP,KAAMC,EAACC,EAAA,CAAK,KAAK,cAAc,UAAU,SAAS,EAClD,QAAS,IAAMF,EAAO,MAAA,EAAQ,QAAQ,iBAAA,EAAmB,IAAA,EACzD,SAAUA,EAAO,SAAS,YAAY,CAAA,EAExC,CACE,MAAO,wBACP,KAAMC,EAACC,EAAA,CAAK,KAAK,eAAe,UAAU,SAAS,EACnD,QAAS,IAAMF,EAAO,MAAA,EAAQ,MAAA,EAAQ,aAAA,EAAe,IAAA,CAAI,EAE3D,CACE,MAAO,qCACP,KAAMC,EAACC,EAAA,CAAK,KAAK,cAAc,UAAU,SAAS,EAClD,QAAS,IAAMF,EAAO,MAAA,EAAQ,QAAQ,cAAc,GAAG,EAAE,IAAA,CAAI,EAE/D,CACE,MAAO,WACP,KAAMC,EAACC,EAAA,CAAK,KAAK,cAAc,UAAU,SAAS,EAClD,QAAS,IAAMF,EAAO,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,IAAA,CAAI,EAEnD,CACE,MAAO,UACP,KAAMC,EAACC,EAAA,CAAK,KAAK,cAAc,UAAU,SAAS,EAClD,QAAS,IAAMF,EAAO,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,IAAA,CAAI,EAEnD,CACE,MAAO,wBACP,KAAMC,EAACC,EAAA,CAAK,KAAK,0BAA0B,UAAU,SAAS,EAC9D,QAAS,IAAMF,EAAO,MAAA,EAAQ,MAAA,EAAQ,WAAA,EAAa,cAAA,EAAgB,IAAA,CAAI,EAEzE,CACE,MAAO,cACP,KAAMC,EAACC,EAAA,CAAK,KAAK,gBAAgB,UAAU,SAAS,EACpD,QAAS,IAAMF,EAAO,SAAS,aAAA,CAAa,CAEhD"}
@@ -1,2 +1,2 @@
1
- import{jsxs as f,jsx as p}from"react/jsx-runtime";import{forwardRef as N,useEffect as C}from"react";import{CharacterCount as M}from"../../../../../../../node_modules/@tiptap/extension-character-count/dist/index.js";import{useEditor as A,EditorContent as L}from"../../../../../../../node_modules/@tiptap/react/dist/index.js";import{cn as n}from"../../../../../utils/cn.js";import"../../../../button/Button.js";import"../../../../buttonIcon/ButtonIcon.js";import"../../../../calendar/Calendar.js";import"../../../../calendar/model/utils.js";import"../../../../accordion/Accordion.js";import"react-hook-form";import"react-dom";import"../../../../modal/ui/IframeModalContent.js";import"../../../../../../../node_modules/react-hot-toast/dist/index.js";import"../../../../table/ui/primitives/Primitives.js";import"../../../../carousel/ui/CarouselContent.js";import"../../../../slot/Slot.js";import"../../../uncontrolled/autocomplete/Autocomplete.js";import"../../../uncontrolled/checkbox/Checkbox.js";import"../../../uncontrolled/combobox/combobox.js";import"../../../uncontrolled/dayPicker/DayPicker.js";import"../../../uncontrolled/input/Input.js";import"../../../uncontrolled/inputOtp/InputOtpBase.js";import"../../../uncontrolled/maskInput/MaskInput.js";import"../../../uncontrolled/radio/RadioGroup.js";import"../../../uncontrolled/radio/ui/RadioItem.js";import"../../../uncontrolled/slider/SliderBase.js";import"../../../uncontrolled/switch/Switch.js";import"../../../uncontrolled/textarea/Textarea.js";import"../../../uncontrolled/uploader/UploaderBase.js";import"../../../uncontrolled/inputCurrency/InputCurrency.js";import"../../../../../../../src/configs/api.js";import"../../input/MaskInputControl.js";import"../../../../dropdownList/ui/dropdownItem/DropdownItem.js";import{MessageView as y}from"../../../ui/MessageView.js";import"../model/extensions.js";import{editorConfig as U}from"../model/config.js";import{Toolbar as k}from"./Toolbar.js";const H=Number.MAX_SAFE_INTEGER,bt=N(({onChange:l,value:e="",label:u,limit:d,error:r,classes:t,editable:a,helperText:b,shouldRerenderOnTransaction:g=!0,externalHandlers:c,small:h,...T},E)=>{const{onUpdate:x}=c||{},o=A({extensions:[...U,M.configure({limit:d??H})],editable:a,content:e,onUpdate:m=>{const{editor:i}=m,w=i!=null&&i.getText()?i==null?void 0:i.getHTML():"";l(w),x&&x(m)},editorProps:{transformPastedText(m){return m.replace(/\xA0/g," ")},transformPastedHTML(m){return m.replace(/\xA0/g," ")},attributes:{spellcheck:"false",class:n("p-4 outline-none bg-color-blue-grey-100 min-h-[240px] !static max-h-[500px] customScrollbar-y overflow-y-auto break-keep",t==null?void 0:t.editor,{"max-h-[80px] min-h-full":h})}},shouldRerenderOnTransaction:g,...T});return C(()=>{o&&o.getHTML()!==e&&o.commands.setContent(e)},[o,e]),o?f("div",{className:n("flex w-full flex-col",t==null?void 0:t.root),children:[f("div",{className:n("relative flex w-full flex-col rounded-md border border-solid border-warm-grey-200",t==null?void 0:t.wrapper),children:[p(k,{editor:o}),!e&&p("p",{className:n("absolute left-4 top-16 text-color-disabled",t==null?void 0:t.label),children:u}),p(L,{ref:E,editor:o}),d&&f("p",{className:"absolute bottom-4 right-4 text-color-disabled",children:[o.storage.characterCount.characters()," / ",d," символов"]})]}),p(y,{className:t==null?void 0:t.message,intent:r!=null&&r.message?"error":"simple",text:(r==null?void 0:r.message)||b,disabled:!a})]}):null});export{bt as Editor};
1
+ import{jsxs as d,jsx as p}from"react/jsx-runtime";import{forwardRef as T,useEffect as C}from"react";import{CharacterCount as M}from"../../../../../../../node_modules/@tiptap/extension-character-count/dist/index.js";import{useEditor as y,EditorContent as L}from"../../../../../../../node_modules/@tiptap/react/dist/index.js";import{cn as e}from"../../../../../utils/cn.js";import"../../../../button/Button.js";import"../../../../buttonIcon/ButtonIcon.js";import"../../../../calendar/Calendar.js";import"../../../../calendar/model/utils.js";import"../../../../accordion/Accordion.js";import"react-hook-form";import"react-dom";import"../../../../modal/ui/IframeModalContent.js";import"../../../../../../../node_modules/react-hot-toast/dist/index.js";import"../../../../table/ui/primitives/Primitives.js";import"../../../../carousel/ui/CarouselContent.js";import"../../../../slot/Slot.js";import"../../../uncontrolled/autocomplete/Autocomplete.js";import"../../../uncontrolled/checkbox/Checkbox.js";import"../../../uncontrolled/combobox/combobox.js";import"../../../uncontrolled/dayPicker/DayPicker.js";import"../../../uncontrolled/input/Input.js";import"../../../uncontrolled/inputOtp/InputOtpBase.js";import"../../../uncontrolled/maskInput/MaskInput.js";import"../../../uncontrolled/radio/RadioGroup.js";import"../../../uncontrolled/radio/ui/RadioItem.js";import"../../../uncontrolled/slider/SliderBase.js";import"../../../uncontrolled/switch/Switch.js";import"../../../uncontrolled/textarea/Textarea.js";import"../../../uncontrolled/uploader/UploaderBase.js";import"../../../uncontrolled/inputCurrency/InputCurrency.js";import"../../../../../../../src/configs/api.js";import"../../input/MaskInputControl.js";import"../../../../dropdownList/ui/dropdownItem/DropdownItem.js";import{MessageView as U}from"../../../ui/MessageView.js";import"../model/extensions.js";import{editorConfig as k}from"../model/config.js";import{Toolbar as A}from"./Toolbar.js";const I=Number.MAX_SAFE_INTEGER,bt=T(({onChange:u,value:m="",label:x,limit:n,error:r,classes:t,editable:f,helperText:b,shouldRerenderOnTransaction:c=!0,externalHandlers:g,small:h,...E},w)=>{const{onUpdate:a}=g||{},o=y({extensions:[...k,M.configure({limit:n??I})],editable:f,content:m,parseOptions:{preserveWhitespace:!0},onUpdate:l=>{const{editor:i}=l,N=i!=null&&i.getText()?i==null?void 0:i.getHTML():"";u(N),a&&a(l)},editorProps:{attributes:{spellcheck:"false",class:e("p-4 outline-none bg-color-blue-grey-100 min-h-[240px] !static max-h-[500px] customScrollbar-y overflow-y-auto break-keep",t==null?void 0:t.editor,{"max-h-[80px] min-h-full":h})}},shouldRerenderOnTransaction:c,...E});return C(()=>{o&&o.getHTML()!==m&&o.commands.setContent(m)},[o,m]),o?d("div",{className:e("flex w-full flex-col",t==null?void 0:t.root),children:[d("div",{className:e("relative flex w-full flex-col rounded-md border border-solid border-warm-grey-200",t==null?void 0:t.wrapper),children:[p(A,{editor:o}),!m&&p("p",{className:e("absolute left-4 top-16 text-color-disabled",t==null?void 0:t.label),children:x}),p(L,{ref:w,editor:o}),n&&d("p",{className:"absolute bottom-4 right-4 text-color-disabled",children:[o.storage.characterCount.characters()," / ",n," символов"]})]}),p(U,{className:t==null?void 0:t.message,intent:r!=null&&r.message?"error":"simple",text:(r==null?void 0:r.message)||b,disabled:!f})]}):null});export{bt as Editor};
2
2
  //# sourceMappingURL=Editor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Editor.js","sources":["../../../../../../../../lib/shared/ui/formElements/controlled/editor/ui/Editor.tsx"],"sourcesContent":["import { forwardRef, type ReactElement, useEffect } from 'react'\nimport { type FieldError } from 'react-hook-form'\nimport CharacterCount from '@tiptap/extension-character-count'\nimport { EditorContent, type EditorEvents, useEditor, type UseEditorOptions } from '@tiptap/react'\nimport { MessageView } from '../../../ui'\nimport { type EditorControlClasses } from '../EditorControl'\nimport { editorConfig } from '../model'\nimport { Toolbar } from './Toolbar'\nimport { cn } from '$/shared/utils'\ntype ExternalHandlers = {\n onUpdate?: (editor: EditorEvents['update']) => void\n}\n\ninterface EditorProps extends Partial<UseEditorOptions> {\n onChange: (value: string) => void\n value: string\n error?: FieldError\n classes?: EditorControlClasses\n externalHandlers?: ExternalHandlers\n label?: string\n helperText?: string | ReactElement\n /**\n * Лимит символов\n */\n limit?: number\n /**\n * Сделать текстовый редактор маленьким\n */\n small?: boolean\n}\n\ntype EditorRef = React.ElementRef<typeof EditorContent>\n\nconst DEFAULT_LIMIT = Number.MAX_SAFE_INTEGER\n\nexport const Editor = forwardRef<EditorRef, EditorProps>(\n (\n {\n onChange,\n value = '',\n label,\n limit,\n error,\n classes,\n editable,\n helperText,\n shouldRerenderOnTransaction = true,\n externalHandlers,\n small,\n ...props\n },\n ref\n ) => {\n const { onUpdate: externalOnUpdate } = externalHandlers || {}\n\n const editor = useEditor({\n extensions: [\n ...editorConfig,\n CharacterCount.configure({\n limit: limit ?? DEFAULT_LIMIT\n })\n ],\n editable: editable,\n content: value,\n onUpdate: (props) => {\n const { editor } = props\n const content = editor?.getText() ? editor?.getHTML() : ''\n onChange(content)\n\n if (externalOnUpdate) {\n externalOnUpdate(props)\n }\n },\n editorProps: {\n transformPastedText(text) {\n return text.replace(/\\xA0/g, ' ')\n },\n transformPastedHTML(html) {\n return html.replace(/\\xA0/g, ' ')\n },\n attributes: {\n spellcheck: 'false',\n class: cn(\n 'p-4 outline-none bg-color-blue-grey-100 min-h-[240px] !static max-h-[500px] customScrollbar-y overflow-y-auto break-keep',\n classes?.editor,\n { 'max-h-[80px] min-h-full': small }\n )\n }\n },\n shouldRerenderOnTransaction,\n ...props\n })\n\n useEffect(() => {\n if (editor && editor.getHTML() !== value) {\n editor.commands.setContent(value)\n }\n }, [editor, value])\n\n if (!editor) {\n return null\n }\n\n return (\n <div className={cn('flex w-full flex-col', classes?.root)}>\n <div\n className={cn('relative flex w-full flex-col rounded-md border border-solid border-warm-grey-200', classes?.wrapper)}\n >\n <Toolbar editor={editor} />\n {!value && <p className={cn('absolute left-4 top-16 text-color-disabled', classes?.label)}>{label}</p>}\n <EditorContent ref={ref} editor={editor} />\n {limit && (\n <p className='absolute bottom-4 right-4 text-color-disabled'>\n {editor.storage.characterCount.characters()} / {limit} символов\n </p>\n )}\n </div>\n\n <MessageView\n className={classes?.message}\n intent={error?.message ? 'error' : 'simple'}\n text={error?.message || helperText}\n disabled={!editable}\n />\n </div>\n )\n }\n)\n"],"names":["DEFAULT_LIMIT","Editor","forwardRef","onChange","value","label","limit","error","classes","editable","helperText","shouldRerenderOnTransaction","externalHandlers","small","props","ref","externalOnUpdate","editor","useEditor","editorConfig","CharacterCount","content","text","html","cn","useEffect","jsxs","jsx","Toolbar","EditorContent","MessageView"],"mappings":"65DAiCA,MAAMA,EAAgB,OAAO,iBAEhBC,GAASC,EACpB,CACE,CACE,SAAAC,EACA,MAAAC,EAAQ,GACR,MAAAC,EACA,MAAAC,EACA,MAAAC,EACA,QAAAC,EACA,SAAAC,EACA,WAAAC,EACA,4BAAAC,EAA8B,GAC9B,iBAAAC,EACA,MAAAC,EACA,GAAGC,CAAA,EAELC,IACG,CACH,KAAM,CAAE,SAAUC,CAAA,EAAqBJ,GAAoB,CAAA,EAErDK,EAASC,EAAU,CACvB,WAAY,CACV,GAAGC,EACHC,EAAe,UAAU,CACvB,MAAOd,GAASN,CAAA,CACjB,CAAA,EAEH,SAAAS,EACA,QAASL,EACT,SAAWU,GAAU,CACnB,KAAM,CAAE,OAAAG,CAAAA,EAAWH,EACbO,EAAUJ,GAAAA,MAAAA,EAAQ,UAAYA,GAAAA,YAAAA,EAAQ,UAAY,GACxDd,EAASkB,CAAO,EAEZL,GACFA,EAAiBF,CAAK,CAE1B,EACA,YAAa,CACX,oBAAoBQ,EAAM,CACxB,OAAOA,EAAK,QAAQ,QAAS,GAAG,CAClC,EACA,oBAAoBC,EAAM,CACxB,OAAOA,EAAK,QAAQ,QAAS,GAAG,CAClC,EACA,WAAY,CACV,WAAY,QACZ,MAAOC,EACL,2HACAhB,GAAA,YAAAA,EAAS,OACT,CAAE,0BAA2BK,CAAA,CAAM,CACrC,CACF,EAEF,4BAAAF,EACA,GAAGG,CAAA,CACJ,EAQD,OANAW,EAAU,IAAM,CACVR,GAAUA,EAAO,QAAA,IAAcb,GACjCa,EAAO,SAAS,WAAWb,CAAK,CAEpC,EAAG,CAACa,EAAQb,CAAK,CAAC,EAEba,IAKF,MAAA,CAAI,UAAWO,EAAG,uBAAwBhB,GAAA,YAAAA,EAAS,IAAI,EACtD,SAAA,CAAAkB,EAAC,MAAA,CACC,UAAWF,EAAG,oFAAqFhB,GAAA,YAAAA,EAAS,OAAO,EAEnH,SAAA,CAAAmB,EAACC,GAAQ,OAAAX,EAAgB,EACxB,CAACb,GAASuB,EAAC,IAAA,CAAE,UAAWH,EAAG,6CAA8ChB,GAAA,YAAAA,EAAS,KAAK,EAAI,SAAAH,CAAA,CAAM,EAClGsB,EAACE,EAAA,CAAc,IAAAd,EAAU,OAAAE,CAAA,CAAgB,EACxCX,GACCoB,EAAC,IAAA,CAAE,UAAU,gDACV,SAAA,CAAAT,EAAO,QAAQ,eAAe,WAAA,EAAa,MAAIX,EAAM,WAAA,CAAA,CACxD,CAAA,CAAA,CAAA,EAIJqB,EAACG,EAAA,CACC,UAAWtB,GAAA,YAAAA,EAAS,QACpB,OAAQD,GAAA,MAAAA,EAAO,QAAU,QAAU,SACnC,MAAMA,GAAA,YAAAA,EAAO,UAAWG,EACxB,SAAU,CAACD,CAAA,CAAA,CACb,EACF,EAxBO,IA0BX,CACF"}
1
+ {"version":3,"file":"Editor.js","sources":["../../../../../../../../lib/shared/ui/formElements/controlled/editor/ui/Editor.tsx"],"sourcesContent":["import { forwardRef, type ReactElement, useEffect } from 'react'\nimport { type FieldError } from 'react-hook-form'\nimport CharacterCount from '@tiptap/extension-character-count'\nimport { EditorContent, type EditorEvents, useEditor, type UseEditorOptions } from '@tiptap/react'\nimport { MessageView } from '../../../ui'\nimport { type EditorControlClasses } from '../EditorControl'\nimport { editorConfig } from '../model'\nimport { Toolbar } from './Toolbar'\nimport { cn } from '$/shared/utils'\ntype ExternalHandlers = {\n onUpdate?: (editor: EditorEvents['update']) => void\n}\n\ninterface EditorProps extends Partial<UseEditorOptions> {\n onChange: (value: string) => void\n value: string\n error?: FieldError\n classes?: EditorControlClasses\n externalHandlers?: ExternalHandlers\n label?: string\n helperText?: string | ReactElement\n /**\n * Лимит символов\n */\n limit?: number\n /**\n * Сделать текстовый редактор маленьким\n */\n small?: boolean\n}\n\ntype EditorRef = React.ElementRef<typeof EditorContent>\n\nconst DEFAULT_LIMIT = Number.MAX_SAFE_INTEGER\n\nexport const Editor = forwardRef<EditorRef, EditorProps>(\n (\n {\n onChange,\n value = '',\n label,\n limit,\n error,\n classes,\n editable,\n helperText,\n shouldRerenderOnTransaction = true,\n externalHandlers,\n small,\n ...props\n },\n ref\n ) => {\n const { onUpdate: externalOnUpdate } = externalHandlers || {}\n\n const editor = useEditor({\n extensions: [\n ...editorConfig,\n CharacterCount.configure({\n limit: limit ?? DEFAULT_LIMIT\n })\n ],\n editable: editable,\n content: value,\n parseOptions: {\n preserveWhitespace: true\n },\n onUpdate: (props) => {\n const { editor } = props\n const content = editor?.getText() ? editor?.getHTML() : ''\n onChange(content)\n\n if (externalOnUpdate) {\n externalOnUpdate(props)\n }\n },\n editorProps: {\n // TODO: спросить у Рустема\n // transformPastedText(text) {\n // return text.replace(/\\xA0/g, ' ')\n // },\n // transformPastedHTML(html) {\n // return html.replace(/\\xA0/g, ' ')\n // },\n attributes: {\n spellcheck: 'false',\n class: cn(\n 'p-4 outline-none bg-color-blue-grey-100 min-h-[240px] !static max-h-[500px] customScrollbar-y overflow-y-auto break-keep',\n classes?.editor,\n { 'max-h-[80px] min-h-full': small }\n )\n }\n },\n shouldRerenderOnTransaction,\n ...props\n })\n\n useEffect(() => {\n if (editor && editor.getHTML() !== value) {\n editor.commands.setContent(value)\n }\n }, [editor, value])\n\n if (!editor) {\n return null\n }\n\n return (\n <div className={cn('flex w-full flex-col', classes?.root)}>\n <div\n className={cn('relative flex w-full flex-col rounded-md border border-solid border-warm-grey-200', classes?.wrapper)}\n >\n <Toolbar editor={editor} />\n {!value && <p className={cn('absolute left-4 top-16 text-color-disabled', classes?.label)}>{label}</p>}\n <EditorContent ref={ref} editor={editor} />\n {limit && (\n <p className='absolute bottom-4 right-4 text-color-disabled'>\n {editor.storage.characterCount.characters()} / {limit} символов\n </p>\n )}\n </div>\n\n <MessageView\n className={classes?.message}\n intent={error?.message ? 'error' : 'simple'}\n text={error?.message || helperText}\n disabled={!editable}\n />\n </div>\n )\n }\n)\n"],"names":["DEFAULT_LIMIT","Editor","forwardRef","onChange","value","label","limit","error","classes","editable","helperText","shouldRerenderOnTransaction","externalHandlers","small","props","ref","externalOnUpdate","editor","useEditor","editorConfig","CharacterCount","content","cn","useEffect","jsxs","jsx","Toolbar","EditorContent","MessageView"],"mappings":"65DAiCA,MAAMA,EAAgB,OAAO,iBAEhBC,GAASC,EACpB,CACE,CACE,SAAAC,EACA,MAAAC,EAAQ,GACR,MAAAC,EACA,MAAAC,EACA,MAAAC,EACA,QAAAC,EACA,SAAAC,EACA,WAAAC,EACA,4BAAAC,EAA8B,GAC9B,iBAAAC,EACA,MAAAC,EACA,GAAGC,CAAA,EAELC,IACG,CACH,KAAM,CAAE,SAAUC,CAAA,EAAqBJ,GAAoB,CAAA,EAErDK,EAASC,EAAU,CACvB,WAAY,CACV,GAAGC,EACHC,EAAe,UAAU,CACvB,MAAOd,GAASN,CAAA,CACjB,CAAA,EAEH,SAAAS,EACA,QAASL,EACT,aAAc,CACZ,mBAAoB,EAAA,EAEtB,SAAWU,GAAU,CACnB,KAAM,CAAE,OAAAG,CAAAA,EAAWH,EACbO,EAAUJ,GAAAA,MAAAA,EAAQ,UAAYA,GAAAA,YAAAA,EAAQ,UAAY,GACxDd,EAASkB,CAAO,EAEZL,GACFA,EAAiBF,CAAK,CAE1B,EACA,YAAa,CAQX,WAAY,CACV,WAAY,QACZ,MAAOQ,EACL,2HACAd,GAAA,YAAAA,EAAS,OACT,CAAE,0BAA2BK,CAAA,CAAM,CACrC,CACF,EAEF,4BAAAF,EACA,GAAGG,CAAA,CACJ,EAQD,OANAS,EAAU,IAAM,CACVN,GAAUA,EAAO,QAAA,IAAcb,GACjCa,EAAO,SAAS,WAAWb,CAAK,CAEpC,EAAG,CAACa,EAAQb,CAAK,CAAC,EAEba,IAKF,MAAA,CAAI,UAAWK,EAAG,uBAAwBd,GAAA,YAAAA,EAAS,IAAI,EACtD,SAAA,CAAAgB,EAAC,MAAA,CACC,UAAWF,EAAG,oFAAqFd,GAAA,YAAAA,EAAS,OAAO,EAEnH,SAAA,CAAAiB,EAACC,GAAQ,OAAAT,EAAgB,EACxB,CAACb,GAASqB,EAAC,IAAA,CAAE,UAAWH,EAAG,6CAA8Cd,GAAA,YAAAA,EAAS,KAAK,EAAI,SAAAH,CAAA,CAAM,EAClGoB,EAACE,EAAA,CAAc,IAAAZ,EAAU,OAAAE,CAAA,CAAgB,EACxCX,GACCkB,EAAC,IAAA,CAAE,UAAU,gDACV,SAAA,CAAAP,EAAO,QAAQ,eAAe,WAAA,EAAa,MAAIX,EAAM,WAAA,CAAA,CACxD,CAAA,CAAA,CAAA,EAIJmB,EAACG,EAAA,CACC,UAAWpB,GAAA,YAAAA,EAAS,QACpB,OAAQD,GAAA,MAAAA,EAAO,QAAU,QAAU,SACnC,MAAMA,GAAA,YAAAA,EAAO,UAAWG,EACxB,SAAU,CAACD,CAAA,CAAA,CACb,EACF,EAxBO,IA0BX,CACF"}
@@ -1,2 +1,2 @@
1
- import{jsxs as E,jsx as a}from"react/jsx-runtime";import{useRef as C,useEffect as F}from"react";import{useController as I}from"react-hook-form";import{InputBase as j}from"../../uncontrolled/input/Input.js";import{cn as N}from"../../../../utils/cn.js";import{mergeRefs as P}from"../../../../utils/mergeRefs.js";import"../../../button/Button.js";import"../../../buttonIcon/ButtonIcon.js";import"../../../calendar/Calendar.js";import"../../../calendar/model/utils.js";import"../../../accordion/Accordion.js";import"react-dom";import"../../../modal/ui/IframeModalContent.js";import"../../../../../../node_modules/react-hot-toast/dist/index.js";import"../../../table/ui/primitives/Primitives.js";import"../../../carousel/ui/CarouselContent.js";import"../../../slot/Slot.js";import"../../uncontrolled/autocomplete/Autocomplete.js";import"../../uncontrolled/checkbox/Checkbox.js";import"../../uncontrolled/combobox/combobox.js";import"../../uncontrolled/dayPicker/DayPicker.js";import"../../uncontrolled/inputOtp/InputOtpBase.js";import"../../uncontrolled/maskInput/MaskInput.js";import"../../uncontrolled/radio/RadioGroup.js";import"../../uncontrolled/radio/ui/RadioItem.js";import"../../uncontrolled/slider/SliderBase.js";import"../../uncontrolled/switch/Switch.js";import"../../uncontrolled/textarea/Textarea.js";import"../../uncontrolled/uploader/UploaderBase.js";import"../../uncontrolled/inputCurrency/InputCurrency.js";import"../../../../../../src/configs/api.js";import"../editor/ui/Editor.js";import"./MaskInputControl.js";import"../../../dropdownList/ui/dropdownItem/DropdownItem.js";import{MessageView as R}from"../../ui/MessageView.js";class l extends CustomEvent{constructor(i,o){super(i,o)}}const at=({control:m,name:i,defaultValue:o,disabled:s,rules:c,shouldUnregister:f,helperText:u,classes:d,...p})=>{const e=C(null),{field:n,fieldState:v}=I({control:m,name:i,defaultValue:o,disabled:s,rules:c,shouldUnregister:f}),{error:t,invalid:r,isTouched:h}=v,{message:g,root:w,...x}=d||{};return F(()=>{e.current&&(r&&e.current.dispatchEvent(new l("invalidField",{detail:t})),r||e.current.dispatchEvent(new l("validateField",{detail:t})))},[r]),E("div",{className:N("w-full",w),children:[a(j,{...p,...n,ref:P(e,n.ref),classes:x,invalid:r,attachmentProps:{invalid:r,isTouched:h,withValidateIcons:!0,...p.attachmentProps},"data-error-message":t==null?void 0:t.message}),a(R,{text:(t==null?void 0:t.message)||u,className:g,intent:t?"error":"simple",disabled:s})]})};export{at as InputControl};
1
+ import{jsxs as E,jsx as a}from"react/jsx-runtime";import{useRef as C,useEffect as F}from"react";import{useController as I}from"react-hook-form";import{cn as j}from"../../../../utils/cn.js";import{mergeRefs as N}from"../../../../utils/mergeRefs.js";import"../../../button/Button.js";import"../../../buttonIcon/ButtonIcon.js";import"../../../calendar/Calendar.js";import"../../../calendar/model/utils.js";import"../../../accordion/Accordion.js";import"react-dom";import"../../../modal/ui/IframeModalContent.js";import"../../../../../../node_modules/react-hot-toast/dist/index.js";import"../../../table/ui/primitives/Primitives.js";import"../../../carousel/ui/CarouselContent.js";import"../../../slot/Slot.js";import"../../uncontrolled/autocomplete/Autocomplete.js";import"../../uncontrolled/checkbox/Checkbox.js";import"../../uncontrolled/combobox/combobox.js";import"../../uncontrolled/dayPicker/DayPicker.js";import{InputBase as P}from"../../uncontrolled/input/Input.js";import"../../uncontrolled/inputOtp/InputOtpBase.js";import"../../uncontrolled/maskInput/MaskInput.js";import"../../uncontrolled/radio/RadioGroup.js";import"../../uncontrolled/radio/ui/RadioItem.js";import"../../uncontrolled/slider/SliderBase.js";import"../../uncontrolled/switch/Switch.js";import"../../uncontrolled/textarea/Textarea.js";import"../../uncontrolled/uploader/UploaderBase.js";import"../../uncontrolled/inputCurrency/InputCurrency.js";import{MessageView as R}from"../../ui/MessageView.js";import"../../../../../../src/configs/api.js";import"../editor/ui/Editor.js";import"./MaskInputControl.js";import"../../../dropdownList/ui/dropdownItem/DropdownItem.js";class l extends CustomEvent{constructor(i,o){super(i,o)}}const at=({control:m,name:i,defaultValue:o,disabled:s,rules:c,shouldUnregister:f,helperText:u,classes:d,...p})=>{const e=C(null),{field:n,fieldState:v}=I({control:m,name:i,defaultValue:o,disabled:s,rules:c,shouldUnregister:f}),{error:t,invalid:r,isTouched:h}=v,{message:g,root:w,...x}=d||{};return F(()=>{e.current&&(r&&e.current.dispatchEvent(new l("invalidField",{detail:t})),r||e.current.dispatchEvent(new l("validateField",{detail:t})))},[r]),E("div",{className:j("w-full",w),children:[a(P,{...p,...n,ref:N(e,n.ref),classes:x,invalid:r,attachmentProps:{invalid:r,isTouched:h,withValidateIcons:!0,...p.attachmentProps},"data-error-message":t==null?void 0:t.message}),a(R,{text:(t==null?void 0:t.message)||u,className:g,intent:t?"error":"simple",disabled:s})]})};export{at as InputControl};
2
2
  //# sourceMappingURL=InputControl.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"InputControl.js","sources":["../../../../../../../lib/shared/ui/formElements/controlled/input/InputControl.tsx"],"sourcesContent":["'use client'\n\nimport { useEffect, useRef } from 'react'\nimport { type Control, type FieldValues, type Path, useController, type UseControllerProps } from 'react-hook-form'\nimport { InputBase, type InputBaseProps } from '../../uncontrolled/input'\nimport { MessageView } from '$/shared/ui/formElements/ui'\nimport { cn, mergeRefs } from '$/shared/utils'\n\ntype InputControlClasses = InputBaseProps['classes'] & {\n message?: string\n root?: string\n}\n\nexport type InputControlProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends Path<TFieldValues> = Path<TFieldValues>\n> = UseControllerProps<TFieldValues, TName> &\n Omit<InputBaseProps, 'classes'> & {\n /**\n * Контрол объект для управления полем\n */\n control: Control<TFieldValues>\n /**\n * Дополнительный текст\n */\n helperText?: string\n /**\n * Дополнительные стили компонента\n */\n classes?: InputControlClasses\n }\n\nclass DLGAFieldEvent<T extends {}> extends CustomEvent<T> {\n constructor(type: string, options: { bubbles?: boolean; cancelable?: boolean; detail?: T }) {\n super(type, options)\n }\n}\n\nexport const InputControl = <TFieldValues extends FieldValues = FieldValues>({\n control,\n name,\n defaultValue,\n disabled,\n rules,\n shouldUnregister,\n helperText,\n classes,\n ...props\n}: InputControlProps<TFieldValues>) => {\n const ref = useRef<HTMLInputElement>(null)\n const { field, fieldState } = useController({\n control,\n name,\n defaultValue,\n disabled,\n rules,\n shouldUnregister\n })\n\n const { error, invalid, isTouched } = fieldState\n const { message, root, ...restClasses } = classes || {}\n\n useEffect(() => {\n if (!ref.current) return\n\n if (invalid) {\n ref.current.dispatchEvent(new DLGAFieldEvent('invalidField', { detail: error }))\n }\n if (!invalid) {\n ref.current.dispatchEvent(new DLGAFieldEvent('validateField', { detail: error }))\n }\n }, [invalid])\n\n return (\n <div className={cn('w-full', root)}>\n <InputBase\n {...props}\n {...field}\n ref={mergeRefs(ref, field.ref)}\n classes={restClasses}\n invalid={invalid}\n attachmentProps={{\n invalid,\n isTouched,\n withValidateIcons: true,\n ...props.attachmentProps\n }}\n data-error-message={error?.message}\n />\n <MessageView\n text={error?.message || helperText}\n className={message}\n intent={error ? 'error' : 'simple'}\n disabled={disabled}\n />\n </div>\n )\n}\n"],"names":["DLGAFieldEvent","type","options","InputControl","control","name","defaultValue","disabled","rules","shouldUnregister","helperText","classes","props","ref","useRef","field","fieldState","useController","error","invalid","isTouched","message","root","restClasses","useEffect","cn","jsx","InputBase","mergeRefs","MessageView"],"mappings":"ymDAgCA,MAAMA,UAAqC,WAAe,CACxD,YAAYC,EAAcC,EAAkE,CAC1F,MAAMD,EAAMC,CAAO,CACrB,CACF,CAEO,MAAMC,GAAe,CAAiD,CAC3E,QAAAC,EACA,KAAAC,EACA,aAAAC,EACA,SAAAC,EACA,MAAAC,EACA,iBAAAC,EACA,WAAAC,EACA,QAAAC,EACA,GAAGC,CACL,IAAuC,CACrC,MAAMC,EAAMC,EAAyB,IAAI,EACnC,CAAE,MAAAC,EAAO,WAAAC,CAAA,EAAeC,EAAc,CAC1C,QAAAb,EACA,KAAAC,EACA,aAAAC,EACA,SAAAC,EACA,MAAAC,EACA,iBAAAC,CAAA,CACD,EAEK,CAAE,MAAAS,EAAO,QAAAC,EAAS,UAAAC,CAAA,EAAcJ,EAChC,CAAE,QAAAK,EAAS,KAAAC,EAAM,GAAGC,CAAA,EAAgBZ,GAAW,CAAA,EAErD,OAAAa,EAAU,IAAM,CACTX,EAAI,UAELM,GACFN,EAAI,QAAQ,cAAc,IAAIb,EAAe,eAAgB,CAAE,OAAQkB,CAAA,CAAO,CAAC,EAE5EC,GACHN,EAAI,QAAQ,cAAc,IAAIb,EAAe,gBAAiB,CAAE,OAAQkB,CAAA,CAAO,CAAC,EAEpF,EAAG,CAACC,CAAO,CAAC,IAGT,MAAA,CAAI,UAAWM,EAAG,SAAUH,CAAI,EAC/B,SAAA,CAAAI,EAACC,EAAA,CACE,GAAGf,EACH,GAAGG,EACJ,IAAKa,EAAUf,EAAKE,EAAM,GAAG,EAC7B,QAASQ,EACT,QAAAJ,EACA,gBAAiB,CACf,QAAAA,EACA,UAAAC,EACA,kBAAmB,GACnB,GAAGR,EAAM,eAAA,EAEX,qBAAoBM,GAAA,YAAAA,EAAO,OAAA,CAAA,EAE7BQ,EAACG,EAAA,CACC,MAAMX,GAAA,YAAAA,EAAO,UAAWR,EACxB,UAAWW,EACX,OAAQH,EAAQ,QAAU,SAC1B,SAAAX,CAAA,CAAA,CACF,EACF,CAEJ"}
1
+ {"version":3,"file":"InputControl.js","sources":["../../../../../../../lib/shared/ui/formElements/controlled/input/InputControl.tsx"],"sourcesContent":["'use client'\n\nimport { useEffect, useRef } from 'react'\nimport { type Control, type FieldValues, type Path, useController, type UseControllerProps } from 'react-hook-form'\nimport { InputBase, type InputBaseProps } from '$/shared/ui'\nimport { MessageView } from '$/shared/ui/formElements/ui'\nimport { cn, mergeRefs } from '$/shared/utils'\n\ntype InputControlClasses = InputBaseProps['classes'] & {\n message?: string\n root?: string\n}\n\nexport type InputControlProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends Path<TFieldValues> = Path<TFieldValues>\n> = UseControllerProps<TFieldValues, TName> &\n Omit<InputBaseProps, 'classes'> & {\n /**\n * Контрол объект для управления полем\n */\n control: Control<TFieldValues>\n /**\n * Дополнительный текст\n */\n helperText?: string\n /**\n * Дополнительные стили компонента\n */\n classes?: InputControlClasses\n }\n\nclass DLGAFieldEvent<T extends {}> extends CustomEvent<T> {\n constructor(type: string, options: { bubbles?: boolean; cancelable?: boolean; detail?: T }) {\n super(type, options)\n }\n}\n\nexport const InputControl = <TFieldValues extends FieldValues = FieldValues>({\n control,\n name,\n defaultValue,\n disabled,\n rules,\n shouldUnregister,\n helperText,\n classes,\n ...props\n}: InputControlProps<TFieldValues>) => {\n const ref = useRef<HTMLInputElement>(null)\n const { field, fieldState } = useController({\n control,\n name,\n defaultValue,\n disabled,\n rules,\n shouldUnregister\n })\n\n const { error, invalid, isTouched } = fieldState\n const { message, root, ...restClasses } = classes || {}\n\n useEffect(() => {\n if (!ref.current) return\n\n if (invalid) {\n ref.current.dispatchEvent(new DLGAFieldEvent('invalidField', { detail: error }))\n }\n if (!invalid) {\n ref.current.dispatchEvent(new DLGAFieldEvent('validateField', { detail: error }))\n }\n }, [invalid])\n\n return (\n <div className={cn('w-full', root)}>\n <InputBase\n {...props}\n {...field}\n ref={mergeRefs(ref, field.ref)}\n classes={restClasses}\n invalid={invalid}\n attachmentProps={{\n invalid,\n isTouched,\n withValidateIcons: true,\n ...props.attachmentProps\n }}\n data-error-message={error?.message}\n />\n <MessageView\n text={error?.message || helperText}\n className={message}\n intent={error ? 'error' : 'simple'}\n disabled={disabled}\n />\n </div>\n )\n}\n"],"names":["DLGAFieldEvent","type","options","InputControl","control","name","defaultValue","disabled","rules","shouldUnregister","helperText","classes","props","ref","useRef","field","fieldState","useController","error","invalid","isTouched","message","root","restClasses","useEffect","cn","jsx","InputBase","mergeRefs","MessageView"],"mappings":"ymDAgCA,MAAMA,UAAqC,WAAe,CACxD,YAAYC,EAAcC,EAAkE,CAC1F,MAAMD,EAAMC,CAAO,CACrB,CACF,CAEO,MAAMC,GAAe,CAAiD,CAC3E,QAAAC,EACA,KAAAC,EACA,aAAAC,EACA,SAAAC,EACA,MAAAC,EACA,iBAAAC,EACA,WAAAC,EACA,QAAAC,EACA,GAAGC,CACL,IAAuC,CACrC,MAAMC,EAAMC,EAAyB,IAAI,EACnC,CAAE,MAAAC,EAAO,WAAAC,CAAA,EAAeC,EAAc,CAC1C,QAAAb,EACA,KAAAC,EACA,aAAAC,EACA,SAAAC,EACA,MAAAC,EACA,iBAAAC,CAAA,CACD,EAEK,CAAE,MAAAS,EAAO,QAAAC,EAAS,UAAAC,CAAA,EAAcJ,EAChC,CAAE,QAAAK,EAAS,KAAAC,EAAM,GAAGC,CAAA,EAAgBZ,GAAW,CAAA,EAErD,OAAAa,EAAU,IAAM,CACTX,EAAI,UAELM,GACFN,EAAI,QAAQ,cAAc,IAAIb,EAAe,eAAgB,CAAE,OAAQkB,CAAA,CAAO,CAAC,EAE5EC,GACHN,EAAI,QAAQ,cAAc,IAAIb,EAAe,gBAAiB,CAAE,OAAQkB,CAAA,CAAO,CAAC,EAEpF,EAAG,CAACC,CAAO,CAAC,IAGT,MAAA,CAAI,UAAWM,EAAG,SAAUH,CAAI,EAC/B,SAAA,CAAAI,EAACC,EAAA,CACE,GAAGf,EACH,GAAGG,EACJ,IAAKa,EAAUf,EAAKE,EAAM,GAAG,EAC7B,QAASQ,EACT,QAAAJ,EACA,gBAAiB,CACf,QAAAA,EACA,UAAAC,EACA,kBAAmB,GACnB,GAAGR,EAAM,eAAA,EAEX,qBAAoBM,GAAA,YAAAA,EAAO,OAAA,CAAA,EAE7BQ,EAACG,EAAA,CACC,MAAMX,GAAA,YAAAA,EAAO,UAAWR,EACxB,UAAWW,EACX,OAAQH,EAAQ,QAAU,SAC1B,SAAAX,CAAA,CAAA,CACF,EACF,CAEJ"}
@@ -1,2 +1,2 @@
1
- import{jsxs as Q,jsx as m}from"react/jsx-runtime";import{forwardRef as V}from"react";import{useFloating as W}from"../../../../../../node_modules/@floating-ui/react/dist/floating-ui.react.js";import{cn as u}from"../../../../utils/cn.js";import"react-hook-form";import{useClickOutsideMany as X}from"../../../../hooks/useClickOutsideMany.js";import{useCombobox as Y}from"./hooks/useCombobox.js";import{useKeyboardNavigation as Z}from"./hooks/useKeyboardNavigation.js";import"../../../button/Button.js";import"../../../buttonIcon/ButtonIcon.js";import"../../../calendar/Calendar.js";import"../../../calendar/model/utils.js";import"../../../accordion/Accordion.js";import"react-dom";import"../../../modal/ui/IframeModalContent.js";import"../../../../../../node_modules/react-hot-toast/dist/index.js";import{Icon as _}from"../../../icon/Icon.js";import"../../../table/ui/primitives/Primitives.js";import"../../../carousel/ui/CarouselContent.js";import"../../../slot/Slot.js";import"../autocomplete/Autocomplete.js";import"../checkbox/Checkbox.js";import"../dayPicker/DayPicker.js";import{InputBase as $}from"../input/Input.js";import"../inputOtp/InputOtpBase.js";import"../maskInput/MaskInput.js";import"../radio/RadioGroup.js";import"../radio/ui/RadioItem.js";import"../slider/SliderBase.js";import"../switch/Switch.js";import"../textarea/Textarea.js";import"../uploader/UploaderBase.js";import"../inputCurrency/InputCurrency.js";import"../../../../../../src/configs/api.js";import"../../controlled/editor/ui/Editor.js";import"../../controlled/input/MaskInputControl.js";import"../../../dropdownList/ui/dropdownItem/DropdownItem.js";import{DropdownList as x}from"../../../dropdownList/DropdownList.js";import{Portal as l}from"../../../portal/Portal.js";import{AnimatePresence as H}from"../../../../../../node_modules/framer-motion/dist/es/components/AnimatePresence/index.js";import{motion as oo}from"../../../../../../node_modules/framer-motion/dist/es/render/components/motion/proxy.js";import{autoUpdate as to}from"../../../../../../node_modules/@floating-ui/dom/dist/floating-ui.dom.js";import{flip as io,offset as ro}from"../../../../../../node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.js";const mo=({options:R,multiple:g,value:f,onChange:k,defaultOpen:v,attachmentProps:s,searchable:n,invalid:h,displayValue:y,label:L,disabled:a,readOnly:b,className:N,externalHandlers:o,inputValue:d,filterDisabled:P,onInputChange:A,empty:B,classes:t,portal:D=globalThis?(M=>(M=globalThis==null?void 0:globalThis.document)==null?void 0:M.body)():void 0,...c},F)=>{var I;const O=c["data-error-message"],{floating:T,...j}=(t==null?void 0:t.list)??{},{refs:i,floatingStyles:z}=W({placement:"bottom-start",strategy:"absolute",middleware:[io({boundary:"clippingAncestors",crossAxis:!1}),ro(4)],whileElementsMounted:to}),{open:C,setOpen:p,state:E,changeHandler:K,options:S,search:U,onInputChange:q,comboboxDisplayValue:w}=Y({multiple:g,value:f,onChange:k,searchable:n,defaultOpen:v,displayValue:y,initialOptions:R,filterDisabled:P,externalHandlers:o,externalInputValue:d,externalOnInputChange:A});Z({ref:i.domReference,openChangeHandler:p});const G=()=>f?g&&n?w(f):n?U:w(f):"";X([i.floating,i.reference],()=>p(!1));const J=D??i.domReference.current;return Q("div",{ref:i.setReference,className:u("relative w-full",t==null?void 0:t.root,N),children:[m($,{onKeyDown:r=>{r.key==="Tab"&&p(!1)},ref:F,label:L,invalid:h,readOnly:b||!n,value:d||G(),onChange:q,disabled:a,onClick:r=>{var e;C||p(!0),(e=o==null?void 0:o.clickHandler)==null||e.call(o,r)},onBlur:r=>{var e;(e=o==null?void 0:o.blurHandler)==null||e.call(o,r)},onFocus:o==null?void 0:o.focusHandler,classes:{input:u({"cursor-pointer":!n,"cursor-default":a,"pointer-events-none":a||b}),...t==null?void 0:t.input},autoComplete:"off",attachmentProps:{icon:m(_,{name:"arrows/arrowRight",className:u("size-6 rotate-90 text-color-blue-grey-600 duration-100",{"-rotate-90":C,"text-color-negative":h})}),onClickIcon:()=>p(r=>!r),...s},"data-test-id":"combobox-input","data-error-message":O,dataLayers:c==null?void 0:c.dataLayers}),m(l,{root:J,children:m(H,{children:C&&m(oo.div,{ref:i.setFloating,initial:{opacity:0},animate:{opacity:1},transition:{duration:.1},className:u("z-[1000]",T),style:{...z,width:(I=i.reference.current)==null?void 0:I.getBoundingClientRect().width},children:m(x,{empty:B,options:S,multiple:g,onPick:K,value:E,displayValue:y,classes:j,target:i.domReference})})})})]})},_o=V(mo);export{_o as Combobox};
1
+ import{jsxs as Q,jsx as m}from"react/jsx-runtime";import{forwardRef as V}from"react";import{useFloating as W}from"../../../../../../node_modules/@floating-ui/react/dist/floating-ui.react.js";import{cn as u}from"../../../../utils/cn.js";import"react-hook-form";import{useClickOutsideMany as X}from"../../../../hooks/useClickOutsideMany.js";import{useCombobox as Y}from"./hooks/useCombobox.js";import{useKeyboardNavigation as Z}from"./hooks/useKeyboardNavigation.js";import"../../../button/Button.js";import"../../../buttonIcon/ButtonIcon.js";import"../../../calendar/Calendar.js";import"../../../calendar/model/utils.js";import"../../../accordion/Accordion.js";import"react-dom";import"../../../modal/ui/IframeModalContent.js";import"../../../../../../node_modules/react-hot-toast/dist/index.js";import{Icon as _}from"../../../icon/Icon.js";import"../../../table/ui/primitives/Primitives.js";import"../../../carousel/ui/CarouselContent.js";import"../../../slot/Slot.js";import"../autocomplete/Autocomplete.js";import"../checkbox/Checkbox.js";import"../dayPicker/DayPicker.js";import{InputBase as $}from"../input/Input.js";import"../inputOtp/InputOtpBase.js";import"../maskInput/MaskInput.js";import"../radio/RadioGroup.js";import"../radio/ui/RadioItem.js";import"../slider/SliderBase.js";import"../switch/Switch.js";import"../textarea/Textarea.js";import"../uploader/UploaderBase.js";import"../inputCurrency/InputCurrency.js";import"../../../../../../src/configs/api.js";import"../../controlled/editor/ui/Editor.js";import"../../controlled/input/MaskInputControl.js";import"../../../dropdownList/ui/dropdownItem/DropdownItem.js";import{DropdownList as x}from"../../../dropdownList/DropdownList.js";import{Portal as l}from"../../../portal/Portal.js";import{AnimatePresence as H}from"../../../../../../node_modules/framer-motion/dist/es/components/AnimatePresence/index.js";import{motion as oo}from"../../../../../../node_modules/framer-motion/dist/es/render/components/motion/proxy.js";import{autoUpdate as to}from"../../../../../../node_modules/@floating-ui/dom/dist/floating-ui.dom.js";import{flip as io,offset as ro}from"../../../../../../node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.js";const mo=({options:R,multiple:g,value:f,onChange:k,defaultOpen:v,attachmentProps:L,searchable:n,invalid:h,displayValue:y,label:N,disabled:a,readOnly:b,className:P,externalHandlers:o,inputValue:d,filterDisabled:s,onInputChange:A,empty:B,classes:t,portal:D=globalThis?(M=>(M=globalThis==null?void 0:globalThis.document)==null?void 0:M.body)():void 0,...c},F)=>{var I;const O=c["data-error-message"],{floating:T,...j}=(t==null?void 0:t.list)??{},{refs:i,floatingStyles:z}=W({placement:"bottom-start",strategy:"absolute",middleware:[io({boundary:"clippingAncestors",crossAxis:!1}),ro(4)],whileElementsMounted:to}),{open:C,setOpen:p,state:E,changeHandler:K,options:S,search:U,onInputChange:q,comboboxDisplayValue:w}=Y({multiple:g,value:f,onChange:k,searchable:n,defaultOpen:v,displayValue:y,initialOptions:R,filterDisabled:s,externalHandlers:o,externalInputValue:d,externalOnInputChange:A});Z({ref:i.domReference,openChangeHandler:p});const G=()=>f?g&&n?w(f):n?U:w(f):"";X([i.floating,i.reference],()=>p(!1));const J=D??i.domReference.current;return Q("div",{ref:i.setReference,className:u("relative w-full",t==null?void 0:t.root,P),children:[m($,{onKeyDown:r=>{r.key==="Tab"&&p(!1)},ref:F,label:N,invalid:h,readOnly:b||!n,value:d||G(),onChange:q,disabled:a,onClick:r=>{var e;C||p(!0),(e=o==null?void 0:o.clickHandler)==null||e.call(o,r)},onBlur:r=>{var e;(e=o==null?void 0:o.blurHandler)==null||e.call(o,r)},onFocus:o==null?void 0:o.focusHandler,classes:{input:u({"cursor-pointer":!n,"cursor-default":a,"pointer-events-none":a||b}),...t==null?void 0:t.input},autoComplete:"off",attachmentProps:{icon:m(_,{name:"arrows/arrowRight",className:u("size-6 rotate-90 text-color-blue-grey-600 duration-100",{"-rotate-90":C,"text-color-negative":h})}),onClickIcon:()=>p(r=>!r),...L},"data-id":"combobox-input","data-error-message":O,dataLayers:c==null?void 0:c.dataLayers}),m(l,{root:J,children:m(H,{children:C&&m(oo.div,{ref:i.setFloating,initial:{opacity:0},animate:{opacity:1},transition:{duration:.1},className:u("z-[1000]",T),style:{...z,width:(I=i.reference.current)==null?void 0:I.getBoundingClientRect().width},children:m(x,{empty:B,options:S,multiple:g,onPick:K,value:E,displayValue:y,classes:j,target:i.domReference})})})})]})},_o=V(mo);export{_o as Combobox};
2
2
  //# sourceMappingURL=combobox.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"combobox.js","sources":["../../../../../../../lib/shared/ui/formElements/uncontrolled/combobox/combobox.tsx"],"sourcesContent":["import { type ForwardedRef, forwardRef } from 'react'\nimport { autoUpdate, flip, offset, useFloating } from '@floating-ui/react'\nimport { AnimatePresence, motion } from 'framer-motion'\nimport { useClickOutsideMany } from '../../../../hooks'\nimport { useCombobox, useKeyboardNavigation } from './hooks'\nimport type { ChangeHandler, ComboboxValue } from './model'\nimport type { ComboboxItemOption } from './ui'\nimport { type DataLayers, type DeepPartial } from '$/shared/types'\nimport { DropdownList, Icon, InputBase, type InputBaseProps, Portal } from '$/shared/ui'\nimport { type DropdownListClasses, type DropdownListProps } from '$/shared/ui/dropdownList'\nimport { type IFieldAttachmentProps } from '$/shared/ui/formElements/ui'\nimport { cn } from '$/shared/utils'\n\nexport type ComboboxClasses = {\n root?: string\n list?: { floating?: string } & DropdownListClasses\n input?: InputBaseProps['classes']\n}\n\nexport type ExternalHandlers<Multi extends boolean> = {\n changeHandler?: ChangeHandler<Multi>\n clickHandler?: (event: React.MouseEvent<HTMLElement>) => void\n blurHandler?: (event: React.FocusEvent<HTMLElement>) => void\n focusHandler?: (event: React.FocusEvent<HTMLElement>) => void\n inputChangeHandler?: (value: string) => void\n onKeyDown?: (value: React.KeyboardEventHandler<HTMLInputElement>) => void\n}\n\nexport interface ComboboxProps<Multi extends boolean>\n extends Omit<DropdownListProps<Multi>, 'options' | 'value' | 'onChange'>,\n Record<`data-${string}`, unknown> {\n /**\n * Список опций\n */\n options: ComboboxItemOption[]\n /**\n * Выбранное значение\n */\n value?: ComboboxValue<Multi>\n /**\n * Функция для изменения значения\n */\n onChange?: ChangeHandler<Multi>\n /**\n * Свойство управляющее поиском\n */\n searchable?: boolean\n /**\n * Открыть список по умолчанию\n */\n defaultOpen?: boolean\n /**\n * Свойства дополнительной иконки\n */\n attachmentProps?: DeepPartial<IFieldAttachmentProps>\n /**\n * Пометить поле как не валидное\n */\n invalid?: boolean\n /**\n * Функция для управления отображаемым значением\n */\n displayValue?: (option: ComboboxItemOption) => string\n /**\n * Отображаемый лейбл\n */\n label: string\n /**\n * Выключено поле\n */\n disabled?: boolean\n /**\n * Только для чтения\n */\n readOnly?: boolean\n /**\n * Дополнительные стили\n */\n classes?: ComboboxClasses\n /**\n * Дополнительные события\n */\n externalHandlers?: ExternalHandlers<Multi>\n /**\n * Функция для изменения значения поиска\n */\n onInputChange?: (value: string) => void\n /**\n * Значение инпута\n */\n inputValue?: string\n /**\n * Выключить фильтрацию списка\n */\n filterDisabled?: boolean\n /**\n * Включить рендеринг в портале\n * @property {false | HTMLElement} portal document.body\n */\n portal?: false | HTMLElement\n /**\n * Обработка ошибок для даталееров\n */\n ['data-error-message']?: string\n /**\n * Даталееры\n */\n dataLayers?: DataLayers\n}\n\nconst InnerComponent = <Multi extends boolean>(\n {\n options: initialOptions,\n multiple,\n value,\n onChange,\n defaultOpen,\n attachmentProps,\n searchable,\n invalid,\n displayValue,\n label,\n disabled,\n readOnly,\n className,\n externalHandlers,\n inputValue,\n filterDisabled,\n onInputChange: externalInputChangeHandler,\n empty,\n classes,\n portal = globalThis ? globalThis?.document?.body : undefined,\n ...props\n }: ComboboxProps<Multi>,\n ref: ForwardedRef<HTMLInputElement>\n) => {\n const dataErrorMessage = props['data-error-message']\n\n const { floating, ...dropdownClasses } = classes?.list ?? {}\n\n const { refs, floatingStyles } = useFloating<HTMLDivElement>({\n placement: 'bottom-start',\n strategy: 'absolute',\n middleware: [\n flip({\n boundary: 'clippingAncestors',\n crossAxis: false\n }),\n offset(4)\n ],\n whileElementsMounted: autoUpdate\n })\n\n const { open, setOpen, state, changeHandler, options, search, onInputChange, comboboxDisplayValue } = useCombobox({\n multiple,\n value,\n onChange,\n searchable,\n defaultOpen,\n displayValue,\n initialOptions,\n filterDisabled,\n externalHandlers,\n externalInputValue: inputValue,\n externalOnInputChange: externalInputChangeHandler\n })\n\n useKeyboardNavigation({ ref: refs.domReference, openChangeHandler: setOpen })\n\n const getLabel = () => {\n if (!value) return ''\n\n if (multiple && searchable) {\n return comboboxDisplayValue(value)\n } else if (searchable) {\n return search\n } else {\n return comboboxDisplayValue(value)\n }\n }\n\n useClickOutsideMany([refs.floating, refs.reference as React.MutableRefObject<HTMLElement | null>], () => setOpen(false))\n\n const portalContainer = portal ?? refs.domReference.current!\n\n return (\n <div ref={refs.setReference} className={cn('relative w-full', classes?.root, className)}>\n <InputBase\n onKeyDown={(event) => {\n if (event.key === 'Tab') {\n setOpen(false)\n }\n }}\n ref={ref}\n label={label}\n invalid={invalid}\n readOnly={readOnly || !searchable}\n value={inputValue || getLabel()}\n onChange={onInputChange}\n disabled={disabled}\n onClick={(event) => {\n if (!open) setOpen(true)\n externalHandlers?.clickHandler?.(event)\n }}\n onBlur={(event) => {\n externalHandlers?.blurHandler?.(event)\n }}\n onFocus={externalHandlers?.focusHandler}\n classes={{\n input: cn({\n 'cursor-pointer': !searchable,\n 'cursor-default': disabled,\n 'pointer-events-none': disabled || readOnly\n }),\n ...classes?.input\n }}\n autoComplete='off'\n attachmentProps={{\n icon: (\n <Icon\n name='arrows/arrowRight'\n className={cn('size-6 rotate-90 text-color-blue-grey-600 duration-100', {\n '-rotate-90': open,\n 'text-color-negative': invalid\n })}\n />\n ),\n onClickIcon: () => setOpen((prev) => !prev),\n ...attachmentProps\n }}\n data-test-id='combobox-input'\n data-error-message={dataErrorMessage}\n dataLayers={props?.dataLayers}\n />\n\n <Portal root={portalContainer}>\n <AnimatePresence>\n {open && (\n <motion.div\n ref={refs.setFloating}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n transition={{ duration: 0.1 }}\n className={cn('z-[1000]', floating)}\n style={{\n ...floatingStyles,\n width: refs.reference.current?.getBoundingClientRect().width\n }}\n >\n <DropdownList\n empty={empty}\n options={options}\n multiple={multiple}\n onPick={changeHandler}\n value={state}\n displayValue={displayValue}\n classes={dropdownClasses}\n target={refs.domReference}\n />\n </motion.div>\n )}\n </AnimatePresence>\n </Portal>\n </div>\n )\n}\n\nexport const Combobox = forwardRef(InnerComponent) as <Multi extends boolean>(\n props: ComboboxProps<Multi> & { ref?: ForwardedRef<HTMLInputElement> }\n) => React.JSX.Element\n"],"names":["InnerComponent","initialOptions","multiple","value","onChange","defaultOpen","attachmentProps","searchable","invalid","displayValue","label","disabled","readOnly","className","externalHandlers","inputValue","filterDisabled","externalInputChangeHandler","empty","classes","portal","_a","props","ref","dataErrorMessage","floating","dropdownClasses","refs","floatingStyles","useFloating","flip","offset","autoUpdate","open","setOpen","state","changeHandler","options","search","onInputChange","comboboxDisplayValue","useCombobox","useKeyboardNavigation","getLabel","useClickOutsideMany","portalContainer","jsxs","cn","jsx","InputBase","event","Icon","prev","Portal","AnimatePresence","motion","DropdownList","Combobox","forwardRef"],"mappings":"+pEA8GA,MAAMA,GAAiB,CACrB,CACE,QAASC,EACT,SAAAC,EACA,MAAAC,EACA,SAAAC,EACA,YAAAC,EACA,gBAAAC,EACA,WAAAC,EACA,QAAAC,EACA,aAAAC,EACA,MAAAC,EACA,SAAAC,EACA,SAAAC,EACA,UAAAC,EACA,iBAAAC,EACA,WAAAC,EACA,eAAAC,EACA,cAAeC,EACf,MAAAC,EACA,QAAAC,EACA,OAAAC,EAAS,YAAaC,MAAA,mCAAY,WAAZ,YAAAA,EAAsB,QAAO,OACnD,GAAGC,CACL,EACAC,IACG,OACH,MAAMC,EAAmBF,EAAM,oBAAoB,EAE7C,CAAE,SAAAG,EAAU,GAAGC,IAAoBP,GAAA,YAAAA,EAAS,OAAQ,CAAA,EAEpD,CAAE,KAAAQ,EAAM,eAAAC,CAAA,EAAmBC,EAA4B,CAC3D,UAAW,eACX,SAAU,WACV,WAAY,CACVC,GAAK,CACH,SAAU,oBACV,UAAW,EAAA,CACZ,EACDC,GAAO,CAAC,CAAA,EAEV,qBAAsBC,EAAA,CACvB,EAEK,CAAE,KAAAC,EAAM,QAAAC,EAAS,MAAAC,EAAO,cAAAC,EAAe,QAAAC,EAAS,OAAAC,EAAQ,cAAAC,EAAe,qBAAAC,CAAA,EAAyBC,EAAY,CAChH,SAAAvC,EACA,MAAAC,EACA,SAAAC,EACA,WAAAG,EACA,YAAAF,EACA,aAAAI,EACA,eAAAR,EACA,eAAAe,EACA,iBAAAF,EACA,mBAAoBC,EACpB,sBAAuBE,CAAA,CACxB,EAEDyB,EAAsB,CAAE,IAAKf,EAAK,aAAc,kBAAmBO,EAAS,EAE5E,MAAMS,EAAW,IACVxC,EAEDD,GAAYK,EACPiC,EAAqBrC,CAAK,EACxBI,EACF+B,EAEAE,EAAqBrC,CAAK,EAPhB,GAWrByC,EAAoB,CAACjB,EAAK,SAAUA,EAAK,SAAuD,EAAG,IAAMO,EAAQ,EAAK,CAAC,EAEvH,MAAMW,EAAkBzB,GAAUO,EAAK,aAAa,QAEpD,OACEmB,EAAC,MAAA,CAAI,IAAKnB,EAAK,aAAc,UAAWoB,EAAG,kBAAmB5B,GAAA,YAAAA,EAAS,KAAMN,CAAS,EACpF,SAAA,CAAAmC,EAACC,EAAA,CACC,UAAYC,GAAU,CAChBA,EAAM,MAAQ,OAChBhB,EAAQ,EAAK,CAEjB,EACA,IAAAX,EACA,MAAAb,EACA,QAAAF,EACA,SAAUI,GAAY,CAACL,EACvB,MAAOQ,GAAc4B,EAAA,EACrB,SAAUJ,EACV,SAAA5B,EACA,QAAUuC,GAAU,OACbjB,GAAMC,EAAQ,EAAI,GACvBb,EAAAP,GAAA,YAAAA,EAAkB,eAAlB,MAAAO,EAAA,KAAAP,EAAiCoC,EACnC,EACA,OAASA,GAAU,QACjB7B,EAAAP,GAAA,YAAAA,EAAkB,cAAlB,MAAAO,EAAA,KAAAP,EAAgCoC,EAClC,EACA,QAASpC,GAAA,YAAAA,EAAkB,aAC3B,QAAS,CACP,MAAOiC,EAAG,CACR,iBAAkB,CAACxC,EACnB,iBAAkBI,EAClB,sBAAuBA,GAAYC,CAAA,CACpC,EACD,GAAGO,GAAA,YAAAA,EAAS,KAAA,EAEd,aAAa,MACb,gBAAiB,CACf,KACE6B,EAACG,EAAA,CACC,KAAK,oBACL,UAAWJ,EAAG,yDAA0D,CACtE,aAAcd,EACd,sBAAuBzB,CAAA,CACxB,CAAA,CAAA,EAGL,YAAa,IAAM0B,EAASkB,GAAS,CAACA,CAAI,EAC1C,GAAG9C,CAAA,EAEL,eAAa,iBACb,qBAAoBkB,EACpB,WAAYF,GAAA,YAAAA,EAAO,UAAA,CAAA,IAGpB+B,EAAA,CAAO,KAAMR,EACZ,SAAAG,EAACM,GACE,SAAArB,GACCe,EAACO,GAAO,IAAP,CACC,IAAK5B,EAAK,YACV,QAAS,CAAE,QAAS,CAAA,EACpB,QAAS,CAAE,QAAS,CAAA,EACpB,WAAY,CAAE,SAAU,EAAA,EACxB,UAAWoB,EAAG,WAAYtB,CAAQ,EAClC,MAAO,CACL,GAAGG,EACH,OAAOP,EAAAM,EAAK,UAAU,UAAf,YAAAN,EAAwB,wBAAwB,KAAA,EAGzD,SAAA2B,EAACQ,EAAA,CACC,MAAAtC,EACA,QAAAmB,EACA,SAAAnC,EACA,OAAQkC,EACR,MAAOD,EACP,aAAA1B,EACA,QAASiB,EACT,OAAQC,EAAK,YAAA,CAAA,CACf,CAAA,EAGN,CAAA,CACF,CAAA,EACF,CAEJ,EAEa8B,GAAWC,EAAW1D,EAAc"}
1
+ {"version":3,"file":"combobox.js","sources":["../../../../../../../lib/shared/ui/formElements/uncontrolled/combobox/combobox.tsx"],"sourcesContent":["import { type ForwardedRef, forwardRef } from 'react'\nimport { autoUpdate, flip, offset, useFloating } from '@floating-ui/react'\nimport { AnimatePresence, motion } from 'framer-motion'\nimport { useClickOutsideMany } from '../../../../hooks'\nimport { useCombobox, useKeyboardNavigation } from './hooks'\nimport type { ChangeHandler, ComboboxValue } from './model'\nimport type { ComboboxItemOption } from './ui'\nimport { type DataLayers, type DeepPartial } from '$/shared/types'\nimport { DropdownList, Icon, InputBase, type InputBaseProps, Portal } from '$/shared/ui'\nimport { type DropdownListClasses, type DropdownListProps } from '$/shared/ui/dropdownList'\nimport { type IFieldAttachmentProps } from '$/shared/ui/formElements/ui'\nimport { cn } from '$/shared/utils'\n\nexport type ComboboxClasses = {\n root?: string\n list?: { floating?: string } & DropdownListClasses\n input?: InputBaseProps['classes']\n}\n\nexport type ExternalHandlers<Multi extends boolean> = {\n changeHandler?: ChangeHandler<Multi>\n clickHandler?: (event: React.MouseEvent<HTMLElement>) => void\n blurHandler?: (event: React.FocusEvent<HTMLElement>) => void\n focusHandler?: (event: React.FocusEvent<HTMLElement>) => void\n inputChangeHandler?: (value: string) => void\n onKeyDown?: (value: React.KeyboardEventHandler<HTMLInputElement>) => void\n}\n\nexport interface ComboboxProps<Multi extends boolean>\n extends Omit<DropdownListProps<Multi>, 'options' | 'value' | 'onChange'>,\n Record<`data-${string}`, unknown> {\n /**\n * Список опций\n */\n options: ComboboxItemOption[]\n /**\n * Выбранное значение\n */\n value?: ComboboxValue<Multi>\n /**\n * Функция для изменения значения\n */\n onChange?: ChangeHandler<Multi>\n /**\n * Свойство управляющее поиском\n */\n searchable?: boolean\n /**\n * Открыть список по умолчанию\n */\n defaultOpen?: boolean\n /**\n * Свойства дополнительной иконки\n */\n attachmentProps?: DeepPartial<IFieldAttachmentProps>\n /**\n * Пометить поле как не валидное\n */\n invalid?: boolean\n /**\n * Функция для управления отображаемым значением\n */\n displayValue?: (option: ComboboxItemOption) => string\n /**\n * Отображаемый лейбл\n */\n label: string\n /**\n * Выключено поле\n */\n disabled?: boolean\n /**\n * Только для чтения\n */\n readOnly?: boolean\n /**\n * Дополнительные стили\n */\n classes?: ComboboxClasses\n /**\n * Дополнительные события\n */\n externalHandlers?: ExternalHandlers<Multi>\n /**\n * Функция для изменения значения поиска\n */\n onInputChange?: (value: string) => void\n /**\n * Значение инпута\n */\n inputValue?: string\n /**\n * Выключить фильтрацию списка\n */\n filterDisabled?: boolean\n /**\n * Включить рендеринг в портале\n * @property {false | HTMLElement} portal document.body\n */\n portal?: false | HTMLElement\n /**\n * Обработка ошибок для даталееров\n */\n ['data-error-message']?: string\n /**\n * Даталееры\n */\n dataLayers?: DataLayers\n}\n\nconst InnerComponent = <Multi extends boolean>(\n {\n options: initialOptions,\n multiple,\n value,\n onChange,\n defaultOpen,\n attachmentProps,\n searchable,\n invalid,\n displayValue,\n label,\n disabled,\n readOnly,\n className,\n externalHandlers,\n inputValue,\n filterDisabled,\n onInputChange: externalInputChangeHandler,\n empty,\n classes,\n portal = globalThis ? globalThis?.document?.body : undefined,\n ...props\n }: ComboboxProps<Multi>,\n ref: ForwardedRef<HTMLInputElement>\n) => {\n const dataErrorMessage = props['data-error-message']\n\n const { floating, ...dropdownClasses } = classes?.list ?? {}\n\n const { refs, floatingStyles } = useFloating<HTMLDivElement>({\n placement: 'bottom-start',\n strategy: 'absolute',\n middleware: [\n flip({\n boundary: 'clippingAncestors',\n crossAxis: false\n }),\n offset(4)\n ],\n whileElementsMounted: autoUpdate\n })\n\n const { open, setOpen, state, changeHandler, options, search, onInputChange, comboboxDisplayValue } = useCombobox({\n multiple,\n value,\n onChange,\n searchable,\n defaultOpen,\n displayValue,\n initialOptions,\n filterDisabled,\n externalHandlers,\n externalInputValue: inputValue,\n externalOnInputChange: externalInputChangeHandler\n })\n\n useKeyboardNavigation({ ref: refs.domReference, openChangeHandler: setOpen })\n\n const getLabel = () => {\n if (!value) return ''\n\n if (multiple && searchable) {\n return comboboxDisplayValue(value)\n } else if (searchable) {\n return search\n } else {\n return comboboxDisplayValue(value)\n }\n }\n\n useClickOutsideMany([refs.floating, refs.reference as React.MutableRefObject<HTMLElement | null>], () => setOpen(false))\n\n const portalContainer = portal ?? refs.domReference.current!\n\n return (\n <div ref={refs.setReference} className={cn('relative w-full', classes?.root, className)}>\n <InputBase\n onKeyDown={(event) => {\n if (event.key === 'Tab') {\n setOpen(false)\n }\n }}\n ref={ref}\n label={label}\n invalid={invalid}\n readOnly={readOnly || !searchable}\n value={inputValue || getLabel()}\n onChange={onInputChange}\n disabled={disabled}\n onClick={(event) => {\n if (!open) setOpen(true)\n externalHandlers?.clickHandler?.(event)\n }}\n onBlur={(event) => {\n externalHandlers?.blurHandler?.(event)\n }}\n onFocus={externalHandlers?.focusHandler}\n classes={{\n input: cn({\n 'cursor-pointer': !searchable,\n 'cursor-default': disabled,\n 'pointer-events-none': disabled || readOnly\n }),\n ...classes?.input\n }}\n autoComplete='off'\n attachmentProps={{\n icon: (\n <Icon\n name='arrows/arrowRight'\n className={cn('size-6 rotate-90 text-color-blue-grey-600 duration-100', {\n '-rotate-90': open,\n 'text-color-negative': invalid\n })}\n />\n ),\n onClickIcon: () => setOpen((prev) => !prev),\n ...attachmentProps\n }}\n data-id='combobox-input'\n data-error-message={dataErrorMessage}\n dataLayers={props?.dataLayers}\n />\n\n <Portal root={portalContainer}>\n <AnimatePresence>\n {open && (\n <motion.div\n ref={refs.setFloating}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n transition={{ duration: 0.1 }}\n className={cn('z-[1000]', floating)}\n style={{\n ...floatingStyles,\n width: refs.reference.current?.getBoundingClientRect().width\n }}\n >\n <DropdownList\n empty={empty}\n options={options}\n multiple={multiple}\n onPick={changeHandler}\n value={state}\n displayValue={displayValue}\n classes={dropdownClasses}\n target={refs.domReference}\n />\n </motion.div>\n )}\n </AnimatePresence>\n </Portal>\n </div>\n )\n}\n\nexport const Combobox = forwardRef(InnerComponent) as <Multi extends boolean>(\n props: ComboboxProps<Multi> & { ref?: ForwardedRef<HTMLInputElement> }\n) => React.JSX.Element\n"],"names":["InnerComponent","initialOptions","multiple","value","onChange","defaultOpen","attachmentProps","searchable","invalid","displayValue","label","disabled","readOnly","className","externalHandlers","inputValue","filterDisabled","externalInputChangeHandler","empty","classes","portal","_a","props","ref","dataErrorMessage","floating","dropdownClasses","refs","floatingStyles","useFloating","flip","offset","autoUpdate","open","setOpen","state","changeHandler","options","search","onInputChange","comboboxDisplayValue","useCombobox","useKeyboardNavigation","getLabel","useClickOutsideMany","portalContainer","jsxs","cn","jsx","InputBase","event","Icon","prev","Portal","AnimatePresence","motion","DropdownList","Combobox","forwardRef"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{jsxs as y,jsx as t}from"react/jsx-runtime";import{forwardRef as k,useId as B}from"react";import{FieldAttachment as _}from"../../ui/fieldAttachment/FieldAttachment.js";import{cn as o}from"../../../../utils/cn.js";const C=k(({label:e,value:p,invalid:a,disabled:d,classes:r,renderValues:n,attachmentProps:u,externalHandlers:h,onChange:x,dataLayers:l,...i},c)=>{const b=B(),{onChange:f,...m}=h||{},w=g=>{x&&x(g),f&&f(g)};return y("div",{className:o("relative flex w-full gap-x-4 rounded-sm bg-color-blue-grey-100","[&_label]:focus-within:top-[9px] [&_label]:focus-within:translate-y-0","[&_label]:focus-within:desk-body-regular-s","hover:bg-color-blue-grey-200","border-[1px] border-transparent focus-within:border-blue-grey-800",{"border-secondary-default":a},r==null?void 0:r.container),"data-test-id":"input-root",children:[n?t("div",{onClick:i.onClick,onBlur:i.onBlur,className:o("peer desk-body-regular-l min-h-[54px] w-full bg-color-transparent [&_input]:px-4 [&_input]:pb-[6px] [&_input]:pt-[28px]","text-color-dark outline-none placeholder:text-color-transparent","flex flex-row flex-wrap gap-2",r==null?void 0:r.renderWrapper),children:n()}):t("input",{...i,...m,onChange:w,disabled:d,"data-layer-id":l==null?void 0:l.targetId,value:p??"",placeholder:e,"aria-placeholder":e,"aria-invalid":a,ref:c,id:b,className:o("peer desk-body-regular-l w-full bg-color-transparent px-4 pb-[9px] pt-[25px]","text-color-dark outline-none placeholder:text-color-transparent",{hidden:!!n},r==null?void 0:r.input)}),t("label",{htmlFor:b,className:o("desk-body-regular-l pointer-events-none absolute left-4 w-[80%] truncate text-start","top-1/2 -translate-y-1/2 text-color-tetriary duration-100",{"desk-body-regular-s top-[9px] translate-y-0":!!p,"text-color-disabled":d},r==null?void 0:r.label),children:e}),u&&t(_,{...u})]})});C.displayName="InputBase";export{C as InputBase};
1
+ import{jsxs as y,jsx as o}from"react/jsx-runtime";import{forwardRef as k,useId as B}from"react";import{FieldAttachment as _}from"../../ui/fieldAttachment/FieldAttachment.js";import{cn as t}from"../../../../utils/cn.js";const C=k(({label:e,value:p,invalid:a,disabled:d,classes:r,renderValues:n,attachmentProps:u,externalHandlers:h,onChange:x,dataLayers:l,...i},c)=>{const b=B(),{onChange:f,...m}=h||{},w=g=>{x&&x(g),f&&f(g)};return y("div",{className:t("relative flex w-full gap-x-4 rounded-sm bg-color-blue-grey-100","[&_label]:focus-within:top-[9px] [&_label]:focus-within:translate-y-0","[&_label]:focus-within:desk-body-regular-s","hover:bg-color-blue-grey-200","border-[1px] border-transparent focus-within:border-blue-grey-800",{"border-secondary-default":a},r==null?void 0:r.container),"data-id":"input-root",children:[n?o("div",{onClick:i.onClick,onBlur:i.onBlur,className:t("peer desk-body-regular-l min-h-[54px] w-full bg-color-transparent [&_input]:px-4 [&_input]:pb-[6px] [&_input]:pt-[28px]","text-color-dark outline-none placeholder:text-color-transparent","flex flex-row flex-wrap gap-2",r==null?void 0:r.renderWrapper),children:n()}):o("input",{...i,...m,onChange:w,disabled:d,"data-layer-id":l==null?void 0:l.targetId,value:p??"",placeholder:e,"aria-placeholder":e,"aria-invalid":a,ref:c,id:b,className:t("peer desk-body-regular-l w-full bg-color-transparent px-4 pb-[9px] pt-[25px]","text-color-dark outline-none placeholder:text-color-transparent",{hidden:!!n},r==null?void 0:r.input)}),o("label",{htmlFor:b,className:t("desk-body-regular-l pointer-events-none absolute left-4 w-[80%] truncate text-start","top-1/2 -translate-y-1/2 text-color-tetriary duration-100",{"desk-body-regular-s top-[9px] translate-y-0":!!p,"text-color-disabled":d},r==null?void 0:r.label),children:e}),u&&o(_,{...u})]})});C.displayName="InputBase";export{C as InputBase};
2
2
  //# sourceMappingURL=Input.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Input.js","sources":["../../../../../../../lib/shared/ui/formElements/uncontrolled/input/Input.tsx"],"sourcesContent":["import { forwardRef, useId } from 'react'\nimport { type DataLayers } from '../../../../types'\nimport { FieldAttachment } from '../../ui'\nimport { type DeepPartial } from '$/shared/types'\nimport { cn } from '$/shared/utils'\n\nexport type InputBaseClasses = {\n container?: string\n input?: string\n label?: string\n renderWrapper?: string\n}\n\ntype FieldAttachmentProps = React.ComponentPropsWithoutRef<typeof FieldAttachment>\n\ntype ExternalHandlers = {\n onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void\n onClick?: (event: React.MouseEvent<HTMLInputElement>) => void\n onFocus?: (event: React.FocusEvent<HTMLInputElement>) => void\n onBlur?: (event: React.FocusEvent<HTMLInputElement>) => void\n}\n\nexport type InputBaseProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, 'placeholder' | 'size'> & {\n /**\n * Дополнительные стили внутренних компонентов\n */\n classes?: InputBaseClasses\n /**\n * Отображаемый placeholder\n */\n label: string\n /**\n * Отображение не валидного поля\n */\n invalid?: boolean\n /**\n * Свойства дополнительной иконки\n */\n attachmentProps?: DeepPartial<FieldAttachmentProps>\n /**\n * Рендер дополнительных значений вместо базового ввода\n */\n renderValues?: () => React.JSX.Element | null\n /**\n * Дополнительные хендлеры\n */\n externalHandlers?: ExternalHandlers\n /**\n * Даталееры\n */\n dataLayers?: DataLayers\n /**\n * Обработка ошибок для даталееров\n */\n ['data-error-message']?: string\n}\n\nexport const InputBase = forwardRef<HTMLInputElement, InputBaseProps>(\n (\n { label, value, invalid, disabled, classes, renderValues, attachmentProps, externalHandlers, onChange, dataLayers, ...props },\n ref\n ) => {\n const id = useId()\n\n const { onChange: externalOnChange, ...restHandlers } = externalHandlers || {}\n\n const onValueChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (onChange) onChange(event)\n if (externalOnChange) externalOnChange(event)\n }\n\n return (\n <div\n className={cn(\n 'relative flex w-full gap-x-4 rounded-sm bg-color-blue-grey-100',\n '[&_label]:focus-within:top-[9px] [&_label]:focus-within:translate-y-0',\n '[&_label]:focus-within:desk-body-regular-s',\n // '[&_label]:focus-within:text-color-tetriary',\n 'hover:bg-color-blue-grey-200',\n 'border-[1px] border-transparent focus-within:border-blue-grey-800',\n {\n 'border-secondary-default': invalid\n },\n classes?.container\n )}\n data-test-id='input-root'\n >\n {renderValues ? (\n <div\n onClick={props.onClick}\n onBlur={props.onBlur}\n className={cn(\n 'peer desk-body-regular-l min-h-[54px] w-full bg-color-transparent [&_input]:px-4 [&_input]:pb-[6px] [&_input]:pt-[28px]',\n 'text-color-dark outline-none placeholder:text-color-transparent',\n 'flex flex-row flex-wrap gap-2',\n classes?.renderWrapper\n )}\n >\n {renderValues()}\n </div>\n ) : (\n <input\n {...props}\n {...restHandlers}\n onChange={onValueChange}\n disabled={disabled}\n data-layer-id={dataLayers?.targetId}\n value={value ?? ''}\n placeholder={label}\n aria-placeholder={label}\n aria-invalid={invalid}\n ref={ref}\n id={id}\n className={cn(\n 'peer desk-body-regular-l w-full bg-color-transparent px-4 pb-[9px] pt-[25px]',\n 'text-color-dark outline-none placeholder:text-color-transparent',\n {\n hidden: Boolean(renderValues)\n },\n classes?.input\n )}\n />\n )}\n <label\n htmlFor={id}\n className={cn(\n 'desk-body-regular-l pointer-events-none absolute left-4 w-[80%] truncate text-start',\n 'top-1/2 -translate-y-1/2 text-color-tetriary duration-100',\n {\n 'desk-body-regular-s top-[9px] translate-y-0': Boolean(value),\n 'text-color-disabled': disabled\n },\n classes?.label\n )}\n >\n {label}\n </label>\n {attachmentProps && <FieldAttachment {...attachmentProps} />}\n </div>\n )\n }\n)\nInputBase.displayName = 'InputBase'\n"],"names":["InputBase","forwardRef","label","value","invalid","disabled","classes","renderValues","attachmentProps","externalHandlers","onChange","dataLayers","props","ref","id","useId","externalOnChange","restHandlers","onValueChange","event","jsxs","cn","jsx","FieldAttachment"],"mappings":"2NAyDO,MAAMA,EAAYC,EACvB,CACE,CAAE,MAAAC,EAAO,MAAAC,EAAO,QAAAC,EAAS,SAAAC,EAAU,QAAAC,EAAS,aAAAC,EAAc,gBAAAC,EAAiB,iBAAAC,EAAkB,SAAAC,EAAU,WAAAC,EAAY,GAAGC,CAAA,EACtHC,IACG,CACH,MAAMC,EAAKC,EAAA,EAEL,CAAE,SAAUC,EAAkB,GAAGC,CAAA,EAAiBR,GAAoB,CAAA,EAEtES,EAAiBC,GAA+C,CAChET,KAAmBS,CAAK,EACxBH,KAAmCG,CAAK,CAC9C,EAEA,OACEC,EAAC,MAAA,CACC,UAAWC,EACT,iEACA,wEACA,6CAEA,+BACA,oEACA,CACE,2BAA4BjB,CAAA,EAE9BE,GAAA,YAAAA,EAAS,SAAA,EAEX,eAAa,aAEZ,SAAA,CAAAC,EACCe,EAAC,MAAA,CACC,QAASV,EAAM,QACf,OAAQA,EAAM,OACd,UAAWS,EACT,0HACA,kEACA,gCACAf,GAAA,YAAAA,EAAS,aAAA,EAGV,SAAAC,EAAA,CAAa,CAAA,EAGhBe,EAAC,QAAA,CACE,GAAGV,EACH,GAAGK,EACJ,SAAUC,EACV,SAAAb,EACA,gBAAeM,GAAA,YAAAA,EAAY,SAC3B,MAAOR,GAAS,GAChB,YAAaD,EACb,mBAAkBA,EAClB,eAAcE,EACd,IAAAS,EACA,GAAAC,EACA,UAAWO,EACT,+EACA,kEACA,CACE,OAAQ,EAAQd,CAAY,EAE9BD,GAAA,YAAAA,EAAS,KAAA,CACX,CAAA,EAGJgB,EAAC,QAAA,CACC,QAASR,EACT,UAAWO,EACT,sFACA,4DACA,CACE,8CAA+C,EAAQlB,EACvD,sBAAuBE,CAAA,EAEzBC,GAAA,YAAAA,EAAS,KAAA,EAGV,SAAAJ,CAAA,CAAA,EAEFM,GAAmBc,EAACC,EAAA,CAAiB,GAAGf,CAAA,CAAiB,CAAA,CAAA,CAAA,CAGhE,CACF,EACAR,EAAU,YAAc"}
1
+ {"version":3,"file":"Input.js","sources":["../../../../../../../lib/shared/ui/formElements/uncontrolled/input/Input.tsx"],"sourcesContent":["import { forwardRef, useId } from 'react'\nimport { type DataLayers } from '../../../../types'\nimport { FieldAttachment } from '../../ui'\nimport { type DeepPartial } from '$/shared/types'\nimport { cn } from '$/shared/utils'\n\nexport type InputBaseClasses = {\n container?: string\n input?: string\n label?: string\n renderWrapper?: string\n}\n\ntype FieldAttachmentProps = React.ComponentPropsWithoutRef<typeof FieldAttachment>\n\ntype ExternalHandlers = {\n onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void\n onClick?: (event: React.MouseEvent<HTMLInputElement>) => void\n onFocus?: (event: React.FocusEvent<HTMLInputElement>) => void\n onBlur?: (event: React.FocusEvent<HTMLInputElement>) => void\n}\n\nexport type InputBaseProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, 'placeholder' | 'size'> & {\n /**\n * Дополнительные стили внутренних компонентов\n */\n classes?: InputBaseClasses\n /**\n * Отображаемый placeholder\n */\n label: string\n /**\n * Отображение не валидного поля\n */\n invalid?: boolean\n /**\n * Свойства дополнительной иконки\n */\n attachmentProps?: DeepPartial<FieldAttachmentProps>\n /**\n * Рендер дополнительных значений вместо базового ввода\n */\n renderValues?: () => React.JSX.Element | null\n /**\n * Дополнительные хендлеры\n */\n externalHandlers?: ExternalHandlers\n /**\n * Даталееры\n */\n dataLayers?: DataLayers\n /**\n * Обработка ошибок для даталееров\n */\n ['data-error-message']?: string\n}\n\nexport const InputBase = forwardRef<HTMLInputElement, InputBaseProps>(\n (\n { label, value, invalid, disabled, classes, renderValues, attachmentProps, externalHandlers, onChange, dataLayers, ...props },\n ref\n ) => {\n const id = useId()\n\n const { onChange: externalOnChange, ...restHandlers } = externalHandlers || {}\n\n const onValueChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (onChange) onChange(event)\n if (externalOnChange) externalOnChange(event)\n }\n\n return (\n <div\n className={cn(\n 'relative flex w-full gap-x-4 rounded-sm bg-color-blue-grey-100',\n '[&_label]:focus-within:top-[9px] [&_label]:focus-within:translate-y-0',\n '[&_label]:focus-within:desk-body-regular-s',\n // '[&_label]:focus-within:text-color-tetriary',\n 'hover:bg-color-blue-grey-200',\n 'border-[1px] border-transparent focus-within:border-blue-grey-800',\n {\n 'border-secondary-default': invalid\n },\n classes?.container\n )}\n data-id='input-root'\n >\n {renderValues ? (\n <div\n onClick={props.onClick}\n onBlur={props.onBlur}\n className={cn(\n 'peer desk-body-regular-l min-h-[54px] w-full bg-color-transparent [&_input]:px-4 [&_input]:pb-[6px] [&_input]:pt-[28px]',\n 'text-color-dark outline-none placeholder:text-color-transparent',\n 'flex flex-row flex-wrap gap-2',\n classes?.renderWrapper\n )}\n >\n {renderValues()}\n </div>\n ) : (\n <input\n {...props}\n {...restHandlers}\n onChange={onValueChange}\n disabled={disabled}\n data-layer-id={dataLayers?.targetId}\n value={value ?? ''}\n placeholder={label}\n aria-placeholder={label}\n aria-invalid={invalid}\n ref={ref}\n id={id}\n className={cn(\n 'peer desk-body-regular-l w-full bg-color-transparent px-4 pb-[9px] pt-[25px]',\n 'text-color-dark outline-none placeholder:text-color-transparent',\n {\n hidden: Boolean(renderValues)\n },\n classes?.input\n )}\n />\n )}\n <label\n htmlFor={id}\n className={cn(\n 'desk-body-regular-l pointer-events-none absolute left-4 w-[80%] truncate text-start',\n 'top-1/2 -translate-y-1/2 text-color-tetriary duration-100',\n {\n 'desk-body-regular-s top-[9px] translate-y-0': Boolean(value),\n 'text-color-disabled': disabled\n },\n classes?.label\n )}\n >\n {label}\n </label>\n {attachmentProps && <FieldAttachment {...attachmentProps} />}\n </div>\n )\n }\n)\nInputBase.displayName = 'InputBase'\n"],"names":["InputBase","forwardRef","label","value","invalid","disabled","classes","renderValues","attachmentProps","externalHandlers","onChange","dataLayers","props","ref","id","useId","externalOnChange","restHandlers","onValueChange","event","jsxs","cn","jsx","FieldAttachment"],"mappings":"2NAyDO,MAAMA,EAAYC,EACvB,CACE,CAAE,MAAAC,EAAO,MAAAC,EAAO,QAAAC,EAAS,SAAAC,EAAU,QAAAC,EAAS,aAAAC,EAAc,gBAAAC,EAAiB,iBAAAC,EAAkB,SAAAC,EAAU,WAAAC,EAAY,GAAGC,CAAA,EACtHC,IACG,CACH,MAAMC,EAAKC,EAAA,EAEL,CAAE,SAAUC,EAAkB,GAAGC,CAAA,EAAiBR,GAAoB,CAAA,EAEtES,EAAiBC,GAA+C,CAChET,KAAmBS,CAAK,EACxBH,KAAmCG,CAAK,CAC9C,EAEA,OACEC,EAAC,MAAA,CACC,UAAWC,EACT,iEACA,wEACA,6CAEA,+BACA,oEACA,CACE,2BAA4BjB,CAAA,EAE9BE,GAAA,YAAAA,EAAS,SAAA,EAEX,UAAQ,aAEP,SAAA,CAAAC,EACCe,EAAC,MAAA,CACC,QAASV,EAAM,QACf,OAAQA,EAAM,OACd,UAAWS,EACT,0HACA,kEACA,gCACAf,GAAA,YAAAA,EAAS,aAAA,EAGV,SAAAC,EAAA,CAAa,CAAA,EAGhBe,EAAC,QAAA,CACE,GAAGV,EACH,GAAGK,EACJ,SAAUC,EACV,SAAAb,EACA,gBAAeM,GAAA,YAAAA,EAAY,SAC3B,MAAOR,GAAS,GAChB,YAAaD,EACb,mBAAkBA,EAClB,eAAcE,EACd,IAAAS,EACA,GAAAC,EACA,UAAWO,EACT,+EACA,kEACA,CACE,OAAQ,EAAQd,CAAY,EAE9BD,GAAA,YAAAA,EAAS,KAAA,CACX,CAAA,EAGJgB,EAAC,QAAA,CACC,QAASR,EACT,UAAWO,EACT,sFACA,4DACA,CACE,8CAA+C,EAAQlB,EACvD,sBAAuBE,CAAA,EAEzBC,GAAA,YAAAA,EAAS,KAAA,EAGV,SAAAJ,CAAA,CAAA,EAEFM,GAAmBc,EAACC,EAAA,CAAiB,GAAGf,CAAA,CAAiB,CAAA,CAAA,CAAA,CAGhE,CACF,EACAR,EAAU,YAAc"}
@@ -1,2 +1,2 @@
1
- import{jsx as o,Fragment as j}from"react/jsx-runtime";import{forwardRef as k,createElement as B}from"react";import{Root as E}from"../../../../../../node_modules/@radix-ui/react-radio-group/dist/index.js";import{RadioItem as F}from"./ui/RadioItem.js";import{cn as n}from"../../../../utils/cn.js";const z=k(({options:a,displayValue:c,returnValue:l,invalid:e,className:d,disabled:m,classes:h,externalHandlers:g,onValueChange:s,renderComponent:f,dataLayers:t,...R},w)=>{const{root:x,list:C,radioItem:I}=h||{},{onChange:i,...u}=g||{};return o(E,{...R,onValueChange:r=>{s&&s(r),i&&i(r)},"aria-invalid":e,disabled:m,ref:w,className:n("w-full",d,x),"data-layer-id":t==null?void 0:t.targetId,children:o(j,{children:f?f({options:a,returnValue:l,displayValue:c,invalid:e,disabled:m}):o("ul",{className:n("w-full",C),children:a.map((r,N)=>B(F,{...u,key:r.value,"data-test-id":`radio-item-${N}`,item:r,invalid:e,disabled:m||(r==null?void 0:r.disabled),classes:I,returnValue:l,displayValue:c}))})})})});export{z as RadioGroupBase};
1
+ import{jsx as o,Fragment as j}from"react/jsx-runtime";import{forwardRef as k,createElement as B}from"react";import{Root as E}from"../../../../../../node_modules/@radix-ui/react-radio-group/dist/index.js";import{RadioItem as F}from"./ui/RadioItem.js";import{cn as n}from"../../../../utils/cn.js";const z=k(({options:a,displayValue:c,returnValue:l,invalid:e,className:d,disabled:m,classes:h,externalHandlers:g,onValueChange:f,renderComponent:s,dataLayers:t,...R},w)=>{const{root:x,list:C,radioItem:I}=h||{},{onChange:i,...u}=g||{};return o(E,{...R,onValueChange:r=>{f&&f(r),i&&i(r)},"aria-invalid":e,disabled:m,ref:w,className:n("w-full",d,x),"data-layer-id":t==null?void 0:t.targetId,children:o(j,{children:s?s({options:a,returnValue:l,displayValue:c,invalid:e,disabled:m}):o("ul",{className:n("w-full",C),children:a.map((r,N)=>B(F,{...u,key:r.value,"data-id":`radio-item-${N}`,item:r,invalid:e,disabled:m||(r==null?void 0:r.disabled),classes:I,returnValue:l,displayValue:c}))})})})});export{z as RadioGroupBase};
2
2
  //# sourceMappingURL=RadioGroup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RadioGroup.js","sources":["../../../../../../../lib/shared/ui/formElements/uncontrolled/radio/RadioGroup.tsx"],"sourcesContent":["import { forwardRef } from 'react'\nimport { type RadioGroupProps as RadioGroupPrimitiveProps, Root } from '@radix-ui/react-radio-group'\nimport { type DataLayers } from '../../../../types'\nimport { RadioItem, type RadioOption } from './ui'\nimport { type RadioItemClasses } from './ui/RadioItem'\nimport { cn } from '$/shared/utils'\n\ntype RadioGroupClasses = {\n root?: string\n list?: string\n radioItem?: RadioItemClasses\n}\n\ntype ExternalHandlers = {\n onChange?: (value: string) => void\n onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void\n onFocus?: (event: React.FocusEvent<HTMLButtonElement>) => void\n onBlur?: (event: React.FocusEvent<HTMLButtonElement>) => void\n}\n\nexport type RenderComponentProps = { item: RadioOption; classes?: RadioItemClasses } & Pick<\n RadioGroupBaseProps,\n 'displayValue' | 'returnValue' | 'invalid' | 'disabled'\n>\n\nexport type RadioGroupBaseProps = Omit<RadioGroupPrimitiveProps, 'children'> & {\n /**\n * Список отображаемых опций\n */\n options: RadioOption[]\n /**\n * Функция для управления отображаемым значением\n */\n displayValue?: (option: RadioOption) => string\n /**\n * Функция для управления возвращаемым значением\n */\n returnValue?: (option: RadioOption) => string\n /**\n * Дополнительные стили внутренних компонентов\n */\n classes?: RadioGroupClasses\n /**\n * Свойство для отображения не валидного поля\n */\n invalid?: boolean\n /**\n * Дополнительные хендлеры\n */\n externalHandlers?: ExternalHandlers\n /**\n * Отрисовка компонента из вне\n */\n renderComponent?: (props: RadioGroupBaseProps) => React.JSX.Element\n /**\n * Даталееры\n */\n dataLayers?: DataLayers\n}\n\nexport const RadioGroupBase = forwardRef<HTMLDivElement, RadioGroupBaseProps>(\n (\n {\n options,\n displayValue,\n returnValue,\n invalid,\n className,\n disabled,\n classes,\n externalHandlers,\n onValueChange,\n renderComponent,\n dataLayers,\n ...props\n },\n ref\n ) => {\n const { root, list, radioItem } = classes || {}\n\n const { onChange: externalOnChange, ...restHandlers } = externalHandlers || {}\n\n const onChange = (value: string) => {\n if (onValueChange) onValueChange(value)\n if (externalOnChange) externalOnChange(value)\n }\n\n return (\n <Root\n {...props}\n onValueChange={onChange}\n aria-invalid={invalid}\n disabled={disabled}\n ref={ref}\n className={cn('w-full', className, root)}\n data-layer-id={dataLayers?.targetId}\n >\n <>\n {renderComponent ? (\n renderComponent({ options, returnValue, displayValue, invalid, disabled })\n ) : (\n <ul className={cn('w-full', list)}>\n {options.map((option, index) => (\n <RadioItem\n {...restHandlers}\n key={option.value}\n data-test-id={`radio-item-${index}`}\n item={option}\n invalid={invalid}\n disabled={disabled || option?.disabled}\n classes={radioItem}\n returnValue={returnValue}\n displayValue={displayValue}\n />\n ))}\n </ul>\n )}\n </>\n </Root>\n )\n }\n)\n"],"names":["RadioGroupBase","forwardRef","options","displayValue","returnValue","invalid","className","disabled","classes","externalHandlers","onValueChange","renderComponent","dataLayers","props","ref","root","list","radioItem","externalOnChange","restHandlers","jsx","Root","value","cn","Fragment","option","index","createElement","RadioItem"],"mappings":"uSA4DO,MAAMA,EAAiBC,EAC5B,CACE,CACE,QAAAC,EACA,aAAAC,EACA,YAAAC,EACA,QAAAC,EACA,UAAAC,EACA,SAAAC,EACA,QAAAC,EACA,iBAAAC,EACA,cAAAC,EACA,gBAAAC,EACA,WAAAC,EACA,GAAGC,CAAA,EAELC,IACG,CACH,KAAM,CAAE,KAAAC,EAAM,KAAAC,EAAM,UAAAC,CAAA,EAAcT,GAAW,CAAA,EAEvC,CAAE,SAAUU,EAAkB,GAAGC,CAAA,EAAiBV,GAAoB,CAAA,EAO5E,OACEW,EAACC,EAAA,CACE,GAAGR,EACJ,cARcS,GAAkB,CAC9BZ,KAA6BY,CAAK,EAClCJ,KAAmCI,CAAK,CAC9C,EAMI,eAAcjB,EACd,SAAAE,EACA,IAAAO,EACA,UAAWS,EAAG,SAAUjB,EAAWS,CAAI,EACvC,gBAAeH,GAAA,YAAAA,EAAY,SAE3B,SAAAQ,EAAAI,EAAA,CACG,WACCb,EAAgB,CAAE,QAAAT,EAAS,YAAAE,EAAa,aAAAD,EAAc,QAAAE,EAAS,SAAAE,CAAA,CAAU,IAExE,KAAA,CAAG,UAAWgB,EAAG,SAAUP,CAAI,EAC7B,SAAAd,EAAQ,IAAI,CAACuB,EAAQC,IACpBC,EAACC,EAAA,CACE,GAAGT,EACJ,IAAKM,EAAO,MACZ,eAAc,cAAcC,CAAK,GACjC,KAAMD,EACN,QAAApB,EACA,SAAUE,IAAYkB,GAAA,YAAAA,EAAQ,UAC9B,QAASR,EACT,YAAAb,EACA,aAAAD,CAAA,CAAA,CAEH,EACH,CAAA,CAEJ,CAAA,CAAA,CAGN,CACF"}
1
+ {"version":3,"file":"RadioGroup.js","sources":["../../../../../../../lib/shared/ui/formElements/uncontrolled/radio/RadioGroup.tsx"],"sourcesContent":["import { forwardRef } from 'react'\nimport { type RadioGroupProps as RadioGroupPrimitiveProps, Root } from '@radix-ui/react-radio-group'\nimport { type DataLayers } from '../../../../types'\nimport { RadioItem, type RadioOption } from './ui'\nimport { type RadioItemClasses } from './ui/RadioItem'\nimport { cn } from '$/shared/utils'\n\ntype RadioGroupClasses = {\n root?: string\n list?: string\n radioItem?: RadioItemClasses\n}\n\ntype ExternalHandlers = {\n onChange?: (value: string) => void\n onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void\n onFocus?: (event: React.FocusEvent<HTMLButtonElement>) => void\n onBlur?: (event: React.FocusEvent<HTMLButtonElement>) => void\n}\n\nexport type RenderComponentProps = { item: RadioOption; classes?: RadioItemClasses } & Pick<\n RadioGroupBaseProps,\n 'displayValue' | 'returnValue' | 'invalid' | 'disabled'\n>\n\nexport type RadioGroupBaseProps = Omit<RadioGroupPrimitiveProps, 'children'> & {\n /**\n * Список отображаемых опций\n */\n options: RadioOption[]\n /**\n * Функция для управления отображаемым значением\n */\n displayValue?: (option: RadioOption) => string\n /**\n * Функция для управления возвращаемым значением\n */\n returnValue?: (option: RadioOption) => string\n /**\n * Дополнительные стили внутренних компонентов\n */\n classes?: RadioGroupClasses\n /**\n * Свойство для отображения не валидного поля\n */\n invalid?: boolean\n /**\n * Дополнительные хендлеры\n */\n externalHandlers?: ExternalHandlers\n /**\n * Отрисовка компонента из вне\n */\n renderComponent?: (props: RadioGroupBaseProps) => React.JSX.Element\n /**\n * Даталееры\n */\n dataLayers?: DataLayers\n}\n\nexport const RadioGroupBase = forwardRef<HTMLDivElement, RadioGroupBaseProps>(\n (\n {\n options,\n displayValue,\n returnValue,\n invalid,\n className,\n disabled,\n classes,\n externalHandlers,\n onValueChange,\n renderComponent,\n dataLayers,\n ...props\n },\n ref\n ) => {\n const { root, list, radioItem } = classes || {}\n\n const { onChange: externalOnChange, ...restHandlers } = externalHandlers || {}\n\n const onChange = (value: string) => {\n if (onValueChange) onValueChange(value)\n if (externalOnChange) externalOnChange(value)\n }\n\n return (\n <Root\n {...props}\n onValueChange={onChange}\n aria-invalid={invalid}\n disabled={disabled}\n ref={ref}\n className={cn('w-full', className, root)}\n data-layer-id={dataLayers?.targetId}\n >\n <>\n {renderComponent ? (\n renderComponent({ options, returnValue, displayValue, invalid, disabled })\n ) : (\n <ul className={cn('w-full', list)}>\n {options.map((option, index) => (\n <RadioItem\n {...restHandlers}\n key={option.value}\n data-id={`radio-item-${index}`}\n item={option}\n invalid={invalid}\n disabled={disabled || option?.disabled}\n classes={radioItem}\n returnValue={returnValue}\n displayValue={displayValue}\n />\n ))}\n </ul>\n )}\n </>\n </Root>\n )\n }\n)\n"],"names":["RadioGroupBase","forwardRef","options","displayValue","returnValue","invalid","className","disabled","classes","externalHandlers","onValueChange","renderComponent","dataLayers","props","ref","root","list","radioItem","externalOnChange","restHandlers","jsx","Root","value","cn","Fragment","option","index","createElement","RadioItem"],"mappings":"uSA4DO,MAAMA,EAAiBC,EAC5B,CACE,CACE,QAAAC,EACA,aAAAC,EACA,YAAAC,EACA,QAAAC,EACA,UAAAC,EACA,SAAAC,EACA,QAAAC,EACA,iBAAAC,EACA,cAAAC,EACA,gBAAAC,EACA,WAAAC,EACA,GAAGC,CAAA,EAELC,IACG,CACH,KAAM,CAAE,KAAAC,EAAM,KAAAC,EAAM,UAAAC,CAAA,EAAcT,GAAW,CAAA,EAEvC,CAAE,SAAUU,EAAkB,GAAGC,CAAA,EAAiBV,GAAoB,CAAA,EAO5E,OACEW,EAACC,EAAA,CACE,GAAGR,EACJ,cARcS,GAAkB,CAC9BZ,KAA6BY,CAAK,EAClCJ,KAAmCI,CAAK,CAC9C,EAMI,eAAcjB,EACd,SAAAE,EACA,IAAAO,EACA,UAAWS,EAAG,SAAUjB,EAAWS,CAAI,EACvC,gBAAeH,GAAA,YAAAA,EAAY,SAE3B,SAAAQ,EAAAI,EAAA,CACG,WACCb,EAAgB,CAAE,QAAAT,EAAS,YAAAE,EAAa,aAAAD,EAAc,QAAAE,EAAS,SAAAE,CAAA,CAAU,IAExE,KAAA,CAAG,UAAWgB,EAAG,SAAUP,CAAI,EAC7B,SAAAd,EAAQ,IAAI,CAACuB,EAAQC,IACpBC,EAACC,EAAA,CACE,GAAGT,EACJ,IAAKM,EAAO,MACZ,UAAS,cAAcC,CAAK,GAC5B,KAAMD,EACN,QAAApB,EACA,SAAUE,IAAYkB,GAAA,YAAAA,EAAQ,UAC9B,QAASR,EACT,YAAAb,EACA,aAAAD,CAAA,CAAA,CAEH,EACH,CAAA,CAEJ,CAAA,CAAA,CAGN,CACF"}