@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.
- package/dist/lib/shared/ui/dropdownList/DropdownList.js +1 -1
- package/dist/lib/shared/ui/dropdownList/DropdownList.js.map +1 -1
- package/dist/lib/shared/ui/formElements/controlled/autocomplete/AutocompleteControl.js +1 -1
- package/dist/lib/shared/ui/formElements/controlled/autocomplete/AutocompleteControl.js.map +1 -1
- package/dist/lib/shared/ui/formElements/controlled/combobox/ComboboxControl.js +1 -1
- package/dist/lib/shared/ui/formElements/controlled/combobox/ComboboxControl.js.map +1 -1
- package/dist/lib/shared/ui/formElements/controlled/dayPickerControl/single.js +1 -1
- package/dist/lib/shared/ui/formElements/controlled/dayPickerControl/single.js.map +1 -1
- package/dist/lib/shared/ui/formElements/controlled/editor/model/helper.js +1 -1
- package/dist/lib/shared/ui/formElements/controlled/editor/model/helper.js.map +1 -1
- package/dist/lib/shared/ui/formElements/controlled/editor/ui/Editor.js +1 -1
- package/dist/lib/shared/ui/formElements/controlled/editor/ui/Editor.js.map +1 -1
- package/dist/lib/shared/ui/formElements/controlled/input/InputControl.js +1 -1
- package/dist/lib/shared/ui/formElements/controlled/input/InputControl.js.map +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/combobox/combobox.js +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/combobox/combobox.js.map +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/input/Input.js +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/input/Input.js.map +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/radio/RadioGroup.js +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/radio/RadioGroup.js.map +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/slider/ui/sliderAlgorithmic/SliderAlgorithmic.js +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/slider/ui/sliderAlgorithmic/SliderAlgorithmic.js.map +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/slider/ui/sliderMarks/SliderMarks.js +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/slider/ui/sliderMarks/SliderMarks.js.map +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/slider/ui/sliderStep/SliderStep.js +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/slider/ui/sliderStep/SliderStep.js.map +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/textarea/Textarea.js +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/textarea/Textarea.js.map +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/uploader/ui/UploaderFiles.js +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/uploader/ui/UploaderFiles.js.map +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/uploader/ui/UploaderInput.js +1 -1
- package/dist/lib/shared/ui/formElements/uncontrolled/uploader/ui/UploaderInput.js.map +1 -1
- package/dist/lib/shared/ui/icon/allowedIcons.js +1 -1
- package/dist/lib/shared/ui/icon/allowedIcons.js.map +1 -1
- package/dist/lib/shared/ui/icon/iconsMap.js +1 -1
- package/dist/lib/shared/ui/icon/iconsMap.js.map +1 -1
- package/dist/lib/shared/ui/modal/Modal.js +1 -1
- package/dist/lib/shared/ui/modal/Modal.js.map +1 -1
- package/dist/lib/widgets/model/helpers.js +2 -2
- package/dist/lib/widgets/model/helpers.js.map +1 -1
- package/dist/static/editor/nbsp.svg.js +2 -0
- package/dist/static/editor/nbsp.svg.js.map +1 -0
- package/dist/static/static/editor/nbsp.svg +1 -0
- package/dist/stats.html +1 -1
- package/dist/types/lib/shared/ui/formElements/controlled/input/InputControl.d.ts +1 -1
- package/dist/types/lib/shared/ui/icon/allowedIcons.d.ts +2 -2
- package/dist/types/lib/shared/ui/icon/iconsMap.d.ts +6 -0
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as n}from"react/jsx-runtime";import{useRef as
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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:"Добавить неразрывной пробел ",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,
|
|
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: 'Добавить неразрывной пробел ',\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":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as
|
|
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
|
|
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{
|
|
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 '
|
|
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:
|
|
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":"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"}
|
|
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
|
|
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-
|
|
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:
|
|
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-
|
|
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"}
|