@scbt-ecom/ui 0.140.1 → 0.140.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- import{useQuery as r}from"../../../../../../../node_modules/@tanstack/react-query/build/modern/useQuery.js";import{getDataByDadataType as s}from"../helpers.js";const d=(e,t,o,i)=>r({queryKey:["fio",e],queryFn:async()=>{const n=await(await fetch(`${t}/fio`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({query:e})})).json();return s("fio",n)},staleTime:5*60*1e3,gcTime:0,placeholderData:a=>a,enabled:!!e,...o},i);export{d as useDadataQueryFio};
1
+ import{useQuery as i}from"../../../../../../../node_modules/@tanstack/react-query/build/modern/useQuery.js";import{getDataByDadataType as s}from"../helpers.js";const d=(e,a,o,r)=>i({queryKey:["fio",e],queryFn:async()=>{const n=await(await fetch(`${a}/fio`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({query:e})})).json();return s("fio",n)},staleTime:5*60*1e3,gcTime:0,placeholderData:t=>t,enabled:!!e,...o},r);export{d as useDadataQueryFio};
2
2
  //# sourceMappingURL=query.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"query.js","sources":["../../../../../../../../lib/shared/ui/formElements/controlled/dadata/fio/query.ts"],"sourcesContent":["import { type QueryClient, useQuery, type UseQueryOptions } from '@tanstack/react-query'\nimport { getDataByDadataType } from '../helpers'\nimport { type IDadataCacheOption } from '../types'\n\nexport const useDadataQueryFio = (\n query: string,\n dadataBaseUrl: string,\n options?: Partial<UseQueryOptions<IDadataCacheOption<unknown>[]>>,\n queryClient?: QueryClient\n) =>\n useQuery(\n {\n queryKey: ['fio', query],\n queryFn: async () => {\n const result = await fetch(`${dadataBaseUrl}/fio`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({ query })\n })\n\n const data = await result.json()\n return getDataByDadataType('fio', data) as IDadataCacheOption<unknown>[]\n },\n staleTime: 5 * 60 * 1000,\n gcTime: 0,\n placeholderData: (prev) => prev,\n enabled: Boolean(query),\n ...options\n },\n queryClient\n )\n"],"names":["useDadataQueryFio","query","dadataBaseUrl","options","queryClient","useQuery","data","getDataByDadataType","prev"],"mappings":"gKAIO,MAAMA,EAAoB,CAC/BC,EACAC,EACAC,EACAC,IAEAC,EACE,CACE,SAAU,CAAC,MAAOJ,CAAK,EACvB,QAAS,SAAY,CASnB,MAAMK,EAAO,MARE,MAAM,MAAM,GAAGJ,CAAa,OAAQ,CACjD,OAAQ,OACR,QAAS,CACP,eAAgB,kBAAA,EAElB,KAAM,KAAK,UAAU,CAAE,MAAAD,EAAO,CAAA,CAC/B,GAEyB,KAAA,EAC1B,OAAOM,EAAoB,MAAOD,CAAI,CACxC,EACA,UAAW,EAAI,GAAK,IACpB,OAAQ,EACR,gBAAkBE,GAASA,EAC3B,QAAS,EAAQP,EACjB,GAAGE,CAAA,EAELC,CACF"}
1
+ {"version":3,"file":"query.js","sources":["../../../../../../../../lib/shared/ui/formElements/controlled/dadata/fio/query.ts"],"sourcesContent":["import { type QueryClient, useQuery, type UseQueryOptions } from '@tanstack/react-query'\nimport { getDataByDadataType } from '../helpers'\nimport { type IDadataCacheOption } from '../types'\n\nexport const useDadataQueryFio = (\n query: string,\n dadataBaseUrl: string,\n options?: Partial<UseQueryOptions<IDadataCacheOption<unknown>[]>>,\n queryClient?: QueryClient\n) => {\n return useQuery(\n {\n queryKey: ['fio', query],\n queryFn: async () => {\n const result = await fetch(`${dadataBaseUrl}/fio`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({ query })\n })\n\n // if (!result.ok) {\n // return result\n // }\n\n const data = await result.json()\n return getDataByDadataType('fio', data) as IDadataCacheOption<unknown>[]\n },\n staleTime: 5 * 60 * 1000,\n gcTime: 0,\n placeholderData: (prev) => prev,\n enabled: Boolean(query),\n ...options\n },\n queryClient\n )\n}\n"],"names":["useDadataQueryFio","query","dadataBaseUrl","options","queryClient","useQuery","data","getDataByDadataType","prev"],"mappings":"gKAIO,MAAMA,EAAoB,CAC/BC,EACAC,EACAC,EACAC,IAEOC,EACL,CACE,SAAU,CAAC,MAAOJ,CAAK,EACvB,QAAS,SAAY,CAanB,MAAMK,EAAO,MAZE,MAAM,MAAM,GAAGJ,CAAa,OAAQ,CACjD,OAAQ,OACR,QAAS,CACP,eAAgB,kBAAA,EAElB,KAAM,KAAK,UAAU,CAAE,MAAAD,EAAO,CAAA,CAC/B,GAMyB,KAAA,EAC1B,OAAOM,EAAoB,MAAOD,CAAI,CACxC,EACA,UAAW,EAAI,GAAK,IACpB,OAAQ,EACR,gBAAkBE,GAASA,EAC3B,QAAS,EAAQP,EACjB,GAAGE,CAAA,EAELC,CAAA"}
@@ -1,2 +1,2 @@
1
- import{jsx as C}from"react/jsx-runtime";import{forwardRef as S,useState as q}from"react";import"../../../../../../node_modules/classnames/index.js";import"react-hook-form";import{useDebounceValue as D}from"../../../../hooks/useDebounce.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"../checkbox/Checkbox.js";import{Combobox as O}from"../combobox/combobox.js";import"../dayPicker/DayPicker.js";import"../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";const it=S(({formatter:u,query:c,queryOptions:a,value:m,displayValue:o,limit:t=0,onChange:r,strategy:e="input-first",...f},b)=>{const[h,l]=q(m??""),n=e==="input-first"?m??"":h,d=e==="input-first"?r:l,p=D(n,100),g={enabled:t>0?p.length>=t:!0,...a},{data:s}=c(p,g),x=s?s.map(u):[];return C(O,{...f,ref:b,options:x,searchable:!0,filterDisabled:!0,inputValue:n,onInputChange:d,multiple:!1,displayValue:o,onChange:i=>{i&&r&&r(o?o(i):i.label)},empty:p.length<t?`Введите более ${t} символов для поиска`:void 0})});export{it as AutocompleteBase};
1
+ import{jsx as S}from"react/jsx-runtime";import{forwardRef as g,useState as q}from"react";import"../../../../../../node_modules/classnames/index.js";import"react-hook-form";import{useDebounceValue as y}from"../../../../hooks/useDebounce.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"../checkbox/Checkbox.js";import{Combobox as D}from"../combobox/combobox.js";import"../dayPicker/DayPicker.js";import"../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";const pt=g(({formatter:c,query:u,queryOptions:f,value:p,displayValue:o,limit:m=0,onChange:r,strategy:e="input-first",...a},b)=>{const[h,l]=q(p??""),n=e==="input-first"?p??"":h,x=e==="input-first"?r:l,s=y(n,100),A={...f},{data:t}=u(s,A),C=t&&Array.isArray(t)?t==null?void 0:t.map(c):[];return S(D,{...a,ref:b,options:C,searchable:!0,filterDisabled:!0,inputValue:n,onInputChange:x,multiple:!1,displayValue:o,onChange:i=>{i&&r&&r(o?o(i):i.label)},empty:s.length<m?`Введите более ${m} символов для поиска`:void 0})});export{pt as AutocompleteBase};
2
2
  //# sourceMappingURL=Autocomplete.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Autocomplete.js","sources":["../../../../../../../lib/shared/ui/formElements/uncontrolled/autocomplete/Autocomplete.tsx"],"sourcesContent":["import { forwardRef, useState } from 'react'\nimport { type UseQueryOptions, type UseQueryResult } from '@tanstack/react-query'\nimport type { AutocompleteItemOption } from './types'\nimport { useDebounceValue } from '$/shared/hooks'\nimport { Combobox, type ComboboxProps, type ComboboxValue } from '$/shared/ui'\n\nexport interface AutocompleteBaseProps<TData>\n extends Omit<\n ComboboxProps<false>,\n 'options' | 'inputValue' | 'onInputChange' | 'searchable' | 'multiple' | 'value' | 'onChange'\n > {\n /**\n * Функция для запроса основанная на [@tanstack/query](https://tanstack.com/query/latest/docs/framework/react/overview)\n */\n query: (query: string, options?: Partial<UseQueryOptions<TData[]>>) => UseQueryResult<TData[]>\n /**\n * Параметры запроса\n */\n queryOptions?: Partial<UseQueryOptions<TData[]>>\n /**\n * Позволяет форматировать данные\n */\n formatter: (item: TData, index: number, array: TData[]) => AutocompleteItemOption<TData>\n /**\n * Значение инпута\n */\n value?: string\n /**\n * Handler инпута\n */\n onChange?: (value: string) => void\n /**\n * Стратегия управления полем\n * @variation `input-first` - источником правды является инпут\n * @variation `select-first` - источником правды является список\n * @default input-first\n */\n strategy?: 'input-first' | 'select-first'\n limit?: number\n}\n\nexport const AutocompleteBase = forwardRef(\n <TData,>(\n {\n formatter,\n query,\n queryOptions: initialQueryOptions,\n value,\n displayValue,\n limit = 0,\n onChange,\n strategy = 'input-first',\n ...props\n }: AutocompleteBaseProps<TData>,\n ref: React.ForwardedRef<HTMLInputElement>\n ) => {\n const [search, setSearch] = useState<string>(value ?? '')\n\n const inputValue = strategy === 'input-first' ? (value ?? '') : search\n const onInputChange = strategy === 'input-first' ? onChange : setSearch\n\n const debounceSearch = useDebounceValue(inputValue, 100)\n\n const queryOptions: Partial<UseQueryOptions<TData[]>> = {\n enabled: limit > 0 ? debounceSearch.length >= limit : true,\n ...initialQueryOptions\n }\n\n const { data } = query(debounceSearch, queryOptions)\n\n const options = data ? data.map(formatter) : []\n\n const onValueChange = (value: ComboboxValue<false>) => {\n if (!value) return\n\n if (onChange) onChange(displayValue ? displayValue(value) : value.label)\n }\n\n return (\n <Combobox\n {...props}\n ref={ref}\n options={options}\n searchable\n filterDisabled\n inputValue={inputValue}\n onInputChange={onInputChange}\n multiple={false}\n displayValue={displayValue}\n onChange={onValueChange}\n empty={debounceSearch.length < limit ? `Введите более ${limit} символов для поиска` : undefined}\n />\n )\n }\n) as <TData>(props: AutocompleteBaseProps<TData> & { ref: React.Ref<HTMLInputElement> }) => React.JSX.Element\n"],"names":["AutocompleteBase","forwardRef","formatter","query","initialQueryOptions","value","displayValue","limit","onChange","strategy","props","ref","search","setSearch","useState","inputValue","onInputChange","debounceSearch","useDebounceValue","queryOptions","data","options","jsx","Combobox"],"mappings":"q0CAyCO,MAAMA,GAAmBC,EAC9B,CACE,CACE,UAAAC,EACA,MAAAC,EACA,aAAcC,EACd,MAAAC,EACA,aAAAC,EACA,MAAAC,EAAQ,EACR,SAAAC,EACA,SAAAC,EAAW,cACX,GAAGC,CAAA,EAELC,IACG,CACH,KAAM,CAACC,EAAQC,CAAS,EAAIC,EAAiBT,GAAS,EAAE,EAElDU,EAAaN,IAAa,cAAiBJ,GAAS,GAAMO,EAC1DI,EAAgBP,IAAa,cAAgBD,EAAWK,EAExDI,EAAiBC,EAAiBH,EAAY,GAAG,EAEjDI,EAAkD,CACtD,QAASZ,EAAQ,EAAIU,EAAe,QAAUV,EAAQ,GACtD,GAAGH,CAAA,EAGC,CAAE,KAAAgB,CAAA,EAASjB,EAAMc,EAAgBE,CAAY,EAE7CE,EAAUD,EAAOA,EAAK,IAAIlB,CAAS,EAAI,CAAA,EAQ7C,OACEoB,EAACC,EAAA,CACE,GAAGb,EACJ,IAAAC,EACA,QAAAU,EACA,WAAU,GACV,eAAc,GACd,WAAAN,EACA,cAAAC,EACA,SAAU,GACV,aAAAV,EACA,SAjBmBD,GAAgC,CAChDA,GAEDG,GAAUA,EAASF,EAAeA,EAAaD,CAAK,EAAIA,EAAM,KAAK,CACzE,EAcI,MAAOY,EAAe,OAASV,EAAQ,iBAAiBA,CAAK,uBAAyB,MAAA,CAAA,CAG5F,CACF"}
1
+ {"version":3,"file":"Autocomplete.js","sources":["../../../../../../../lib/shared/ui/formElements/uncontrolled/autocomplete/Autocomplete.tsx"],"sourcesContent":["import { forwardRef, useState } from 'react'\nimport { type UseQueryOptions, type UseQueryResult } from '@tanstack/react-query'\nimport type { AutocompleteItemOption } from './types'\nimport { useDebounceValue } from '$/shared/hooks'\nimport { Combobox, type ComboboxProps, type ComboboxValue } from '$/shared/ui'\n\nexport interface AutocompleteBaseProps<TData>\n extends Omit<\n ComboboxProps<false>,\n 'options' | 'inputValue' | 'onInputChange' | 'searchable' | 'multiple' | 'value' | 'onChange'\n > {\n /**\n * Функция для запроса основанная на [@tanstack/query](https://tanstack.com/query/latest/docs/framework/react/overview)\n */\n query: (query: string, options?: Partial<UseQueryOptions<TData[]>>) => UseQueryResult<TData[]>\n /**\n * Параметры запроса\n */\n queryOptions?: Partial<UseQueryOptions<TData[]>>\n /**\n * Позволяет форматировать данные\n */\n formatter: (item: TData, index: number, array: TData[]) => AutocompleteItemOption<TData>\n /**\n * Значение инпута\n */\n value?: string\n /**\n * Handler инпута\n */\n onChange?: (value: string) => void\n /**\n * Стратегия управления полем\n * @variation `input-first` - источником правды является инпут\n * @variation `select-first` - источником правды является список\n * @default input-first\n */\n strategy?: 'input-first' | 'select-first'\n limit?: number\n}\n\nexport const AutocompleteBase = forwardRef(\n <TData,>(\n {\n formatter,\n query,\n queryOptions: initialQueryOptions,\n value,\n displayValue,\n limit = 0,\n onChange,\n strategy = 'input-first',\n ...props\n }: AutocompleteBaseProps<TData>,\n ref: React.ForwardedRef<HTMLInputElement>\n ) => {\n const [search, setSearch] = useState<string>(value ?? '')\n\n const inputValue = strategy === 'input-first' ? (value ?? '') : search\n const onInputChange = strategy === 'input-first' ? onChange : setSearch\n\n const debounceSearch = useDebounceValue(inputValue, 100)\n\n const queryOptions: Partial<UseQueryOptions<TData[]>> = {\n // enabled: limit > 0 ? debounceSearch.length >= limit : true,\n ...initialQueryOptions\n }\n\n const { data } = query(debounceSearch, queryOptions)\n\n const options = data && Array.isArray(data) ? data?.map(formatter) : []\n\n const onValueChange = (value: ComboboxValue<false>) => {\n if (!value) return\n\n if (onChange) onChange(displayValue ? displayValue(value) : value.label)\n }\n\n return (\n <Combobox\n {...props}\n ref={ref}\n options={options}\n searchable\n filterDisabled\n inputValue={inputValue}\n onInputChange={onInputChange}\n multiple={false}\n displayValue={displayValue}\n onChange={onValueChange}\n empty={debounceSearch.length < limit ? `Введите более ${limit} символов для поиска` : undefined}\n />\n )\n }\n) as <TData>(props: AutocompleteBaseProps<TData> & { ref: React.Ref<HTMLInputElement> }) => React.JSX.Element\n"],"names":["AutocompleteBase","forwardRef","formatter","query","initialQueryOptions","value","displayValue","limit","onChange","strategy","props","ref","search","setSearch","useState","inputValue","onInputChange","debounceSearch","useDebounceValue","queryOptions","data","options","jsx","Combobox"],"mappings":"q0CAyCO,MAAMA,GAAmBC,EAC9B,CACE,CACE,UAAAC,EACA,MAAAC,EACA,aAAcC,EACd,MAAAC,EACA,aAAAC,EACA,MAAAC,EAAQ,EACR,SAAAC,EACA,SAAAC,EAAW,cACX,GAAGC,CAAA,EAELC,IACG,CACH,KAAM,CAACC,EAAQC,CAAS,EAAIC,EAAiBT,GAAS,EAAE,EAElDU,EAAaN,IAAa,cAAiBJ,GAAS,GAAMO,EAC1DI,EAAgBP,IAAa,cAAgBD,EAAWK,EAExDI,EAAiBC,EAAiBH,EAAY,GAAG,EAEjDI,EAAkD,CAEtD,GAAGf,CAAA,EAGC,CAAE,KAAAgB,CAAA,EAASjB,EAAMc,EAAgBE,CAAY,EAE7CE,EAAUD,GAAQ,MAAM,QAAQA,CAAI,EAAIA,GAAA,YAAAA,EAAM,IAAIlB,GAAa,CAAA,EAQrE,OACEoB,EAACC,EAAA,CACE,GAAGb,EACJ,IAAAC,EACA,QAAAU,EACA,WAAU,GACV,eAAc,GACd,WAAAN,EACA,cAAAC,EACA,SAAU,GACV,aAAAV,EACA,SAjBmBD,GAAgC,CAChDA,GAEDG,GAAUA,EAASF,EAAeA,EAAaD,CAAK,EAAIA,EAAM,KAAK,CACzE,EAcI,MAAOY,EAAe,OAASV,EAAQ,iBAAiBA,CAAK,uBAAyB,MAAA,CAAA,CAG5F,CACF"}
@@ -1,2 +1,2 @@
1
- import{jsx as r,jsxs as h,Fragment as b}from"react/jsx-runtime";import{useEffect as l,useRef as g}from"react";import{createPortal as p}from"react-dom";import{modalOverlayAnimation as c,modalContentAnimation as k}from"./model/helpers.js";import{IframeModalContent as N}from"./ui/IframeModalContent.js";import{ModalHeader as j}from"./ui/ModalHeader.js";import{cn as m}from"../../utils/cn.js";import{AnimatePresence as A}from"../../../../node_modules/framer-motion/dist/es/components/AnimatePresence/index.js";import{motion as a}from"../../../../node_modules/framer-motion/dist/es/render/components/motion/proxy.js";const F=({title:u,children:i,isModalOpen:e,isPortal:d=!0,portalContainer:y=(w=>(w=globalThis==null?void 0:globalThis.document)==null?void 0:w.body)(),closeModal:n,classes:o,iframe:v})=>{l(()=>(e&&(document.body.style.overflow="hidden"),()=>{document.body.style.overflow="visible"}),[e]);const x=g(null),f=r(A,{children:e&&r(a.div,{ref:t=>t==null?void 0:t.focus(),tabIndex:-1,onMouseDown:n,className:m("fixed inset-0 flex h-screen w-screen items-center justify-center bg-color-overlay",{"z-1000":!d},o==null?void 0:o.overlay),onKeyDown:t=>{t.key==="Escape"&&n()},"data-test-id":"modal-overlay",...c,children:h(a.div,{onClick:t=>t.stopPropagation(),onMouseDown:t=>t.stopPropagation(),className:m("w-full max-w-[600px] rounded-md bg-color-white px-4 py-6 shadow-sm desktop:px-6 desktop:py-8",o==null?void 0:o.modal),"data-test-id":"modal",...k,children:[r(j,{title:u,closeModal:n,classes:o==null?void 0:o.modalHeader}),v?r(N,{ref:x,className:m("mt-4",o==null?void 0:o.content),children:t=>p(i,t)}):r("div",{className:m("mt-4",o==null?void 0:o.content),children:i})]})})});return r(b,{children:d?p(f,y):f})};export{F as Modal};
1
+ import{jsx as r,jsxs as D,Fragment as M}from"react/jsx-runtime";import{useEffect as R,useRef as f}from"react";import{createPortal as y}from"react-dom";import{modalOverlayAnimation as N,modalContentAnimation as j}from"./model/helpers.js";import{IframeModalContent as k}from"./ui/IframeModalContent.js";import{ModalHeader as A}from"./ui/ModalHeader.js";import{cn as e}from"../../utils/cn.js";import{mergeRefs as C}from"../../utils/mergeRefs.js";import{AnimatePresence as E}from"../../../../node_modules/framer-motion/dist/es/components/AnimatePresence/index.js";import{motion as l}from"../../../../node_modules/framer-motion/dist/es/render/components/motion/proxy.js";const q=({title:c,children:u,isModalOpen:n,isPortal:a=!0,portalContainer:v=(h=>(h=globalThis==null?void 0:globalThis.document)==null?void 0:h.body)(),closeModal:m,classes:o,iframe:w})=>{R(()=>(n&&(document.body.style.overflow="hidden"),()=>{document.body.style.overflow="visible"}),[n]);const x=f(null),i=f(null),d=f(!1),b=t=>{t.target===i.current&&(d.current=!0)},g=t=>{d.current&&t.target===i.current&&m(),d.current=!1},p=r(E,{children:n&&r(l.div,{ref:C(t=>t==null?void 0:t.focus(),i),tabIndex:-1,onMouseDown:b,onMouseUp:g,className:e("fixed inset-0 flex h-screen w-screen items-center justify-center bg-color-overlay",{"z-1000":!a},o==null?void 0:o.overlay),onKeyDown:t=>{t.key==="Escape"&&m()},"data-test-id":"modal-overlay",...N,children:D(l.div,{onMouseDown:t=>t.stopPropagation(),className:e("w-full max-w-[600px] rounded-md bg-color-white px-4 py-6 shadow-sm desktop:px-6 desktop:py-8",o==null?void 0:o.modal),"data-test-id":"modal",...j,children:[r(A,{title:c,closeModal:m,classes:o==null?void 0:o.modalHeader}),w?r(k,{ref:x,className:e("mt-4",o==null?void 0:o.content),children:t=>y(u,t)}):r("div",{className:e("mt-4",o==null?void 0:o.content),children:u})]})})});return r(M,{children:a?y(p,v):p})};export{q as Modal};
2
2
  //# sourceMappingURL=Modal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Modal.js","sources":["../../../../../lib/shared/ui/modal/Modal.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { useEffect, useRef } from 'react'\nimport { createPortal } from 'react-dom'\nimport { AnimatePresence, motion } from 'framer-motion'\nimport { modalContentAnimation, modalOverlayAnimation } from './model/helpers'\nimport { IframeModalContent } from './ui/IframeModalContent'\nimport { ModalHeader, type TModalHeaderClasses } from './ui/ModalHeader'\nimport { cn } from '$/shared/utils'\n\ntype ModalClasses = {\n overlay?: string\n modal?: string\n content?: string\n modalHeader?: TModalHeaderClasses\n}\n\nexport interface ModalProps {\n children: React.ReactElement\n isModalOpen: boolean\n classes?: ModalClasses\n isPortal?: boolean\n portalContainer?: HTMLElement\n title?: string | React.ReactElement\n closeModal: () => void\n iframe?: boolean\n}\n\nexport const Modal = ({\n title,\n children,\n isModalOpen,\n isPortal = true,\n portalContainer = globalThis?.document?.body,\n closeModal,\n classes,\n iframe\n}: ModalProps) => {\n useEffect(() => {\n if (isModalOpen) {\n document.body.style.overflow = 'hidden'\n }\n return () => {\n document.body.style.overflow = 'visible'\n }\n }, [isModalOpen])\n const iframeRef = useRef<HTMLIFrameElement>(null)\n\n const modalBody = (\n <AnimatePresence>\n {isModalOpen && (\n <motion.div\n ref={(node) => node?.focus()}\n tabIndex={-1}\n onMouseDown={closeModal}\n className={cn(\n 'fixed inset-0 flex h-screen w-screen items-center justify-center bg-color-overlay',\n { 'z-1000': !isPortal },\n classes?.overlay\n )}\n onKeyDown={(event) => {\n if (event.key === 'Escape') {\n closeModal()\n }\n }}\n data-test-id='modal-overlay'\n {...modalOverlayAnimation}\n >\n <motion.div\n onClick={(event) => event.stopPropagation()}\n onMouseDown={(event) => event.stopPropagation()}\n className={cn(\n 'w-full max-w-[600px] rounded-md bg-color-white px-4 py-6 shadow-sm desktop:px-6 desktop:py-8',\n classes?.modal\n )}\n data-test-id='modal'\n {...modalContentAnimation}\n >\n <ModalHeader title={title} closeModal={closeModal} classes={classes?.modalHeader} />\n {iframe ? (\n <IframeModalContent ref={iframeRef} className={cn('mt-4', classes?.content)}>\n {(iframeBody) => createPortal(children, iframeBody)}\n </IframeModalContent>\n ) : (\n <div className={cn('mt-4', classes?.content)}>{children}</div>\n )}\n </motion.div>\n </motion.div>\n )}\n </AnimatePresence>\n )\n return <>{isPortal ? createPortal(modalBody, portalContainer) : modalBody}</>\n}\n"],"names":["Modal","title","children","isModalOpen","isPortal","portalContainer","_a","closeModal","classes","iframe","useEffect","iframeRef","useRef","modalBody","jsx","AnimatePresence","motion","node","cn","event","modalOverlayAnimation","jsxs","modalContentAnimation","ModalHeader","IframeModalContent","iframeBody","createPortal"],"mappings":"qmBA6BO,MAAMA,EAAQ,CAAC,CACpB,MAAAC,EACA,SAAAC,EACA,YAAAC,EACA,SAAAC,EAAW,GACX,gBAAAC,GAAkBC,MAAA,mCAAY,WAAZ,YAAAA,EAAsB,QACxC,WAAAC,EACA,QAAAC,EACA,OAAAC,CACF,IAAkB,CAChBC,EAAU,KACJP,IACF,SAAS,KAAK,MAAM,SAAW,UAE1B,IAAM,CACX,SAAS,KAAK,MAAM,SAAW,SACjC,GACC,CAACA,CAAW,CAAC,EAChB,MAAMQ,EAAYC,EAA0B,IAAI,EAE1CC,EACJC,EAACC,EAAA,CACE,SAAAZ,GACCW,EAACE,EAAO,IAAP,CACC,IAAMC,GAASA,GAAA,YAAAA,EAAM,QACrB,SAAU,GACV,YAAaV,EACb,UAAWW,EACT,oFACA,CAAE,SAAU,CAACd,CAAA,EACbI,GAAA,YAAAA,EAAS,OAAA,EAEX,UAAYW,GAAU,CAChBA,EAAM,MAAQ,UAChBZ,EAAA,CAEJ,EACA,eAAa,gBACZ,GAAGa,EAEJ,SAAAC,EAACL,EAAO,IAAP,CACC,QAAUG,GAAUA,EAAM,gBAAA,EAC1B,YAAcA,GAAUA,EAAM,gBAAA,EAC9B,UAAWD,EACT,+FACAV,GAAA,YAAAA,EAAS,KAAA,EAEX,eAAa,QACZ,GAAGc,EAEJ,SAAA,CAAAR,EAACS,EAAA,CAAY,MAAAtB,EAAc,WAAAM,EAAwB,QAASC,GAAA,YAAAA,EAAS,YAAa,EACjFC,EACCK,EAACU,EAAA,CAAmB,IAAKb,EAAW,UAAWO,EAAG,OAAQV,GAAA,YAAAA,EAAS,OAAO,EACvE,SAACiB,GAAeC,EAAaxB,EAAUuB,CAAU,EACpD,EAEAX,EAAC,MAAA,CAAI,UAAWI,EAAG,OAAQV,GAAA,YAAAA,EAAS,OAAO,EAAI,SAAAN,CAAA,CAAS,CAAA,CAAA,CAAA,CAE5D,CAAA,EAGN,EAEF,YAAU,SAAAE,EAAWsB,EAAab,EAAWR,CAAe,EAAIQ,EAAU,CAC5E"}
1
+ {"version":3,"file":"Modal.js","sources":["../../../../../lib/shared/ui/modal/Modal.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { useEffect, useRef } from 'react' // useState больше не нужен\nimport { createPortal } from 'react-dom'\nimport { AnimatePresence, motion } from 'framer-motion'\nimport { modalContentAnimation, modalOverlayAnimation } from './model/helpers'\nimport { IframeModalContent } from './ui/IframeModalContent'\nimport { ModalHeader, type TModalHeaderClasses } from './ui/ModalHeader'\nimport { cn, mergeRefs } from '$/shared/utils'\n\ntype ModalClasses = {\n overlay?: string\n modal?: string\n content?: string\n modalHeader?: TModalHeaderClasses\n}\n\nexport interface ModalProps {\n children: React.ReactElement\n isModalOpen: boolean\n classes?: ModalClasses\n isPortal?: boolean\n portalContainer?: HTMLElement\n title?: string | React.ReactElement\n closeModal: () => void\n iframe?: boolean\n}\n\nexport const Modal = ({\n title,\n children,\n isModalOpen,\n isPortal = true,\n portalContainer = globalThis?.document?.body,\n closeModal,\n classes,\n iframe\n}: ModalProps) => {\n useEffect(() => {\n if (isModalOpen) {\n document.body.style.overflow = 'hidden'\n }\n return () => {\n document.body.style.overflow = 'visible'\n }\n }, [isModalOpen])\n\n const iframeRef = useRef<HTMLIFrameElement>(null)\n const overlayRef = useRef<HTMLDivElement>(null)\n const isMouseDownOnOverlayRef = useRef(false)\n\n const handleMouseDown = (e: React.MouseEvent<HTMLDivElement>) => {\n if (e.target === overlayRef.current) {\n isMouseDownOnOverlayRef.current = true\n }\n }\n\n const handleMouseUp = (e: React.MouseEvent<HTMLDivElement>) => {\n if (isMouseDownOnOverlayRef.current && e.target === overlayRef.current) {\n closeModal()\n }\n isMouseDownOnOverlayRef.current = false\n }\n\n const modalBody = (\n <AnimatePresence>\n {isModalOpen && (\n <motion.div\n ref={mergeRefs((node) => node?.focus(), overlayRef)}\n tabIndex={-1}\n onMouseDown={handleMouseDown}\n onMouseUp={handleMouseUp}\n className={cn(\n 'fixed inset-0 flex h-screen w-screen items-center justify-center bg-color-overlay',\n { 'z-1000': !isPortal },\n classes?.overlay\n )}\n onKeyDown={(event) => {\n if (event.key === 'Escape') {\n closeModal()\n }\n }}\n data-test-id='modal-overlay'\n {...modalOverlayAnimation}\n >\n <motion.div\n onMouseDown={(event) => event.stopPropagation()}\n className={cn(\n 'w-full max-w-[600px] rounded-md bg-color-white px-4 py-6 shadow-sm desktop:px-6 desktop:py-8',\n classes?.modal\n )}\n data-test-id='modal'\n {...modalContentAnimation}\n >\n <ModalHeader title={title} closeModal={closeModal} classes={classes?.modalHeader} />\n {iframe ? (\n <IframeModalContent ref={iframeRef} className={cn('mt-4', classes?.content)}>\n {(iframeBody) => createPortal(children, iframeBody)}\n </IframeModalContent>\n ) : (\n <div className={cn('mt-4', classes?.content)}>{children}</div>\n )}\n </motion.div>\n </motion.div>\n )}\n </AnimatePresence>\n )\n return <>{isPortal ? createPortal(modalBody, portalContainer) : modalBody}</>\n}\n"],"names":["Modal","title","children","isModalOpen","isPortal","portalContainer","_a","closeModal","classes","iframe","useEffect","iframeRef","useRef","overlayRef","isMouseDownOnOverlayRef","handleMouseDown","e","handleMouseUp","modalBody","jsx","AnimatePresence","motion","mergeRefs","node","cn","event","modalOverlayAnimation","jsxs","modalContentAnimation","ModalHeader","IframeModalContent","iframeBody","createPortal"],"mappings":"0pBA6BO,MAAMA,EAAQ,CAAC,CACpB,MAAAC,EACA,SAAAC,EACA,YAAAC,EACA,SAAAC,EAAW,GACX,gBAAAC,GAAkBC,MAAA,mCAAY,WAAZ,YAAAA,EAAsB,QACxC,WAAAC,EACA,QAAAC,EACA,OAAAC,CACF,IAAkB,CAChBC,EAAU,KACJP,IACF,SAAS,KAAK,MAAM,SAAW,UAE1B,IAAM,CACX,SAAS,KAAK,MAAM,SAAW,SACjC,GACC,CAACA,CAAW,CAAC,EAEhB,MAAMQ,EAAYC,EAA0B,IAAI,EAC1CC,EAAaD,EAAuB,IAAI,EACxCE,EAA0BF,EAAO,EAAK,EAEtCG,EAAmBC,GAAwC,CAC3DA,EAAE,SAAWH,EAAW,UAC1BC,EAAwB,QAAU,GAEtC,EAEMG,EAAiBD,GAAwC,CACzDF,EAAwB,SAAWE,EAAE,SAAWH,EAAW,SAC7DN,EAAA,EAEFO,EAAwB,QAAU,EACpC,EAEMI,EACJC,EAACC,EAAA,CACE,SAAAjB,GACCgB,EAACE,EAAO,IAAP,CACC,IAAKC,EAAWC,GAASA,GAAA,YAAAA,EAAM,QAASV,CAAU,EAClD,SAAU,GACV,YAAaE,EACb,UAAWE,EACX,UAAWO,EACT,oFACA,CAAE,SAAU,CAACpB,CAAA,EACbI,GAAA,YAAAA,EAAS,OAAA,EAEX,UAAYiB,GAAU,CAChBA,EAAM,MAAQ,UAChBlB,EAAA,CAEJ,EACA,eAAa,gBACZ,GAAGmB,EAEJ,SAAAC,EAACN,EAAO,IAAP,CACC,YAAcI,GAAUA,EAAM,gBAAA,EAC9B,UAAWD,EACT,+FACAhB,GAAA,YAAAA,EAAS,KAAA,EAEX,eAAa,QACZ,GAAGoB,EAEJ,SAAA,CAAAT,EAACU,EAAA,CAAY,MAAA5B,EAAc,WAAAM,EAAwB,QAASC,GAAA,YAAAA,EAAS,YAAa,EACjFC,EACCU,EAACW,EAAA,CAAmB,IAAKnB,EAAW,UAAWa,EAAG,OAAQhB,GAAA,YAAAA,EAAS,OAAO,EACvE,SAACuB,GAAeC,EAAa9B,EAAU6B,CAAU,EACpD,EAEAZ,EAAC,MAAA,CAAI,UAAWK,EAAG,OAAQhB,GAAA,YAAAA,EAAS,OAAO,EAAI,SAAAN,CAAA,CAAS,CAAA,CAAA,CAAA,CAE5D,CAAA,EAGN,EAEF,YAAU,SAAAE,EAAW4B,EAAad,EAAWb,CAAe,EAAIa,EAAU,CAC5E"}