@scbt-ecom/ui 0.176.1 → 0.178.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/tabSwitcher/TabsSwitcher.js +1 -1
- package/dist/lib/shared/ui/tabSwitcher/TabsSwitcher.js.map +1 -1
- package/dist/lib/shared/ui/tabSwitcher/ui/TabContent.js +1 -1
- package/dist/lib/shared/ui/tabSwitcher/ui/TabContent.js.map +1 -1
- package/dist/lib/widgets/dynamicForm/DynamicForm.js +1 -1
- package/dist/lib/widgets/dynamicForm/DynamicForm.js.map +1 -1
- package/dist/lib/widgets/seoHeader/ui/desktop/CategoriesDesktop.js +1 -1
- package/dist/lib/widgets/seoHeader/ui/desktop/CategoriesDesktop.js.map +1 -1
- package/dist/lib/widgets/seoHeader/ui/desktop/rootTab/RootTab.js.map +1 -1
- package/dist/stats.html +1 -1
- package/dist/types/lib/shared/ui/tabSwitcher/TabsSwitcher.d.ts +2 -1
- package/dist/types/lib/shared/ui/tabSwitcher/ui/TabContent.d.ts +3 -1
- package/dist/types/lib/widgets/dynamicForm/model/types.d.ts +1 -0
- package/dist/types/lib/widgets/seoHeader/ui/desktop/rootTab/RootTab.d.ts +0 -1
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as
|
|
1
|
+
import{jsxs as u,jsx as e}from"react/jsx-runtime";import*as o from"@radix-ui/react-tabs";import{TabContent as g}from"./ui/TabContent.js";import{cn as r}from"../../utils/cn.js";const b=({renderContent:a,defaultActiveTabId:n="1",value:i,onChangeTab:c,saveState:s=void 0,classes:t})=>u(o.Root,{value:i,onValueChange:c,defaultValue:n,className:r("flex flex-col",t?.root),activationMode:"manual",children:[e(o.List,{className:r("flex items-center gap-4",t?.list),children:a?.triggers?.map(({id:l,label:m})=>e(o.Trigger,{value:l,className:r('desk-body-regular-l cursor-pointer rounded-sm bg-color-blue-grey-100 px-4 py-2 text-color-secondary outline outline-2 outline-offset-2 outline-transparent transition-colors hover:bg-color-blue-grey-200 hover:text-color-secondary data-[state="active"]:!bg-color-primary-default data-[state="active"]:!text-color-white',t?.trigger),children:m},l))}),e(g,{contents:a?.contents,classes:t?.tabContent,saveState:s,value:i})]});export{b as TabsSwitcher};
|
|
2
2
|
//# sourceMappingURL=TabsSwitcher.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabsSwitcher.js","sources":["../../../../../lib/shared/ui/tabSwitcher/TabsSwitcher.tsx"],"sourcesContent":["'use client'\n\nimport * as TabPrimitive from '@radix-ui/react-tabs'\nimport type { TabRenderContent, TabsClasses } from './model/types'\nimport { TabContent } from './ui/TabContent'\nimport { cn } from '$/shared/utils'\n\nexport interface TabsSwitcherProps {\n renderContent: TabRenderContent\n value: string\n onChangeTab: (tab: string) => void\n defaultActiveTabId?: string\n classes?: TabsClasses\n}\n\nexport const TabsSwitcher = ({
|
|
1
|
+
{"version":3,"file":"TabsSwitcher.js","sources":["../../../../../lib/shared/ui/tabSwitcher/TabsSwitcher.tsx"],"sourcesContent":["'use client'\n\nimport * as TabPrimitive from '@radix-ui/react-tabs'\nimport type { TabRenderContent, TabsClasses } from './model/types'\nimport { TabContent } from './ui/TabContent'\nimport { cn } from '$/shared/utils'\n\nexport interface TabsSwitcherProps {\n renderContent: TabRenderContent\n value: string\n onChangeTab: (tab: string) => void\n defaultActiveTabId?: string\n classes?: TabsClasses\n saveState?: true | undefined\n}\n\nexport const TabsSwitcher = ({\n renderContent,\n defaultActiveTabId = '1',\n value,\n onChangeTab,\n saveState = undefined,\n classes\n}: TabsSwitcherProps) => {\n return (\n <TabPrimitive.Root\n value={value}\n onValueChange={onChangeTab}\n defaultValue={defaultActiveTabId}\n className={cn('flex flex-col', classes?.root)}\n activationMode='manual'\n >\n <TabPrimitive.List className={cn('flex items-center gap-4', classes?.list)}>\n {renderContent?.triggers?.map(({ id, label }) => (\n <TabPrimitive.Trigger\n key={id}\n value={id}\n className={cn(\n 'desk-body-regular-l cursor-pointer rounded-sm bg-color-blue-grey-100 px-4 py-2 text-color-secondary outline outline-2 outline-offset-2 outline-transparent transition-colors hover:bg-color-blue-grey-200 hover:text-color-secondary data-[state=\"active\"]:!bg-color-primary-default data-[state=\"active\"]:!text-color-white',\n classes?.trigger\n )}\n >\n {label}\n </TabPrimitive.Trigger>\n ))}\n </TabPrimitive.List>\n <TabContent contents={renderContent?.contents} classes={classes?.tabContent} saveState={saveState} value={value} />\n </TabPrimitive.Root>\n )\n}\n"],"names":["TabsSwitcher","renderContent","defaultActiveTabId","value","onChangeTab","saveState","classes","jsxs","TabPrimitive","cn","jsx","id","label","TabContent"],"mappings":"gLAgBO,MAAMA,EAAe,CAAC,CAC3B,cAAAC,EACA,mBAAAC,EAAqB,IACrB,MAAAC,EACA,YAAAC,EACA,UAAAC,EAAY,OACZ,QAAAC,CACF,IAEIC,EAACC,EAAa,KAAb,CACC,MAAAL,EACA,cAAeC,EACf,aAAcF,EACd,UAAWO,EAAG,gBAAiBH,GAAS,IAAI,EAC5C,eAAe,SAEf,SAAA,CAAAI,EAACF,EAAa,KAAb,CAAkB,UAAWC,EAAG,0BAA2BH,GAAS,IAAI,EACtE,SAAAL,GAAe,UAAU,IAAI,CAAC,CAAE,GAAAU,EAAI,MAAAC,KACnCF,EAACF,EAAa,QAAb,CAEC,MAAOG,EACP,UAAWF,EACT,+TACAH,GAAS,OAAA,EAGV,SAAAM,CAAA,EAPID,CAAA,CASR,EACH,EACAD,EAACG,GAAW,SAAUZ,GAAe,SAAU,QAASK,GAAS,WAAY,UAAAD,EAAsB,MAAAF,CAAA,CAAc,CAAA,CAAA,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as e}from"react/jsx-runtime";import*as m from"@radix-ui/react-tabs";import{Accordion as
|
|
1
|
+
import{jsx as e}from"react/jsx-runtime";import*as m from"@radix-ui/react-tabs";import{Accordion as u}from"../../accordion/Accordion.js";import{cn as i}from"../../../utils/cn.js";const v=({classes:r,contents:p,saveState:t,value:f})=>e("div",{className:i("flex flex-col gap-4",r?.contentsWrapper),children:p?.map(({id:n,body:l,accordion:o})=>{const c=f===n;return o&&o?.title?e(m.Content,{forceMount:t,hidden:t?!c:void 0,value:n,className:i("py-8",r?.content),children:e(u,{label:o?.title,children:l})},n):e(m.Content,{forceMount:t,hidden:t?!c:void 0,value:n,className:i("py-8",r?.content),children:l},n)})});export{v as TabContent};
|
|
2
2
|
//# sourceMappingURL=TabContent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabContent.js","sources":["../../../../../../lib/shared/ui/tabSwitcher/ui/TabContent.tsx"],"sourcesContent":["import * as TabPrimitive from '@radix-ui/react-tabs'\nimport { Accordion, type ITabContent } from '$/shared/ui'\nimport { cn } from '$/shared/utils'\n\nexport type TabContentClasses = {\n content?: string\n contentsWrapper?: string\n}\n\nexport interface TabContentProps {\n contents: ITabContent[]\n classes?: TabContentClasses\n}\n\nexport const TabContent = ({ classes, contents }: TabContentProps) => {\n return (\n <div className={cn('flex flex-col gap-4', classes?.contentsWrapper)}>\n {contents?.map(({ id, body, accordion }) => {\n if (accordion && accordion?.title) {\n return (\n <TabPrimitive.Content key={id}
|
|
1
|
+
{"version":3,"file":"TabContent.js","sources":["../../../../../../lib/shared/ui/tabSwitcher/ui/TabContent.tsx"],"sourcesContent":["import * as TabPrimitive from '@radix-ui/react-tabs'\nimport { Accordion, type ITabContent } from '$/shared/ui'\nimport { cn } from '$/shared/utils'\n\nexport type TabContentClasses = {\n content?: string\n contentsWrapper?: string\n}\n\nexport interface TabContentProps {\n contents: ITabContent[]\n classes?: TabContentClasses\n saveState?: true | undefined\n value: string\n}\n\nexport const TabContent = ({ classes, contents, saveState, value }: TabContentProps) => {\n return (\n <div className={cn('flex flex-col gap-4', classes?.contentsWrapper)}>\n {contents?.map(({ id, body, accordion }) => {\n const isActive = value === id\n\n if (accordion && accordion?.title) {\n return (\n <TabPrimitive.Content\n forceMount={saveState}\n hidden={saveState ? !isActive : undefined}\n key={id}\n value={id}\n className={cn('py-8', classes?.content)}\n >\n <Accordion label={accordion?.title}>{body}</Accordion>\n </TabPrimitive.Content>\n )\n }\n\n return (\n <TabPrimitive.Content\n forceMount={saveState}\n hidden={saveState ? !isActive : undefined}\n key={id}\n value={id}\n className={cn('py-8', classes?.content)}\n >\n {body}\n </TabPrimitive.Content>\n )\n })}\n </div>\n )\n}\n"],"names":["TabContent","classes","contents","saveState","value","jsx","cn","id","body","accordion","isActive","TabPrimitive","Accordion"],"mappings":"kLAgBO,MAAMA,EAAa,CAAC,CAAE,QAAAC,EAAS,SAAAC,EAAU,UAAAC,EAAW,MAAAC,KAEvDC,EAAC,MAAA,CAAI,UAAWC,EAAG,sBAAuBL,GAAS,eAAe,EAC/D,SAAAC,GAAU,IAAI,CAAC,CAAE,GAAAK,EAAI,KAAAC,EAAM,UAAAC,KAAgB,CAC1C,MAAMC,EAAWN,IAAUG,EAE3B,OAAIE,GAAaA,GAAW,MAExBJ,EAACM,EAAa,QAAb,CACC,WAAYR,EACZ,OAAQA,EAAY,CAACO,EAAW,OAEhC,MAAOH,EACP,UAAWD,EAAG,OAAQL,GAAS,OAAO,EAEtC,SAAAI,EAACO,EAAA,CAAU,MAAOH,GAAW,MAAQ,SAAAD,CAAA,CAAK,CAAA,EAJrCD,CAAA,EAUTF,EAACM,EAAa,QAAb,CACC,WAAYR,EACZ,OAAQA,EAAY,CAACO,EAAW,OAEhC,MAAOH,EACP,UAAWD,EAAG,OAAQL,GAAS,OAAO,EAErC,SAAAO,CAAA,EAJID,CAAA,CAOX,CAAC,CAAA,CACH"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as e,jsxs as n}from"react/jsx-runtime";import{useState as
|
|
1
|
+
import{jsx as e,jsxs as n}from"react/jsx-runtime";import{useState as J,useEffect as K,createElement as O}from"react";import{getDynamicSchema as T}from"../../../src/shared/utils/getDynamicSchema.js";import{ZodUtils as W}from"../../shared/validation/utils/zodUtils.js";import{getFieldsProgress as X,withApprovement as Y}from"./model/helpers.js";import{useFieldsProgress as _}from"../../shared/hooks/useFieldsProgress.js";import{QueryClientProvider as $}from"../queryClientProvider/QueryClientProvider.js";import{cn as t}from"../../shared/utils/cn.js";import{Esia as P}from"../esia/Esia.js";import{ProgressBar as G}from"../../shared/ui/progressBar/ProgressBar.js";import{HTMLRenderer as h}from"../htmlParser/HTMLRenderer.js";import{FieldMapper as ee}from"../fieldMapper/FieldMapper.js";import{useControlledForm as te}from"../../shared/hooks/useControlledForm.js";import{ResponsiveContainer as oe}from"../../shared/ui/responsiveContainer/ResponsiveContainer.js";import{Icon as re}from"../../shared/ui/icon/Icon.js";import{Heading as B}from"../../shared/ui/heading/Heading.js";import{Button as le}from"../../shared/ui/button/Button.js";const Se=({fields:c,title:u,progress:l,approvement:a,chips:s,submitProps:E,classes:o,buttonGroup:d,ssoAuthorizationTop:b=!1,backgroundColor:k,disabledButtons:v,esiaConfig:r})=>{const{submitCallback:x,onErrorCallback:C,validCallback:F}=E||{},[m,V]=J(a.type==="checkbox"?a.defaultValue:!1),f=T(c),j=W.getZodDefaults(f),{control:g,handleSubmit:D,getValues:H,watch:L,trigger:M,formState:{isValid:p,errors:y}}=te({schema:f,defaultValues:j,mode:"onBlur"});K(()=>{F?.(p)},[p]);const R=X(l,c),Z=_({control:g,fields:R||[],schema:f}),z=i=>{x&&x({...i,agree:m})},[w,N]=L(["fio","phone"]),I=!!w&&!y.fio,Q=!!N&&!y.phone,U=!I||!Q||!m,S=async()=>{if(U){await M(["fio","phone"]),console.error("[Error] - Empty field fio or phone",{fio:w,phone:N});return}r?.onClick&&r.onClick({...H(),agree:m})};return e($,{children:e("section",{id:"form","data-test-id":"form",className:t("w-full",o?.root,k&&"desktop:py-[80px]"),style:{backgroundColor:k},children:n(oe,{className:t("border-warm-grey-200 px-4 desktop:w-[636px] desktop:gap-8 desktop:p-14","relative mx-auto flex flex-col gap-6 rounded-sm bg-color-white py-8 desktop:border"),children:[s.enabled&&n("div",{className:t("desk-body-regular-l flex items-center gap-x-2 rounded-sm desktop:absolute","bg-color-blue-grey-100 px-2 py-1 text-color-tetriary","right-4 top-4 w-max",o?.chips?.root),children:[s.image&&e(re,{name:s.image,className:t("size-6",o?.chips?.icon)}),s.content]}),e(B,{as:"h2",className:t("text-color-dark desktop:hidden",o?.title),children:u}),e(B,{as:"h3",className:t("text-color-dark mobile:hidden",o?.title),children:u}),b&&r&&r.mode!=="off"&&e(P,{...r,onClick:S}),n("form",{"data-valid":p,onSubmit:D(z,i=>C?.(i)),className:t("flex w-full flex-col gap-y-6","desktop:gap-y-8",o?.form),children:[l.enabled&&e(G,{progress:Z,topContent:e(h,{html:l.title}),leftSubtitle:e(h,{html:l.leftSubtitle}),rightSubtitle:e(h,{html:l.rightSubtitle}),maxPercent:l.maxPercent,classes:o?.progressBar}),e(ee,{control:g,fields:c}),n("div",{className:t("mob-body-regular-s flex flex-col items-start justify-between gap-4",{"desktop:flex-row desktop:items-center":d.length===1}),children:[Y(a,m,V,o?.approvement),e("div",{className:t("flex w-full flex-col items-center justify-between gap-4 desktop:flex-row",{"desktop:w-fit":d.length===1}),children:d?.map((i,q)=>{const A=i.type==="submit"&&a.type==="checkbox"?!m:!1;return O(le,{...i,size:"lg",key:q,disabled:v||A,className:t("w-full whitespace-nowrap",{"desktop:!w-fit":d.length===1},{"w-full":!!a},o?.submit)})})})]}),!b&&r&&r.mode!=="off"&&e(P,{...r,onClick:S})]})]})})})};export{Se as DynamicForm,Se as default};
|
|
2
2
|
//# sourceMappingURL=DynamicForm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DynamicForm.js","sources":["../../../../lib/widgets/dynamicForm/DynamicForm.tsx"],"sourcesContent":["import { useState } from 'react'\nimport { type Control, type SubmitHandler } from 'react-hook-form'\nimport { type TypeOf } from 'zod'\nimport { Esia, type EsiaProps } from '../esia'\nimport { HTMLRenderer } from '../htmlParser'\nimport {\n type Approvement,\n type ApprovementClasses,\n type ApprovementType,\n type Chips,\n type ChipsClasses,\n type ChipsType,\n getFieldsProgress,\n type Progress,\n type ProgressField,\n type ProgressType,\n type SubmitProps,\n withApprovement\n} from './model'\nimport { type FieldValidation, getDynamicSchema } from '@/shared/utils'\nimport { type BackgroundColors } from '$/shared/constants'\nimport { useControlledForm, useFieldsProgress } from '$/shared/hooks'\nimport { Button, type ButtonProps, type CheckedState, Heading, Icon, ProgressBar, ResponsiveContainer } from '$/shared/ui'\nimport { cn } from '$/shared/utils'\nimport { ZodUtils } from '$/shared/validation'\nimport { type FieldElement, FieldMapper } from '$/widgets/fieldMapper'\nimport { QueryClientProvider } from '$/widgets/queryClientProvider'\n\nexport type DynamicFormClasses = {\n root?: string\n title?: string\n fields?: string\n form?: string\n chips?: ChipsClasses\n approvement?: ApprovementClasses\n progressBar?: React.ComponentProps<typeof ProgressBar>['classes']\n submit?: string\n}\n\nexport type DynamicFormProps<AType extends ApprovementType, CType extends ChipsType, PType extends ProgressType> = {\n fields: FieldElement<any, any, { validation: FieldValidation; progress: ProgressField }>[]\n ssoAuthorizationTop: boolean\n title: string\n progress: Progress<PType>\n approvement: Approvement<AType>\n chips: Chips<CType>\n submitProps?: SubmitProps\n classes?: DynamicFormClasses\n buttonGroup: ButtonProps[]\n backgroundColor?: BackgroundColors\n disabledButtons?: boolean\n esiaConfig?: EsiaProps\n}\n\nexport const DynamicForm = <AType extends ApprovementType, CType extends ChipsType, PType extends ProgressType>({\n fields,\n title,\n progress,\n approvement,\n chips,\n submitProps,\n classes,\n buttonGroup,\n ssoAuthorizationTop = false,\n backgroundColor,\n disabledButtons,\n esiaConfig\n}: DynamicFormProps<AType, CType, PType>) => {\n const { submitCallback, onErrorCallback } = submitProps || {}\n\n const [checked, onCheckedChange] = useState<CheckedState>(approvement.type === 'checkbox' ? approvement.defaultValue : false)\n\n const schema = getDynamicSchema(fields)\n const defaultValues = ZodUtils.getZodDefaults(schema)\n\n const {\n control,\n handleSubmit,\n getValues,\n watch,\n trigger,\n formState: { isValid, errors }\n } = useControlledForm({\n schema,\n defaultValues,\n mode: 'onBlur'\n })\n\n const fieldsProgress = getFieldsProgress(progress, fields)\n\n const formattedProgress = useFieldsProgress({ control, fields: fieldsProgress || [], schema })\n\n const onSubmit: SubmitHandler<TypeOf<typeof schema>> = (values) => {\n if (submitCallback) submitCallback({ ...values, agree: checked })\n }\n\n const [fio, phone] = watch(['fio', 'phone'])\n const isFioValid = Boolean(fio) && !errors.fio\n const isPhoneValid = Boolean(phone) && !errors.phone\n const disabledEsia = !isFioValid || !isPhoneValid || !checked\n\n const handleClickEsia = async () => {\n if (disabledEsia) {\n // Триггерим валидацию для полей fio и phone\n await trigger(['fio', 'phone'])\n console.error('[Error] - Empty field fio or phone', { fio, phone })\n return\n }\n\n if (esiaConfig?.onClick) {\n esiaConfig.onClick({ ...getValues(), agree: checked })\n }\n }\n\n return (\n <QueryClientProvider>\n <section\n id='form'\n data-test-id='form'\n className={cn('w-full', classes?.root, backgroundColor && `desktop:py-[80px]`)}\n style={{ backgroundColor }}\n >\n <ResponsiveContainer\n className={cn(\n 'border-warm-grey-200 px-4 desktop:w-[636px] desktop:gap-8 desktop:p-14',\n 'relative mx-auto flex flex-col gap-6 rounded-sm bg-color-white py-8 desktop:border'\n )}\n >\n {chips.enabled && (\n <div\n className={cn(\n 'desk-body-regular-l flex items-center gap-x-2 rounded-sm desktop:absolute',\n 'bg-color-blue-grey-100 px-2 py-1 text-color-tetriary',\n 'right-4 top-4 w-max',\n classes?.chips?.root\n )}\n >\n {chips.image && <Icon name={chips.image} className={cn('size-6', classes?.chips?.icon)} />}\n {chips.content}\n </div>\n )}\n <Heading as='h2' className={cn('text-color-dark desktop:hidden', classes?.title)}>\n {title}\n </Heading>\n <Heading as='h3' className={cn('text-color-dark mobile:hidden', classes?.title)}>\n {title}\n </Heading>\n {ssoAuthorizationTop && esiaConfig && esiaConfig.mode !== 'off' && <Esia {...esiaConfig} onClick={handleClickEsia} />}\n <form\n data-valid={isValid}\n onSubmit={handleSubmit(onSubmit, (error) => onErrorCallback?.(error))}\n className={cn('flex w-full flex-col gap-y-6', 'desktop:gap-y-8', classes?.form)}\n >\n {progress.enabled && (\n <ProgressBar\n progress={formattedProgress}\n topContent={<HTMLRenderer html={progress.title} />}\n leftSubtitle={<HTMLRenderer html={progress.leftSubtitle} />}\n rightSubtitle={<HTMLRenderer html={progress.rightSubtitle} />}\n maxPercent={progress.maxPercent}\n classes={classes?.progressBar}\n />\n )}\n <FieldMapper control={control as unknown as Control} fields={fields} />\n <div\n className={cn('mob-body-regular-s flex flex-col items-start justify-between gap-4', {\n ['desktop:flex-row desktop:items-center']: buttonGroup.length === 1\n })}\n >\n {withApprovement(approvement, checked, onCheckedChange, classes?.approvement)}\n <div\n className={cn('flex w-full flex-col items-center justify-between gap-4 desktop:flex-row', {\n 'desktop:w-fit': buttonGroup.length === 1\n })}\n >\n {buttonGroup?.map((button, index) => {\n const isDisabledByLogic = button.type === 'submit' && approvement.type === 'checkbox' ? !checked : false\n\n const disabled = disabledButtons || isDisabledByLogic\n\n return (\n <Button\n {...button}\n size='lg'\n key={index}\n disabled={disabled}\n className={cn(\n 'w-full whitespace-nowrap',\n {\n ['desktop:!w-fit']: buttonGroup.length === 1\n },\n {\n 'w-full': Boolean(approvement)\n },\n classes?.submit\n )}\n />\n )\n })}\n </div>\n </div>\n {!ssoAuthorizationTop && esiaConfig && esiaConfig.mode !== 'off' && (\n <Esia {...esiaConfig} onClick={handleClickEsia} />\n )}\n </form>\n </ResponsiveContainer>\n </section>\n </QueryClientProvider>\n )\n}\n\nexport default DynamicForm\n"],"names":["DynamicForm","fields","title","progress","approvement","chips","submitProps","classes","buttonGroup","ssoAuthorizationTop","backgroundColor","disabledButtons","esiaConfig","submitCallback","onErrorCallback","checked","onCheckedChange","useState","schema","getDynamicSchema","defaultValues","ZodUtils","control","handleSubmit","getValues","watch","trigger","isValid","errors","useControlledForm","fieldsProgress","getFieldsProgress","formattedProgress","useFieldsProgress","onSubmit","values","fio","phone","isFioValid","isPhoneValid","disabledEsia","handleClickEsia","QueryClientProvider","jsx","cn","jsxs","ResponsiveContainer","Icon","Heading","Esia","error","ProgressBar","HTMLRenderer","FieldMapper","withApprovement","button","index","isDisabledByLogic","createElement","Button"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DynamicForm.js","sources":["../../../../lib/widgets/dynamicForm/DynamicForm.tsx"],"sourcesContent":["import { useEffect, useState } from 'react'\nimport { type Control, type SubmitHandler } from 'react-hook-form'\nimport { type TypeOf } from 'zod'\nimport { Esia, type EsiaProps } from '../esia'\nimport { HTMLRenderer } from '../htmlParser'\nimport {\n type Approvement,\n type ApprovementClasses,\n type ApprovementType,\n type Chips,\n type ChipsClasses,\n type ChipsType,\n getFieldsProgress,\n type Progress,\n type ProgressField,\n type ProgressType,\n type SubmitProps,\n withApprovement\n} from './model'\nimport { type FieldValidation, getDynamicSchema } from '@/shared/utils'\nimport { type BackgroundColors } from '$/shared/constants'\nimport { useControlledForm, useFieldsProgress } from '$/shared/hooks'\nimport { Button, type ButtonProps, type CheckedState, Heading, Icon, ProgressBar, ResponsiveContainer } from '$/shared/ui'\nimport { cn } from '$/shared/utils'\nimport { ZodUtils } from '$/shared/validation'\nimport { type FieldElement, FieldMapper } from '$/widgets/fieldMapper'\nimport { QueryClientProvider } from '$/widgets/queryClientProvider'\n\nexport type DynamicFormClasses = {\n root?: string\n title?: string\n fields?: string\n form?: string\n chips?: ChipsClasses\n approvement?: ApprovementClasses\n progressBar?: React.ComponentProps<typeof ProgressBar>['classes']\n submit?: string\n}\n\nexport type DynamicFormProps<AType extends ApprovementType, CType extends ChipsType, PType extends ProgressType> = {\n fields: FieldElement<any, any, { validation: FieldValidation; progress: ProgressField }>[]\n ssoAuthorizationTop: boolean\n title: string\n progress: Progress<PType>\n approvement: Approvement<AType>\n chips: Chips<CType>\n submitProps?: SubmitProps\n classes?: DynamicFormClasses\n buttonGroup: ButtonProps[]\n backgroundColor?: BackgroundColors\n disabledButtons?: boolean\n esiaConfig?: EsiaProps\n}\n\nexport const DynamicForm = <AType extends ApprovementType, CType extends ChipsType, PType extends ProgressType>({\n fields,\n title,\n progress,\n approvement,\n chips,\n submitProps,\n classes,\n buttonGroup,\n ssoAuthorizationTop = false,\n backgroundColor,\n disabledButtons,\n esiaConfig\n}: DynamicFormProps<AType, CType, PType>) => {\n const { submitCallback, onErrorCallback, validCallback } = submitProps || {}\n\n const [checked, onCheckedChange] = useState<CheckedState>(approvement.type === 'checkbox' ? approvement.defaultValue : false)\n\n const schema = getDynamicSchema(fields)\n const defaultValues = ZodUtils.getZodDefaults(schema)\n\n const {\n control,\n handleSubmit,\n getValues,\n watch,\n trigger,\n formState: { isValid, errors }\n } = useControlledForm({\n schema,\n defaultValues,\n mode: 'onBlur'\n })\n\n useEffect(() => {\n validCallback?.(isValid)\n }, [isValid])\n\n const fieldsProgress = getFieldsProgress(progress, fields)\n\n const formattedProgress = useFieldsProgress({ control, fields: fieldsProgress || [], schema })\n\n const onSubmit: SubmitHandler<TypeOf<typeof schema>> = (values) => {\n if (submitCallback) submitCallback({ ...values, agree: checked })\n }\n\n const [fio, phone] = watch(['fio', 'phone'])\n const isFioValid = Boolean(fio) && !errors.fio\n const isPhoneValid = Boolean(phone) && !errors.phone\n const disabledEsia = !isFioValid || !isPhoneValid || !checked\n\n const handleClickEsia = async () => {\n if (disabledEsia) {\n // Триггерим валидацию для полей fio и phone\n await trigger(['fio', 'phone'])\n console.error('[Error] - Empty field fio or phone', { fio, phone })\n return\n }\n\n if (esiaConfig?.onClick) {\n esiaConfig.onClick({ ...getValues(), agree: checked })\n }\n }\n\n return (\n <QueryClientProvider>\n <section\n id='form'\n data-test-id='form'\n className={cn('w-full', classes?.root, backgroundColor && `desktop:py-[80px]`)}\n style={{ backgroundColor }}\n >\n <ResponsiveContainer\n className={cn(\n 'border-warm-grey-200 px-4 desktop:w-[636px] desktop:gap-8 desktop:p-14',\n 'relative mx-auto flex flex-col gap-6 rounded-sm bg-color-white py-8 desktop:border'\n )}\n >\n {chips.enabled && (\n <div\n className={cn(\n 'desk-body-regular-l flex items-center gap-x-2 rounded-sm desktop:absolute',\n 'bg-color-blue-grey-100 px-2 py-1 text-color-tetriary',\n 'right-4 top-4 w-max',\n classes?.chips?.root\n )}\n >\n {chips.image && <Icon name={chips.image} className={cn('size-6', classes?.chips?.icon)} />}\n {chips.content}\n </div>\n )}\n <Heading as='h2' className={cn('text-color-dark desktop:hidden', classes?.title)}>\n {title}\n </Heading>\n <Heading as='h3' className={cn('text-color-dark mobile:hidden', classes?.title)}>\n {title}\n </Heading>\n {ssoAuthorizationTop && esiaConfig && esiaConfig.mode !== 'off' && <Esia {...esiaConfig} onClick={handleClickEsia} />}\n <form\n data-valid={isValid}\n onSubmit={handleSubmit(onSubmit, (error) => onErrorCallback?.(error))}\n className={cn('flex w-full flex-col gap-y-6', 'desktop:gap-y-8', classes?.form)}\n >\n {progress.enabled && (\n <ProgressBar\n progress={formattedProgress}\n topContent={<HTMLRenderer html={progress.title} />}\n leftSubtitle={<HTMLRenderer html={progress.leftSubtitle} />}\n rightSubtitle={<HTMLRenderer html={progress.rightSubtitle} />}\n maxPercent={progress.maxPercent}\n classes={classes?.progressBar}\n />\n )}\n <FieldMapper control={control as unknown as Control} fields={fields} />\n <div\n className={cn('mob-body-regular-s flex flex-col items-start justify-between gap-4', {\n ['desktop:flex-row desktop:items-center']: buttonGroup.length === 1\n })}\n >\n {withApprovement(approvement, checked, onCheckedChange, classes?.approvement)}\n <div\n className={cn('flex w-full flex-col items-center justify-between gap-4 desktop:flex-row', {\n 'desktop:w-fit': buttonGroup.length === 1\n })}\n >\n {buttonGroup?.map((button, index) => {\n const isDisabledByLogic = button.type === 'submit' && approvement.type === 'checkbox' ? !checked : false\n\n const disabled = disabledButtons || isDisabledByLogic\n\n return (\n <Button\n {...button}\n size='lg'\n key={index}\n disabled={disabled}\n className={cn(\n 'w-full whitespace-nowrap',\n {\n ['desktop:!w-fit']: buttonGroup.length === 1\n },\n {\n 'w-full': Boolean(approvement)\n },\n classes?.submit\n )}\n />\n )\n })}\n </div>\n </div>\n {!ssoAuthorizationTop && esiaConfig && esiaConfig.mode !== 'off' && (\n <Esia {...esiaConfig} onClick={handleClickEsia} />\n )}\n </form>\n </ResponsiveContainer>\n </section>\n </QueryClientProvider>\n )\n}\n\nexport default DynamicForm\n"],"names":["DynamicForm","fields","title","progress","approvement","chips","submitProps","classes","buttonGroup","ssoAuthorizationTop","backgroundColor","disabledButtons","esiaConfig","submitCallback","onErrorCallback","validCallback","checked","onCheckedChange","useState","schema","getDynamicSchema","defaultValues","ZodUtils","control","handleSubmit","getValues","watch","trigger","isValid","errors","useControlledForm","useEffect","fieldsProgress","getFieldsProgress","formattedProgress","useFieldsProgress","onSubmit","values","fio","phone","isFioValid","isPhoneValid","disabledEsia","handleClickEsia","QueryClientProvider","jsx","cn","jsxs","ResponsiveContainer","Icon","Heading","Esia","error","ProgressBar","HTMLRenderer","FieldMapper","withApprovement","button","index","isDisabledByLogic","createElement","Button"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as
|
|
1
|
+
import{jsxs as a,jsx as r}from"react/jsx-runtime";import{CategoryTabs as u}from"./CategoryTabs.js";import{useCategoryReducer as b}from"../../hooks/useCategoryReducer/useCategoryReducer.js";import{RootTab as g}from"./rootTab/RootTab.js";import{rootCategoryAction as p,currentCategoryAction as f}from"../../hooks/useCategoryReducer/actions.js";import{Icon as m}from"../../../../shared/ui/icon/Icon.js";import{pushToDlLink as i}from"../../../../shared/dataLayers/utils.js";const w=({categories:o,helpers:s,phone:t})=>{const[l,c]=b({root:o?.[0]?.children?.[0],current:o?.[0]?.children?.[0]});return a("div",{className:"mobile:hidden",children:[a("div",{className:"flex w-full items-center justify-between gap-x-4 border-b border-b-[rgba(234,237,241)] py-4",children:[r("a",{onPointerDown:()=>i({name:"Логотип",link:"Клик на логотип",placement:"header",eventCategory:"click_block"}),className:"mr-auto block",target:"_blank",href:"https://sovcombank.ru/",rel:"noreferrer",children:r(m,{name:"brandLogos/logoMain",className:"w-[130px]"})}),o?.map(e=>{const d=l?.root?.title===e.title;return r(g,{category:e,onCurrentCategoryChange:n=>c(f(n)),onRootCategoryChange:n=>c(p(n)),active:d},e.title)}),r("div",{className:"h-3.5 w-[1px] rounded-sm bg-color-blue-grey-500"}),s?.map(e=>a("a",{onPointerDown:()=>i({name:e?.title,placement:"top_menu",link:"Верхнее меню"}),href:e.link.href,className:"desk-body-regular-m flex items-center gap-x-1 text-color-tetriary duration-100 hover:text-color-dark",children:[e.link.icon&&r(m,{name:e.link.icon,className:"size-4"}),e.title]},e.title)),r("div",{className:"h-3.5 w-[1px] rounded-sm bg-color-blue-grey-500"}),r("a",{onPointerDown:()=>i({name:t,placement:"top_menu",link:"Верхнее меню"}),href:`tel:${t}`,className:"desk-body-regular-m flex items-center gap-x-1 text-color-tetriary duration-100 hover:text-color-dark",children:t})]}),r(u,{categories:l.current?.children})]})};export{w as CategoriesDesktop};
|
|
2
2
|
//# sourceMappingURL=CategoriesDesktop.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CategoriesDesktop.js","sources":["../../../../../../lib/widgets/seoHeader/ui/desktop/CategoriesDesktop.tsx"],"sourcesContent":["import { pushToDlLink } from '../../../../shared/dataLayers'\nimport { currentCategoryAction, rootCategoryAction, useCategoryReducer } from '../../hooks'\nimport { type Category, type SeoHeaderHelpers } from '../../model'\nimport { CategoryTabs } from './CategoryTabs'\nimport { RootTab } from './rootTab'\nimport { Icon } from '$/shared/ui'\n\ntype DesktopCategoriesProps = {\n categories: Category[]\n helpers: SeoHeaderHelpers[]\n phone: string\n}\n\nexport const CategoriesDesktop = ({ categories, helpers, phone }: DesktopCategoriesProps) => {\n const [store, dispatch] = useCategoryReducer({ root: categories?.[0]?.children?.[0], current: categories?.[0]?.children?.[0] })\n\n return (\n <div className='mobile:hidden'>\n <div className='flex w-full items-center justify-between gap-x-4 border-b border-b-[rgba(234,237,241)] py-4'>\n <a\n onPointerDown={() =>\n pushToDlLink({ name: 'Логотип', link: 'Клик на логотип', placement: 'header', eventCategory: 'click_block' })\n }\n className='mr-auto block'\n target='_blank'\n href='https://sovcombank.ru/'\n rel='noreferrer'\n >\n <Icon name='brandLogos/logoMain' className='w-[130px]' />\n </a>\n {categories?.map((category) => {\n const active = store?.root?.title === category.title\n\n return (\n <RootTab\n key={category.title}\n category={category}\n
|
|
1
|
+
{"version":3,"file":"CategoriesDesktop.js","sources":["../../../../../../lib/widgets/seoHeader/ui/desktop/CategoriesDesktop.tsx"],"sourcesContent":["import { pushToDlLink } from '../../../../shared/dataLayers'\nimport { currentCategoryAction, rootCategoryAction, useCategoryReducer } from '../../hooks'\nimport { type Category, type SeoHeaderHelpers } from '../../model'\nimport { CategoryTabs } from './CategoryTabs'\nimport { RootTab } from './rootTab'\nimport { Icon } from '$/shared/ui'\n\ntype DesktopCategoriesProps = {\n categories: Category[]\n helpers: SeoHeaderHelpers[]\n phone: string\n}\n\nexport const CategoriesDesktop = ({ categories, helpers, phone }: DesktopCategoriesProps) => {\n const [store, dispatch] = useCategoryReducer({ root: categories?.[0]?.children?.[0], current: categories?.[0]?.children?.[0] })\n\n return (\n <div className='mobile:hidden'>\n <div className='flex w-full items-center justify-between gap-x-4 border-b border-b-[rgba(234,237,241)] py-4'>\n <a\n onPointerDown={() =>\n pushToDlLink({ name: 'Логотип', link: 'Клик на логотип', placement: 'header', eventCategory: 'click_block' })\n }\n className='mr-auto block'\n target='_blank'\n href='https://sovcombank.ru/'\n rel='noreferrer'\n >\n <Icon name='brandLogos/logoMain' className='w-[130px]' />\n </a>\n {categories?.map((category) => {\n const active = store?.root?.title === category.title\n\n return (\n <RootTab\n key={category.title}\n category={category}\n onCurrentCategoryChange={(cat) => dispatch(currentCategoryAction(cat))}\n onRootCategoryChange={(cat) => dispatch(rootCategoryAction(cat))}\n active={active}\n />\n )\n })}\n <div className='h-3.5 w-[1px] rounded-sm bg-color-blue-grey-500' />\n {helpers?.map((helper) => (\n <a\n onPointerDown={() => pushToDlLink({ name: helper?.title, placement: 'top_menu', link: 'Верхнее меню' })}\n key={helper.title}\n href={helper.link.href}\n className='desk-body-regular-m flex items-center gap-x-1 text-color-tetriary duration-100 hover:text-color-dark'\n >\n {helper.link.icon && <Icon name={helper.link.icon} className='size-4' />}\n {helper.title}\n </a>\n ))}\n <div className='h-3.5 w-[1px] rounded-sm bg-color-blue-grey-500' />\n <a\n onPointerDown={() => pushToDlLink({ name: phone, placement: 'top_menu', link: 'Верхнее меню' })}\n href={`tel:${phone}`}\n className='desk-body-regular-m flex items-center gap-x-1 text-color-tetriary duration-100 hover:text-color-dark'\n >\n {phone}\n </a>\n </div>\n <CategoryTabs categories={store.current?.children} />\n </div>\n )\n}\n"],"names":["CategoriesDesktop","categories","helpers","phone","store","dispatch","useCategoryReducer","jsxs","jsx","pushToDlLink","Icon","category","active","RootTab","cat","currentCategoryAction","rootCategoryAction","helper","CategoryTabs"],"mappings":"sdAaO,MAAMA,EAAoB,CAAC,CAAE,WAAAC,EAAY,QAAAC,EAAS,MAAAC,KAAoC,CAC3F,KAAM,CAACC,EAAOC,CAAQ,EAAIC,EAAmB,CAAE,KAAML,IAAa,CAAC,GAAG,WAAW,CAAC,EAAG,QAASA,IAAa,CAAC,GAAG,WAAW,CAAC,EAAG,EAE9H,OACEM,EAAC,MAAA,CAAI,UAAU,gBACb,SAAA,CAAAA,EAAC,MAAA,CAAI,UAAU,8FACb,SAAA,CAAAC,EAAC,IAAA,CACC,cAAe,IACbC,EAAa,CAAE,KAAM,UAAW,KAAM,kBAAmB,UAAW,SAAU,cAAe,aAAA,CAAe,EAE9G,UAAU,gBACV,OAAO,SACP,KAAK,yBACL,IAAI,aAEJ,SAAAD,EAACE,EAAA,CAAK,KAAK,sBAAsB,UAAU,WAAA,CAAY,CAAA,CAAA,EAExDT,GAAY,IAAKU,GAAa,CAC7B,MAAMC,EAASR,GAAO,MAAM,QAAUO,EAAS,MAE/C,OACEH,EAACK,EAAA,CAEC,SAAAF,EACA,wBAA0BG,GAAQT,EAASU,EAAsBD,CAAG,CAAC,EACrE,qBAAuBA,GAAQT,EAASW,EAAmBF,CAAG,CAAC,EAC/D,OAAAF,CAAA,EAJKD,EAAS,KAAA,CAOpB,CAAC,EACDH,EAAC,MAAA,CAAI,UAAU,iDAAA,CAAkD,EAChEN,GAAS,IAAKe,GACbV,EAAC,IAAA,CACC,cAAe,IAAME,EAAa,CAAE,KAAMQ,GAAQ,MAAO,UAAW,WAAY,KAAM,eAAgB,EAEtG,KAAMA,EAAO,KAAK,KAClB,UAAU,uGAET,SAAA,CAAAA,EAAO,KAAK,MAAQT,EAACE,EAAA,CAAK,KAAMO,EAAO,KAAK,KAAM,UAAU,QAAA,CAAS,EACrEA,EAAO,KAAA,CAAA,EALHA,EAAO,KAAA,CAOf,EACDT,EAAC,MAAA,CAAI,UAAU,iDAAA,CAAkD,EACjEA,EAAC,IAAA,CACC,cAAe,IAAMC,EAAa,CAAE,KAAMN,EAAO,UAAW,WAAY,KAAM,eAAgB,EAC9F,KAAM,OAAOA,CAAK,GAClB,UAAU,uGAET,SAAAA,CAAA,CAAA,CACH,EACF,EACAK,EAACU,EAAA,CAAa,WAAYd,EAAM,SAAS,QAAA,CAAU,CAAA,EACrD,CAEJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RootTab.js","sources":["../../../../../../../lib/widgets/seoHeader/ui/desktop/rootTab/RootTab.tsx"],"sourcesContent":["import { pushToDlLink } from '../../../../../shared/dataLayers'\nimport { type Category } from '../../../model'\nimport { cn } from '$/shared/utils'\n\ntype RootTabProps = React.HTMLAttributes<HTMLDivElement | HTMLAnchorElement> & {\n category: Category\n
|
|
1
|
+
{"version":3,"file":"RootTab.js","sources":["../../../../../../../lib/widgets/seoHeader/ui/desktop/rootTab/RootTab.tsx"],"sourcesContent":["import { pushToDlLink } from '../../../../../shared/dataLayers'\nimport { type Category } from '../../../model'\nimport { cn } from '$/shared/utils'\n\ntype RootTabProps = React.HTMLAttributes<HTMLDivElement | HTMLAnchorElement> & {\n category: Category\n onCurrentCategoryChange: (category: Category) => void\n onRootCategoryChange: (category: Category) => void\n active: boolean\n}\n\nexport const RootTab = ({ category, onCurrentCategoryChange, onRootCategoryChange, active, ...props }: RootTabProps) => {\n const isLink = Boolean(category?.link?.href)\n const Comp = isLink ? 'a' : 'div'\n\n const attrs = isLink\n ? {\n href: category.link?.href,\n target: category.link?.target\n }\n : {\n onClick: () => {\n if (!category.children) return\n\n onCurrentCategoryChange(category.children?.[0])\n onRootCategoryChange(category)\n }\n }\n\n return (\n <div className='group/category relative'>\n <Comp\n {...props}\n {...attrs}\n onPointerDown={() =>\n pushToDlLink({\n name: category.title,\n placement: 'top_menu',\n link: 'Верхнее меню'\n })\n }\n className={cn('cursor-pointer text-color-tetriary duration-100 hover:text-color-dark', {\n 'text-color-dark': active\n })}\n >\n <span className='desk-body-regular-m'>{category.title}</span>\n </Comp>\n {/*{category?.children && category?.children?.length > 1 && (*/}\n {/* <div*/}\n {/* className={cn(*/}\n {/* 'absolute right-0 top-full z-10 flex w-max flex-col',*/}\n {/* 'invisible bg-color-white opacity-0 shadow-sm group-hover/category:visible group-hover/category:opacity-100',*/}\n {/* 'rounded-sm p-1'*/}\n {/* )}*/}\n {/* >*/}\n {/* {category?.children?.map((child) => (*/}\n {/* <span*/}\n {/* onPointerDown={() => pushToDlLink(child?.title, '', 'seoHeader')}*/}\n {/* onClick={(event) => {*/}\n {/* event.stopPropagation()*/}\n {/* event.nativeEvent.stopPropagation()*/}\n {/* onRootCategoryChange(category)*/}\n {/* onCurrentCategoryChange(child)*/}\n {/* }}*/}\n {/* key={child.title}*/}\n {/* className={cn(*/}\n {/* 'desk-body-regular-l rounded-sm px-3 py-3.5 text-color-dark duration-100 hover:bg-color-primary-tr-hover hover:text-color-dark',*/}\n {/* {*/}\n {/* 'text-color-primary-default': selectedCategory?.title === child?.title*/}\n {/* }*/}\n {/* )}*/}\n {/* >*/}\n {/* {child.title}*/}\n {/* </span>*/}\n {/* ))}*/}\n {/* </div>*/}\n {/*)}*/}\n </div>\n )\n}\n"],"names":["RootTab","category","onCurrentCategoryChange","onRootCategoryChange","active","props","isLink","Comp","attrs","jsx","pushToDlLink","cn"],"mappings":"wKAWO,MAAMA,EAAU,CAAC,CAAE,SAAAC,EAAU,wBAAAC,EAAyB,qBAAAC,EAAsB,OAAAC,EAAQ,GAAGC,KAA0B,CACtH,MAAMC,EAAS,EAAQL,GAAU,MAAM,KACjCM,EAAOD,EAAS,IAAM,MAEtBE,EAAQF,EACV,CACE,KAAML,EAAS,MAAM,KACrB,OAAQA,EAAS,MAAM,MAAA,EAEzB,CACE,QAAS,IAAM,CACRA,EAAS,WAEdC,EAAwBD,EAAS,WAAW,CAAC,CAAC,EAC9CE,EAAqBF,CAAQ,EAC/B,CAAA,EAGN,OACEQ,EAAC,MAAA,CAAI,UAAU,0BACb,SAAAA,EAACF,EAAA,CACE,GAAGF,EACH,GAAGG,EACJ,cAAe,IACbE,EAAa,CACX,KAAMT,EAAS,MACf,UAAW,WACX,KAAM,cAAA,CACP,EAEH,UAAWU,EAAG,wEAAyE,CACrF,kBAAmBP,CAAA,CACpB,EAED,SAAAK,EAAC,OAAA,CAAK,UAAU,sBAAuB,WAAS,KAAA,CAAM,CAAA,CAAA,EAgC1D,CAEJ"}
|