@scbt-ecom/ui 0.166.0 → 0.167.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/dist/lib/exports/utils.js +1 -1
  2. package/dist/lib/shared/ui/formElements/uncontrolled/slider/ui/sliderAlgorithmic/SliderAlgorithmic.js +1 -1
  3. package/dist/lib/shared/ui/formElements/uncontrolled/slider/ui/sliderAlgorithmic/hooks/useSliderAlgorithmic.js +1 -1
  4. package/dist/lib/shared/ui/formElements/uncontrolled/slider/ui/sliderAlgorithmic/hooks/useSliderAlgorithmic.js.map +1 -1
  5. package/dist/lib/shared/utils/index.js +1 -1
  6. package/dist/lib/shared/utils/variableHolder/variableContextHolder.js.map +1 -1
  7. package/dist/lib/shared/utils/variables/variableResolver.js.map +1 -1
  8. package/dist/lib/shared/utils/variablesFork/VariablesFork.js.map +1 -0
  9. package/dist/lib/widgets/calculator/CalculatorView.js +1 -1
  10. package/dist/lib/widgets/calculator/CalculatorView.js.map +1 -1
  11. package/dist/lib/widgets/calculator/model/helpers.js +1 -1
  12. package/dist/lib/widgets/calculator/model/helpers.js.map +1 -1
  13. package/dist/lib/widgets/calculator/model/index.js +1 -1
  14. package/dist/lib/widgets/calculator/model/utils.js +1 -1
  15. package/dist/lib/widgets/calculator/model/utils.js.map +1 -1
  16. package/dist/lib/widgets/calculator/ui/calculatorFields/CalculatorFields.js.map +1 -1
  17. package/dist/lib/widgets/calculator/ui/calculatorInfo/CalculatorInfo.js +1 -1
  18. package/dist/lib/widgets/calculator/ui/calculatorInfo/CalculatorInfo.js.map +1 -1
  19. package/dist/lib/widgets/calculator/ui/calculatorInfo/ui/CalculatedBlock.js.map +1 -1
  20. package/dist/lib/widgets/calculator/ui/calculatorInfo/ui/CalculatorInfoBody.js.map +1 -1
  21. package/dist/lib/widgets/calculator/ui/calculatorInfo/ui/InfoListItem.js.map +1 -1
  22. package/dist/lib/widgets/model/helpers.js +1 -1
  23. package/dist/node_modules/.pnpm/{@babel_runtime@7.28.4 → @babel_runtime@7.28.6}/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js.map +1 -1
  24. package/dist/node_modules/.pnpm/{@babel_runtime@7.28.4 → @babel_runtime@7.28.6}/node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js.map +1 -1
  25. package/dist/node_modules/.pnpm/{@babel_runtime@7.28.4 → @babel_runtime@7.28.6}/node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js.map +1 -1
  26. package/dist/node_modules/.pnpm/{@babel_runtime@7.28.4 → @babel_runtime@7.28.6}/node_modules/@babel/runtime/helpers/esm/defineProperty.js.map +1 -1
  27. package/dist/node_modules/.pnpm/{@babel_runtime@7.28.4 → @babel_runtime@7.28.6}/node_modules/@babel/runtime/helpers/esm/extends.js.map +1 -1
  28. package/dist/node_modules/.pnpm/{@babel_runtime@7.28.4 → @babel_runtime@7.28.6}/node_modules/@babel/runtime/helpers/esm/iterableToArray.js.map +1 -1
  29. package/dist/node_modules/.pnpm/{@babel_runtime@7.28.4 → @babel_runtime@7.28.6}/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js.map +1 -1
  30. package/dist/node_modules/.pnpm/{@babel_runtime@7.28.4 → @babel_runtime@7.28.6}/node_modules/@babel/runtime/helpers/esm/nonIterableRest.js.map +1 -1
  31. package/dist/node_modules/.pnpm/{@babel_runtime@7.28.4 → @babel_runtime@7.28.6}/node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js.map +1 -1
  32. package/dist/node_modules/.pnpm/{@babel_runtime@7.28.4 → @babel_runtime@7.28.6}/node_modules/@babel/runtime/helpers/esm/objectSpread2.js.map +1 -1
  33. package/dist/node_modules/.pnpm/{@babel_runtime@7.28.4 → @babel_runtime@7.28.6}/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js.map +1 -1
  34. package/dist/node_modules/.pnpm/{@babel_runtime@7.28.4 → @babel_runtime@7.28.6}/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js.map +1 -1
  35. package/dist/node_modules/.pnpm/{@babel_runtime@7.28.4 → @babel_runtime@7.28.6}/node_modules/@babel/runtime/helpers/esm/slicedToArray.js.map +1 -1
  36. package/dist/node_modules/.pnpm/{@babel_runtime@7.28.4 → @babel_runtime@7.28.6}/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js.map +1 -1
  37. package/dist/node_modules/.pnpm/{@babel_runtime@7.28.4 → @babel_runtime@7.28.6}/node_modules/@babel/runtime/helpers/esm/toPrimitive.js.map +1 -1
  38. package/dist/node_modules/.pnpm/{@babel_runtime@7.28.4 → @babel_runtime@7.28.6}/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js.map +1 -1
  39. package/dist/node_modules/.pnpm/{@babel_runtime@7.28.4 → @babel_runtime@7.28.6}/node_modules/@babel/runtime/helpers/esm/typeof.js.map +1 -1
  40. package/dist/node_modules/.pnpm/{@babel_runtime@7.28.4 → @babel_runtime@7.28.6}/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js.map +1 -1
  41. package/dist/node_modules/.pnpm/rc-slider@11.1.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/rc-slider/es/Handles/Handle.js +1 -1
  42. package/dist/node_modules/.pnpm/rc-slider@11.1.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/rc-slider/es/Handles/index.js +1 -1
  43. package/dist/node_modules/.pnpm/rc-slider@11.1.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/rc-slider/es/Marks/Mark.js +1 -1
  44. package/dist/node_modules/.pnpm/rc-slider@11.1.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/rc-slider/es/Slider.js +1 -1
  45. package/dist/node_modules/.pnpm/rc-slider@11.1.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/rc-slider/es/Steps/Dot.js +1 -1
  46. package/dist/node_modules/.pnpm/rc-slider@11.1.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/rc-slider/es/Tracks/Track.js +1 -1
  47. package/dist/node_modules/.pnpm/rc-slider@11.1.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/rc-slider/es/Tracks/index.js +1 -1
  48. package/dist/node_modules/.pnpm/rc-slider@11.1.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/rc-slider/es/hooks/useDrag.js +1 -1
  49. package/dist/node_modules/.pnpm/rc-slider@11.1.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/rc-slider/es/hooks/useOffset.js +1 -1
  50. package/dist/node_modules/.pnpm/rc-util@5.44.4_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/rc-util/es/hooks/useMergedState.js +1 -1
  51. package/dist/node_modules/.pnpm/rc-util@5.44.4_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/rc-util/es/hooks/useState.js +1 -1
  52. package/dist/node_modules/.pnpm/rc-util@5.44.4_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/rc-util/es/isEqual.js +1 -1
  53. package/dist/stats.html +1 -1
  54. package/dist/types/lib/shared/utils/index.d.ts +1 -0
  55. package/dist/types/lib/shared/utils/variableHolder/variableContextHolder.d.ts +3 -0
  56. package/dist/types/lib/shared/utils/variables/variableResolver.d.ts +4 -3
  57. package/dist/types/lib/shared/utils/{variablesByNikita → variablesFork}/VariablesFork.d.ts +4 -4
  58. package/dist/types/lib/shared/utils/variablesFork/index.d.ts +1 -0
  59. package/dist/types/lib/widgets/calculator/model/helpers.d.ts +2 -2
  60. package/dist/types/lib/widgets/calculator/model/types.d.ts +1 -4
  61. package/dist/types/lib/widgets/calculator/model/utils.d.ts +1 -2
  62. package/dist/types/lib/widgets/calculator/ui/calculatorInfo/CalculatorInfo.d.ts +1 -1
  63. package/dist/types/lib/widgets/calculator/ui/calculatorInfo/ui/CalculatedBlock.d.ts +3 -2
  64. package/dist/types/lib/widgets/calculator/ui/calculatorInfo/ui/CalculatorInfoBody.d.ts +2 -2
  65. package/dist/types/lib/widgets/calculator/ui/calculatorInfo/ui/InfoListItem.d.ts +5 -9
  66. package/package.json +1 -1
  67. package/dist/lib/shared/utils/variablesByNikita/VariablesFork.js.map +0 -1
  68. package/dist/types/lib/shared/utils/variablesByNikita/index.d.ts +0 -1
  69. /package/dist/lib/shared/utils/{variablesByNikita → variablesFork}/VariablesFork.js +0 -0
  70. /package/dist/lib/shared/utils/{variablesByNikita → variablesFork}/index.js +0 -0
  71. /package/dist/lib/shared/utils/{variablesByNikita → variablesFork}/index.js.map +0 -0
  72. /package/dist/node_modules/.pnpm/{@babel_runtime@7.28.4 → @babel_runtime@7.28.6}/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js +0 -0
  73. /package/dist/node_modules/.pnpm/{@babel_runtime@7.28.4 → @babel_runtime@7.28.6}/node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js +0 -0
  74. /package/dist/node_modules/.pnpm/{@babel_runtime@7.28.4 → @babel_runtime@7.28.6}/node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js +0 -0
  75. /package/dist/node_modules/.pnpm/{@babel_runtime@7.28.4 → @babel_runtime@7.28.6}/node_modules/@babel/runtime/helpers/esm/defineProperty.js +0 -0
  76. /package/dist/node_modules/.pnpm/{@babel_runtime@7.28.4 → @babel_runtime@7.28.6}/node_modules/@babel/runtime/helpers/esm/extends.js +0 -0
  77. /package/dist/node_modules/.pnpm/{@babel_runtime@7.28.4 → @babel_runtime@7.28.6}/node_modules/@babel/runtime/helpers/esm/iterableToArray.js +0 -0
  78. /package/dist/node_modules/.pnpm/{@babel_runtime@7.28.4 → @babel_runtime@7.28.6}/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js +0 -0
  79. /package/dist/node_modules/.pnpm/{@babel_runtime@7.28.4 → @babel_runtime@7.28.6}/node_modules/@babel/runtime/helpers/esm/nonIterableRest.js +0 -0
  80. /package/dist/node_modules/.pnpm/{@babel_runtime@7.28.4 → @babel_runtime@7.28.6}/node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js +0 -0
  81. /package/dist/node_modules/.pnpm/{@babel_runtime@7.28.4 → @babel_runtime@7.28.6}/node_modules/@babel/runtime/helpers/esm/objectSpread2.js +0 -0
  82. /package/dist/node_modules/.pnpm/{@babel_runtime@7.28.4 → @babel_runtime@7.28.6}/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js +0 -0
  83. /package/dist/node_modules/.pnpm/{@babel_runtime@7.28.4 → @babel_runtime@7.28.6}/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js +0 -0
  84. /package/dist/node_modules/.pnpm/{@babel_runtime@7.28.4 → @babel_runtime@7.28.6}/node_modules/@babel/runtime/helpers/esm/slicedToArray.js +0 -0
  85. /package/dist/node_modules/.pnpm/{@babel_runtime@7.28.4 → @babel_runtime@7.28.6}/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js +0 -0
  86. /package/dist/node_modules/.pnpm/{@babel_runtime@7.28.4 → @babel_runtime@7.28.6}/node_modules/@babel/runtime/helpers/esm/toPrimitive.js +0 -0
  87. /package/dist/node_modules/.pnpm/{@babel_runtime@7.28.4 → @babel_runtime@7.28.6}/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js +0 -0
  88. /package/dist/node_modules/.pnpm/{@babel_runtime@7.28.4 → @babel_runtime@7.28.6}/node_modules/@babel/runtime/helpers/esm/typeof.js +0 -0
  89. /package/dist/node_modules/.pnpm/{@babel_runtime@7.28.4 → @babel_runtime@7.28.6}/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js +0 -0
@@ -1,2 +1,2 @@
1
- import{createPhoneNumber as o}from"../shared/utils/createPhoneNumber.js";import{scrollToElement as m}from"../shared/utils/scrollToElement.js";import{cn as f}from"../shared/utils/cn.js";import{isClient as p}from"../shared/utils/isClient.js";import{capitalize as s}from"../shared/utils/capitalize.js";import{mergeRefs as n}from"../shared/utils/mergeRefs.js";import{TypeGuards as d}from"../shared/utils/typeGuards.js";import{getUuid as b}from"../shared/utils/uuid.js";import{localStorageActions as A}from"../shared/utils/localStorageActions.js";import{assertUnreachable as h}from"../shared/utils/assertUnreachable.js";import{ErrorBoundary as y}from"../shared/utils/ErrorBoundary.js";import{sessionStorageActions as E}from"../shared/utils/sessionStorage.js";import{VariableContextHolder as P}from"../shared/utils/variableHolder/variableContextHolder.js";import{extractTextFromHtml as S}from"../shared/utils/extractTextFromHtml.js";import{defaultAllowedPrefixes as w,variableResolver as z}from"../shared/utils/variables/variableResolver.js";export{y as ErrorBoundary,d as TypeGuards,P as VariableContextHolder,h as assertUnreachable,s as capitalize,f as cn,o as createPhoneNumber,w as defaultAllowedPrefixes,S as extractTextFromHtml,b as getUuid,p as isClient,A as localStorageActions,n as mergeRefs,m as scrollToElement,E as sessionStorageActions,z as variableResolver};
1
+ import{createPhoneNumber as e}from"../shared/utils/createPhoneNumber.js";import{scrollToElement as m}from"../shared/utils/scrollToElement.js";import{cn as a}from"../shared/utils/cn.js";import{isClient as p}from"../shared/utils/isClient.js";import{capitalize as s}from"../shared/utils/capitalize.js";import{mergeRefs as n}from"../shared/utils/mergeRefs.js";import{TypeGuards as d}from"../shared/utils/typeGuards.js";import{getUuid as u}from"../shared/utils/uuid.js";import{localStorageActions as A}from"../shared/utils/localStorageActions.js";import{assertUnreachable as h}from"../shared/utils/assertUnreachable.js";import{ErrorBoundary as y}from"../shared/utils/ErrorBoundary.js";import{sessionStorageActions as E}from"../shared/utils/sessionStorage.js";import{VariableContextHolder as H}from"../shared/utils/variableHolder/variableContextHolder.js";import{extractTextFromHtml as R}from"../shared/utils/extractTextFromHtml.js";import{defaultAllowedPrefixes as U,variableResolver as V}from"../shared/utils/variables/variableResolver.js";import{VariablesFork as w}from"../shared/utils/variablesFork/VariablesFork.js";export{y as ErrorBoundary,d as TypeGuards,H as VariableContextHolder,w as VariablesFork,h as assertUnreachable,s as capitalize,a as cn,e as createPhoneNumber,U as defaultAllowedPrefixes,R as extractTextFromHtml,u as getUuid,p as isClient,A as localStorageActions,n as mergeRefs,m as scrollToElement,E as sessionStorageActions,V as variableResolver};
2
2
  //# sourceMappingURL=utils.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as m,jsx as i}from"react/jsx-runtime";import*as h from"react";import{forwardRef as E}from"react";import{NumericFormat as J}from"react-number-format";import{SliderInner as K}from"../Slider.js";import{useSliderAlgorithmic as Q}from"./hooks/useSliderAlgorithmic.js";import{cn as r}from"../../../../../../utils/cn.js";import{mergeRefs as T}from"../../../../../../utils/mergeRefs.js";import{getInputSliderSuffix as f}from"../../model/helpers/getInputSliderSuffix.js";import{InputBase as U}from"../../../input/Input.js";import{Icon as W}from"../../../../../icon/Icon.js";const X=i(W,{name:"general/edit",className:"size-[19px] text-icon-blue-grey-600 transition-[color] group-focus-within/icon:text-icon-blue-grey-800"}),te=E(({classes:b,invalid:I,externalHandlers:e,disabled:p,value:t,onChange:n,min:s,max:c,suffix:a,label:N,attachmentProps:u,additionalSuffix:x,readOnly:l,componentType:k,dataLayers:w,...d},S)=>{const y=h.useId(),g=h.useRef(null),B=()=>{g?.current?.focus()},{sliderValue:C,sliderStep:R,sliderMin:v,sliderMax:j,handleChangeSlider:A,handleBlur:F}=Q({min:Number(s),max:Number(c),defaultValue:0,value:t,onChange:n}),{root:M,slider:V,textLeft:$,textRight:z,inputRoot:G,textContainer:L,input:q,field:D}=b||{};return m("div",{"aria-label":k,className:r("flex w-full flex-col gap-1",M),children:[m("div",{className:r("relative w-full select-none",{"select-none":l},D),children:[i(U,{label:N,value:t,attachmentProps:{onClickIcon:l?void 0:u?.onClickIcon||B,icon:l?void 0:u?.icon||X,...u},classes:{container:"border-[1px] bg-color-white border-blue-grey-500 focus-within:border-blue-grey-800",...G},onBlur:o=>{d?.onBlur&&d?.onBlur(o),e?.onBlur&&e.onBlur(o),F()},onClick:e?.onClick,onFocus:e?.onBlur,renderValues:()=>i(J,{id:y,readOnly:l,"aria-invalid":I?"true":"false",value:t,disabled:p,suffix:` ${f(a,t)} ${x??""}`,thousandsGroupStyle:"thousand",thousandSeparator:" ",allowNegative:!1,getInputRef:T(g,S),onValueChange:({floatValue:o})=>{o!==void 0&&(n&&n(o),e?.onInputChange?.(o))},"data-id":"slider",className:r("group/slider desk-title-bold-s w-full bg-color-transparent text-color-dark outline-none transition-all",q),"data-layer-id":w?.targetId,...d})}),i(K,{classes:{...V},step:R,value:C,disabled:p,min:Number(v),max:Number(j),onChange:A,externalHandlers:e})]}),m("div",{className:r("flex justify-between",L),children:[s&&i("span",{className:r("desk-body-regular-m text-color-tetriary",$),children:f(a,s,!1)}),c&&i("span",{className:r("desk-body-regular-m text-color-tetriary",z),children:f(a,c,!1)})]})]})});export{te as SliderAlgorithmic};
1
+ import{jsxs as m,jsx as i}from"react/jsx-runtime";import*as h from"react";import{forwardRef as E}from"react";import{NumericFormat as J}from"react-number-format";import{SliderInner as K}from"../Slider.js";import{cn as r}from"../../../../../../utils/cn.js";import{mergeRefs as Q}from"../../../../../../utils/mergeRefs.js";import{getInputSliderSuffix as f}from"../../model/helpers/getInputSliderSuffix.js";import{useSliderAlgorithmic as T}from"./hooks/useSliderAlgorithmic.js";import{InputBase as U}from"../../../input/Input.js";import{Icon as W}from"../../../../../icon/Icon.js";const X=i(W,{name:"general/edit",className:"size-[19px] text-icon-blue-grey-600 transition-[color] group-focus-within/icon:text-icon-blue-grey-800"}),te=E(({classes:b,invalid:I,externalHandlers:e,disabled:p,value:t,onChange:n,min:s,max:c,suffix:a,label:N,attachmentProps:u,additionalSuffix:x,readOnly:l,componentType:k,dataLayers:w,...d},S)=>{const y=h.useId(),g=h.useRef(null),B=()=>{g?.current?.focus()},{sliderValue:C,sliderStep:R,sliderMin:v,sliderMax:j,handleChangeSlider:A,handleBlur:F}=T({min:Number(s),max:Number(c),defaultValue:0,value:t,onChange:n}),{root:M,slider:V,textLeft:$,textRight:z,inputRoot:G,textContainer:L,input:q,field:D}=b||{};return m("div",{"aria-label":k,className:r("flex w-full flex-col gap-1",M),children:[m("div",{className:r("relative w-full select-none",{"select-none":l},D),children:[i(U,{label:N,value:t,attachmentProps:{onClickIcon:l?void 0:u?.onClickIcon||B,icon:l?void 0:u?.icon||X,...u},classes:{container:"border-[1px] bg-color-white border-blue-grey-500 focus-within:border-blue-grey-800",...G},onBlur:o=>{d?.onBlur&&d?.onBlur(o),e?.onBlur&&e.onBlur(o),F()},onClick:e?.onClick,onFocus:e?.onBlur,renderValues:()=>i(J,{id:y,readOnly:l,"aria-invalid":I?"true":"false",value:t,disabled:p,suffix:` ${f(a,t)} ${x??""}`,thousandsGroupStyle:"thousand",thousandSeparator:" ",allowNegative:!1,getInputRef:Q(g,S),onValueChange:({floatValue:o})=>{o!==void 0&&(n&&n(o),e?.onInputChange?.(o))},"data-id":"slider",className:r("group/slider desk-title-bold-s w-full bg-color-transparent text-color-dark outline-none transition-all",q),"data-layer-id":w?.targetId,...d})}),i(K,{classes:{...V},step:R,value:C,disabled:p,min:Number(v),max:Number(j),onChange:A,externalHandlers:e})]}),m("div",{className:r("flex justify-between",L),children:[s&&i("span",{className:r("desk-body-regular-m text-color-tetriary",$),children:f(a,s,!1)}),c&&i("span",{className:r("desk-body-regular-m text-color-tetriary",z),children:f(a,c,!1)})]})]})});export{te as SliderAlgorithmic};
2
2
  //# sourceMappingURL=SliderAlgorithmic.js.map
@@ -1,2 +1,2 @@
1
- import{useLogarithmic as S}from"../../../model/useLogarithmic.js";const M=({min:t,max:e,defaultValue:l,value:i,onChange:r})=>{const{fromSlider:d,toSlider:o,round:f}=S({min:t,max:e,defaultSum:l});console.log({min:typeof t,max:typeof e,defaultValue:typeof l,value:typeof i});const c=o(i),n=.01,p=o(t),u=o(e);return{handleChangeSlider:s=>{s&&r&&r(f(d(s)))},handleBlur:()=>{i&&(i>e&&r&&r(e),i<t&&r&&r(t))},toSlider:o,fromSlider:d,sliderValue:c,sliderStep:n,sliderMin:p,sliderMax:u}};export{M as useSliderAlgorithmic};
1
+ import{useLogarithmic as h}from"../../../model/useLogarithmic.js";const A=({min:i,max:t,defaultValue:o,value:d,onChange:r})=>{const{fromSlider:l,toSlider:e,round:c}=h({min:i,max:t,defaultSum:o}),f=e(d),u=.01,S=e(i),n=e(t);return{handleChangeSlider:s=>{s&&r&&r(c(l(s)))},handleBlur:()=>{d&&(d>t&&r&&r(t),d<i&&r&&r(i))},toSlider:e,fromSlider:l,sliderValue:f,sliderStep:u,sliderMin:S,sliderMax:n}};export{A as useSliderAlgorithmic};
2
2
  //# sourceMappingURL=useSliderAlgorithmic.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useSliderAlgorithmic.js","sources":["../../../../../../../../../../lib/shared/ui/formElements/uncontrolled/slider/ui/sliderAlgorithmic/hooks/useSliderAlgorithmic.ts"],"sourcesContent":["import { useLogarithmic } from '../../../model'\n\ninterface UseSliderAlgorithmic {\n min: number\n max: number\n defaultValue: number\n value: number | undefined\n onChange?: (value: number) => void // good\n}\n\nexport const useSliderAlgorithmic = ({ min, max, defaultValue, value, onChange }: UseSliderAlgorithmic) => {\n const { fromSlider, toSlider, round } = useLogarithmic({ min, max, defaultSum: defaultValue })\n\n console.log({\n min: typeof min,\n max: typeof max,\n defaultValue: typeof defaultValue,\n value: typeof value\n })\n\n const sliderValue = toSlider(value)\n\n const sliderStep = 0.01\n\n const sliderMin = toSlider(min)\n const sliderMax = toSlider(max)\n\n const handleBlur = () => {\n if (!value) return\n\n if (value > max) {\n if (onChange) onChange(max)\n }\n if (value < min) {\n if (onChange) onChange(min)\n }\n }\n\n const handleChangeSlider = (value?: number) => {\n if (!value) {\n return\n }\n if (onChange) onChange(round(fromSlider(value)))\n }\n\n return {\n handleChangeSlider,\n handleBlur,\n toSlider,\n fromSlider,\n sliderValue,\n sliderStep,\n sliderMin,\n sliderMax\n }\n}\n"],"names":["useSliderAlgorithmic","min","max","defaultValue","value","onChange","fromSlider","toSlider","round","useLogarithmic","sliderValue","sliderStep","sliderMin","sliderMax"],"mappings":"kEAUO,MAAMA,EAAuB,CAAC,CAAE,IAAAC,EAAK,IAAAC,EAAK,aAAAC,EAAc,MAAAC,EAAO,SAAAC,KAAqC,CACzG,KAAM,CAAE,WAAAC,EAAY,SAAAC,EAAU,MAAAC,GAAUC,EAAe,CAAE,IAAAR,EAAK,IAAAC,EAAK,WAAYC,EAAc,EAE7F,QAAQ,IAAI,CACV,IAAK,OAAOF,EACZ,IAAK,OAAOC,EACZ,aAAc,OAAOC,EACrB,MAAO,OAAOC,CAAA,CACf,EAED,MAAMM,EAAcH,EAASH,CAAK,EAE5BO,EAAa,IAEbC,EAAYL,EAASN,CAAG,EACxBY,EAAYN,EAASL,CAAG,EAoB9B,MAAO,CACL,mBAR0BE,GAAmB,CACxCA,GAGDC,GAAUA,EAASG,EAAMF,EAAWF,CAAK,CAAC,CAAC,CACjD,EAIE,WApBiB,IAAM,CAClBA,IAEDA,EAAQF,GACNG,KAAmBH,CAAG,EAExBE,EAAQH,GACNI,KAAmBJ,CAAG,EAE9B,EAYE,SAAAM,EACA,WAAAD,EACA,YAAAI,EACA,WAAAC,EACA,UAAAC,EACA,UAAAC,CAAA,CAEJ"}
1
+ {"version":3,"file":"useSliderAlgorithmic.js","sources":["../../../../../../../../../../lib/shared/ui/formElements/uncontrolled/slider/ui/sliderAlgorithmic/hooks/useSliderAlgorithmic.ts"],"sourcesContent":["import { useLogarithmic } from '../../../model'\n\ninterface UseSliderAlgorithmic {\n min: number\n max: number\n defaultValue: number\n value: number | undefined\n onChange?: (value: number) => void // good\n}\n\nexport const useSliderAlgorithmic = ({ min, max, defaultValue, value, onChange }: UseSliderAlgorithmic) => {\n const { fromSlider, toSlider, round } = useLogarithmic({ min, max, defaultSum: defaultValue })\n\n const sliderValue = toSlider(value)\n\n const sliderStep = 0.01\n\n const sliderMin = toSlider(min)\n const sliderMax = toSlider(max)\n\n const handleBlur = () => {\n if (!value) return\n\n if (value > max) {\n if (onChange) onChange(max)\n }\n if (value < min) {\n if (onChange) onChange(min)\n }\n }\n\n const handleChangeSlider = (value?: number) => {\n if (!value) {\n return\n }\n if (onChange) onChange(round(fromSlider(value)))\n }\n\n return {\n handleChangeSlider,\n handleBlur,\n toSlider,\n fromSlider,\n sliderValue,\n sliderStep,\n sliderMin,\n sliderMax\n }\n}\n"],"names":["useSliderAlgorithmic","min","max","defaultValue","value","onChange","fromSlider","toSlider","round","useLogarithmic","sliderValue","sliderStep","sliderMin","sliderMax"],"mappings":"kEAUO,MAAMA,EAAuB,CAAC,CAAE,IAAAC,EAAK,IAAAC,EAAK,aAAAC,EAAc,MAAAC,EAAO,SAAAC,KAAqC,CACzG,KAAM,CAAE,WAAAC,EAAY,SAAAC,EAAU,MAAAC,GAAUC,EAAe,CAAE,IAAAR,EAAK,IAAAC,EAAK,WAAYC,EAAc,EAEvFO,EAAcH,EAASH,CAAK,EAE5BO,EAAa,IAEbC,EAAYL,EAASN,CAAG,EACxBY,EAAYN,EAASL,CAAG,EAoB9B,MAAO,CACL,mBAR0BE,GAAmB,CACxCA,GAGDC,GAAUA,EAASG,EAAMF,EAAWF,CAAK,CAAC,CAAC,CACjD,EAIE,WApBiB,IAAM,CAClBA,IAEDA,EAAQF,GACNG,KAAmBH,CAAG,EAExBE,EAAQH,GACNI,KAAmBJ,CAAG,EAE9B,EAYE,SAAAM,EACA,WAAAD,EACA,YAAAI,EACA,WAAAC,EACA,UAAAC,EACA,UAAAC,CAAA,CAEJ"}
@@ -1,2 +1,2 @@
1
- import{createPhoneNumber as o}from"./createPhoneNumber.js";import{scrollToElement as m}from"./scrollToElement.js";import{cn as f}from"./cn.js";import{isClient as p}from"./isClient.js";import{capitalize as s}from"./capitalize.js";import{mergeRefs as n}from"./mergeRefs.js";import{TypeGuards as d}from"./typeGuards.js";import{getUuid as b}from"./uuid.js";import{localStorageActions as A}from"./localStorageActions.js";import{assertUnreachable as h}from"./assertUnreachable.js";import{ErrorBoundary as y}from"./ErrorBoundary.js";import{sessionStorageActions as E}from"./sessionStorage.js";import{extractTextFromHtml as P}from"./extractTextFromHtml.js";import{VariableContextHolder as S}from"./variableHolder/variableContextHolder.js";import{defaultAllowedPrefixes as w,variableResolver as z}from"./variables/variableResolver.js";export{y as ErrorBoundary,d as TypeGuards,S as VariableContextHolder,h as assertUnreachable,s as capitalize,f as cn,o as createPhoneNumber,w as defaultAllowedPrefixes,P as extractTextFromHtml,b as getUuid,p as isClient,A as localStorageActions,n as mergeRefs,m as scrollToElement,E as sessionStorageActions,z as variableResolver};
1
+ import{createPhoneNumber as e}from"./createPhoneNumber.js";import{scrollToElement as m}from"./scrollToElement.js";import{cn as a}from"./cn.js";import{isClient as p}from"./isClient.js";import{capitalize as s}from"./capitalize.js";import{mergeRefs as n}from"./mergeRefs.js";import{TypeGuards as d}from"./typeGuards.js";import{getUuid as u}from"./uuid.js";import{localStorageActions as A}from"./localStorageActions.js";import{assertUnreachable as h}from"./assertUnreachable.js";import{ErrorBoundary as y}from"./ErrorBoundary.js";import{sessionStorageActions as E}from"./sessionStorage.js";import{extractTextFromHtml as H}from"./extractTextFromHtml.js";import{VariableContextHolder as R}from"./variableHolder/variableContextHolder.js";import{defaultAllowedPrefixes as U,variableResolver as V}from"./variables/variableResolver.js";import{VariablesFork as w}from"./variablesFork/VariablesFork.js";export{y as ErrorBoundary,d as TypeGuards,R as VariableContextHolder,w as VariablesFork,h as assertUnreachable,s as capitalize,a as cn,e as createPhoneNumber,U as defaultAllowedPrefixes,H as extractTextFromHtml,u as getUuid,p as isClient,A as localStorageActions,n as mergeRefs,m as scrollToElement,E as sessionStorageActions,V as variableResolver};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"variableContextHolder.js","sources":["../../../../../lib/shared/utils/variableHolder/variableContextHolder.ts"],"sourcesContent":["import { localStorageActions } from '../localStorageActions'\n\nexport interface Variable<Key = string, Value = string> {\n _id: string\n key: Key\n value: Value\n createdAt: string\n updatedAt: string\n description: string\n}\n\nexport type VariableEntry<Key = string, Value = string> = [Key, Value]\n\nexport interface IVariableContextHolder<Key, Value> {\n /**\n * список переменных, находящихся в имплементации\n */\n variables: Variable<Key, Value>[]\n /**\n * метод для добавления переменной\n * @param variable\n */\n append: (variable: Variable<Key, Value>) => void\n /**\n * метод для удаления переменной\n * @param key\n */\n remove: (key: Key) => void\n /**\n * метод для проверки наличия переменной по ключу\n * @param key\n */\n has: (key: Key) => boolean\n /**\n * метод для замены всех переменных\n * @param variables\n */\n replace: (variables: Variable<Key, Value>[]) => void\n /**\n * метод для очистки переменных\n */\n clear: () => void\n /**\n * метод для обновления переменной, по её идентификатору\n * @param id\n * @param variable\n */\n update: (id: string, variable: Variable<Key, Value>) => void\n /**\n * получение вхождений переменных по ключам\n * @param keys\n * @returns {VariableEntry<Key, Value>[]} entries `Array<[Key, Value]>`\n */\n entriesOf: (...keys: Key[]) => VariableEntry<Key, Value>[]\n /**\n * метод для подписки на изменения переменных\n * @param listener\n * @returns функция для отписки\n */\n observe: (listener: (variables: Variable<Key, Value>[]) => void) => () => void\n /**\n * получение переменной по ключу\n * @param key\n * @returns `Variable<Key, Value>` если переменная присутствует, `undefined` если переменной не существует\n */\n get: (key: Key) => Variable<Key, Value> | undefined\n}\n\nexport interface VariableStore {\n setItem: <T>(key: string, value: T) => void\n getItem: <T>(key: string) => T | null\n clearItems: (...keys: string[]) => void\n}\n\nclass InMemoryVariableStore implements VariableStore {\n private _store = new Map<string, unknown>()\n\n constructor() {}\n\n clearItems(...keys: string[]): void {\n for (const key of keys) {\n this._store.delete(key)\n }\n }\n\n getItem<T>(key: string): T | null {\n return (this._store.get(key) as T) ?? null\n }\n\n setItem<T>(key: string, value: T): void {\n this._store.set(key, value)\n }\n}\n\n/**\n * Класс для управления переменными.\n * Присутствует возможность использования в среде исполнения NodeJS, при этом будет использоваться in-memory хранилище переменных, что может потреблять дополнительную память приложения\n *\n * @example Базовое использование\n * ```ts\n * // используем статичный метод класса для получения инстанса\n * const holder = VariableContextHolder.getInstance('VARIABLE_STORE')\n *\n * // эмулируем создание переменной\n * const variable: Variable = {\n * _id: Math.random().toString(36).substring(2),\n * // ключ должен быть обёрнут в шаблон переменной\n * // чтобы это сделать, используем статичный метод\n * key: VariableContextHolder.wrap('variable_key'),\n * value: 'variable_value',\n * createdAt: new Date().toISOString(),\n * updatedAt: new Date().toISOString(),\n * description: ''\n * }\n *\n * holder.append(variable)\n *\n * holder.variables.forEach((v) => {\n * // рендерим переменные как в соответствии с требованиями\n * })\n * ```\n *\n * @example Использование с react\n * ```tsx\n * const Component = () => {\n * // создадим ref с экземпляром класса (это нужно чтобы не изменять ссылку при ре-рендере)\n * const holder = useRef(VariableContextHolder.getInstance('VARIABLE_STORE'))\n * // подключаем и подписываемся на мутацию переменных\n * const variables = useSyncExternalStore(holder.current.observe, () => holder.current.variables)\n *\n * return (\n * <div>\n * {variables.map((variable) => (\n * // рендерим переменные как в соответствии с требованиями\n * ))}\n * </div>\n * )\n * }\n * ```\n *\n * @example Синхронизация с сервером\n * ```ts\n * const holder = VariableContextHolder.getInstance('VARIABLE_STORE')\n *\n * // загружаем переменные с сервера\n * fetch('https://backend.url/variables')\n * .then((response) => response.json())\n * .then((data) => holder.replace(data))\n * ```\n *\n * @example Обход строки для замены переменных на их значения\n * ```ts\n * const holder = VariableContextHolder.getInstance('VARIABLE_STORE')\n *\n * const transformVariable = (value: string): string => {\n * let str = value\n * // находим все переменные в строке\n * let matches = VariableContextHolder.match(str)\n * // получаем вхождения по найденным переменным\n * let variables = holder.entriesOf(...(matches ?? []))\n *\n * // выполняем замену переменных до тех пор, пока в строке содержатся переменные\n * while (!TypeGuards.isArrayEmpty(variables)) {\n * variables.forEach(([key, value]) => {\n * // заменяем каждую переменную на её значение\n * str = str.replace(key, value)\n * })\n * // пробуем снова получить переменные в строке,\n * // так как переменная может содержать другую переменную\n * matches = VariableContextHolder.match(str)\n * variables = holder.entriesOf(...(matches ?? []))\n * }\n *\n * return str\n * }\n *\n * const stringWithVariables = 'Процентная ставка \\${percent}% годовых до \\${months} месяцев'\n * const processedString = transformVariable(stringWithVariables)\n * ```\n */\nexport class VariableContextHolder<Key extends string = string, Value = string> implements IVariableContextHolder<Key, Value> {\n private _variables: Variable<Key, Value>[] = []\n private _listeners = new Map<symbol, (variables: Variable<Key, Value>[]) => void>()\n private _nextListenerId: number = 0\n private _storeContext: VariableStore\n\n private static _VARIABLE_REGEX: RegExp = /\\$\\{([^}]+)}/g\n private static _VARIABLE_PATTERN: string = '${variable}'\n private static _instance = new Map<string, VariableContextHolder>()\n\n private constructor(private _store: string) {\n // create in-memory store if instance created out of browser\n if (typeof window === 'undefined') {\n this._storeContext = new InMemoryVariableStore()\n } else {\n this._storeContext = localStorageActions\n }\n\n this._variables = this._storeContext.getItem<Variable<Key, Value>[]>(this._store) ?? []\n }\n\n /**\n * метод для извлечения ключа переменной из шаблона\n * @param variable\n */\n public static unwrap(variable: string): string {\n return variable.replace(/\\$\\{|}/g, '')\n }\n\n /**\n * метод для оборачивания ключа переменной в шаблон\n * @param variable\n */\n public static wrap(variable: string): string {\n return this._VARIABLE_PATTERN.replace('variable', variable)\n }\n\n /**\n * метод для поиска переменных в строке\n * @param pattern\n * @returns `string[]` если переменные присутствуют в строке, иначе `null`\n */\n public static match(pattern: string): string[] | null {\n return pattern.match(this._VARIABLE_REGEX) as string[] | null\n }\n\n /**\n * метод для получения синглтон экземпляра класса по ключу хранилища\n * @param store\n * @returns экземпляр подключенный к in-memory хранилищу если код выполняется в NodeJS, `localStorage` если в браузере\n */\n public static getInstance(store: string): VariableContextHolder {\n const instance = VariableContextHolder._instance.get(store)\n\n if (!instance) {\n const holder = new VariableContextHolder(store)\n VariableContextHolder._instance.set(store, holder)\n\n return holder\n }\n\n return instance\n }\n\n get variables() {\n return this._variables\n }\n\n private collect() {\n this._storeContext.setItem(this._store, this._variables)\n this._listeners.forEach((listener) => listener(this._variables))\n\n return this._variables\n }\n\n get = (id: string) => {\n return this._variables.find((variable) => variable._id === id)\n }\n\n append = (variable: Variable<Key, Value>) => {\n this._variables.push(variable)\n this.collect()\n }\n\n clear = () => {\n this._variables = []\n this.collect()\n }\n\n entriesOf = (...keys: Key[]): VariableEntry<Key, Value>[] => {\n const entries: VariableEntry<Key, Value>[] = []\n\n for (const variable of this._variables) {\n if (keys.includes(variable.key)) entries.push([variable.key, variable.value])\n }\n\n return entries\n }\n\n remove = (key: Key) => {\n this._variables = this._variables.filter((v) => v.key !== key)\n this.collect()\n }\n\n replace = (variables: Variable<Key, Value>[]): Variable<Key, Value>[] => {\n this._variables = variables\n\n return this.collect()\n }\n\n update = (id: string, variable: Variable<Key, Value>): Variable<Key, Value>[] => {\n const updated = this._variables.map((v) => (v._id === id ? variable : v))\n\n return this.replace(updated)\n }\n\n observe = (listener: (variables: Variable<Key, Value>[]) => void): (() => void) => {\n const listenerId = Symbol(this._nextListenerId++)\n this._listeners.set(listenerId, listener)\n\n return () => {\n this._listeners.delete(listenerId)\n }\n }\n\n has(key: Key): boolean {\n return this._variables.some((variable) => variable.key === key)\n }\n}\n"],"names":["InMemoryVariableStore","keys","key","value","VariableContextHolder","_store","localStorageActions","variable","pattern","store","instance","holder","listener","id","entries","v","variables","updated","listenerId"],"mappings":"gEA0EA,MAAMA,CAA+C,CAC3C,WAAa,IAErB,aAAc,CAAC,CAEf,cAAcC,EAAsB,CAClC,UAAWC,KAAOD,EAChB,KAAK,OAAO,OAAOC,CAAG,CAE1B,CAEA,QAAWA,EAAuB,CAChC,OAAQ,KAAK,OAAO,IAAIA,CAAG,GAAW,IACxC,CAEA,QAAWA,EAAaC,EAAgB,CACtC,KAAK,OAAO,IAAID,EAAKC,CAAK,CAC5B,CACF,CAwFO,MAAMC,CAAiH,CAUpH,YAAoBC,EAAgB,CAAhB,KAAA,OAAAA,EAEtB,OAAO,OAAW,IACpB,KAAK,cAAgB,IAAIL,EAEzB,KAAK,cAAgBM,EAGvB,KAAK,WAAa,KAAK,cAAc,QAAgC,KAAK,MAAM,GAAK,CAAA,CACvF,CAlBQ,WAAqC,CAAA,EACrC,eAAiB,IACjB,gBAA0B,EAC1B,cAER,OAAe,gBAA0B,gBACzC,OAAe,kBAA4B,cAC3C,OAAe,UAAY,IAAI,IAiB/B,OAAc,OAAOC,EAA0B,CAC7C,OAAOA,EAAS,QAAQ,UAAW,EAAE,CACvC,CAMA,OAAc,KAAKA,EAA0B,CAC3C,OAAO,KAAK,kBAAkB,QAAQ,WAAYA,CAAQ,CAC5D,CAOA,OAAc,MAAMC,EAAkC,CACpD,OAAOA,EAAQ,MAAM,KAAK,eAAe,CAC3C,CAOA,OAAc,YAAYC,EAAsC,CAC9D,MAAMC,EAAWN,EAAsB,UAAU,IAAIK,CAAK,EAE1D,GAAI,CAACC,EAAU,CACb,MAAMC,EAAS,IAAIP,EAAsBK,CAAK,EAC9C,OAAAL,EAAsB,UAAU,IAAIK,EAAOE,CAAM,EAE1CA,CACT,CAEA,OAAOD,CACT,CAEA,IAAI,WAAY,CACd,OAAO,KAAK,UACd,CAEQ,SAAU,CAChB,YAAK,cAAc,QAAQ,KAAK,OAAQ,KAAK,UAAU,EACvD,KAAK,WAAW,QAASE,GAAaA,EAAS,KAAK,UAAU,CAAC,EAExD,KAAK,UACd,CAEA,IAAOC,GACE,KAAK,WAAW,KAAMN,GAAaA,EAAS,MAAQM,CAAE,EAG/D,OAAUN,GAAmC,CAC3C,KAAK,WAAW,KAAKA,CAAQ,EAC7B,KAAK,QAAA,CACP,EAEA,MAAQ,IAAM,CACZ,KAAK,WAAa,CAAA,EAClB,KAAK,QAAA,CACP,EAEA,UAAY,IAAIN,IAA6C,CAC3D,MAAMa,EAAuC,CAAA,EAE7C,UAAWP,KAAY,KAAK,WACtBN,EAAK,SAASM,EAAS,GAAG,GAAGO,EAAQ,KAAK,CAACP,EAAS,IAAKA,EAAS,KAAK,CAAC,EAG9E,OAAOO,CACT,EAEA,OAAUZ,GAAa,CACrB,KAAK,WAAa,KAAK,WAAW,OAAQa,GAAMA,EAAE,MAAQb,CAAG,EAC7D,KAAK,QAAA,CACP,EAEA,QAAWc,IACT,KAAK,WAAaA,EAEX,KAAK,QAAA,GAGd,OAAS,CAACH,EAAYN,IAA2D,CAC/E,MAAMU,EAAU,KAAK,WAAW,IAAKF,GAAOA,EAAE,MAAQF,EAAKN,EAAWQ,CAAE,EAExE,OAAO,KAAK,QAAQE,CAAO,CAC7B,EAEA,QAAWL,GAAwE,CACjF,MAAMM,EAAa,OAAO,KAAK,iBAAiB,EAChD,YAAK,WAAW,IAAIA,EAAYN,CAAQ,EAEjC,IAAM,CACX,KAAK,WAAW,OAAOM,CAAU,CACnC,CACF,EAEA,IAAIhB,EAAmB,CACrB,OAAO,KAAK,WAAW,KAAMK,GAAaA,EAAS,MAAQL,CAAG,CAChE,CACF"}
1
+ {"version":3,"file":"variableContextHolder.js","sources":["../../../../../lib/shared/utils/variableHolder/variableContextHolder.ts"],"sourcesContent":["import { localStorageActions } from '../localStorageActions'\n\nexport interface Variable<Key = string, Value = string> {\n _id: string\n key: Key\n value: Value\n createdAt: string\n updatedAt: string\n description: string\n}\n\nexport type VariableEntry<Key = string, Value = string> = [Key, Value]\n\nexport interface IVariableContextHolder<Key, Value> {\n /**\n * список переменных, находящихся в имплементации\n */\n variables: Variable<Key, Value>[]\n /**\n * метод для добавления переменной\n * @param variable\n */\n append: (variable: Variable<Key, Value>) => void\n /**\n * метод для удаления переменной\n * @param key\n */\n remove: (key: Key) => void\n /**\n * метод для проверки наличия переменной по ключу\n * @param key\n */\n has: (key: Key) => boolean\n /**\n * метод для замены всех переменных\n * @param variables\n */\n replace: (variables: Variable<Key, Value>[]) => void\n /**\n * метод для очистки переменных\n */\n clear: () => void\n /**\n * метод для обновления переменной, по её идентификатору\n * @param id\n * @param variable\n */\n update: (id: string, variable: Variable<Key, Value>) => void\n /**\n * получение вхождений переменных по ключам\n * @param keys\n * @returns {VariableEntry<Key, Value>[]} entries `Array<[Key, Value]>`\n */\n entriesOf: (...keys: Key[]) => VariableEntry<Key, Value>[]\n /**\n * метод для подписки на изменения переменных\n * @param listener\n * @returns функция для отписки\n */\n observe: (listener: (variables: Variable<Key, Value>[]) => void) => () => void\n /**\n * получение переменной по ключу\n * @param key\n * @returns `Variable<Key, Value>` если переменная присутствует, `undefined` если переменной не существует\n */\n get: (key: Key) => Variable<Key, Value> | undefined\n}\n\nexport interface VariableStore {\n setItem: <T>(key: string, value: T) => void\n getItem: <T>(key: string) => T | null\n clearItems: (...keys: string[]) => void\n}\n\nclass InMemoryVariableStore implements VariableStore {\n private _store = new Map<string, unknown>()\n\n constructor() {}\n\n clearItems(...keys: string[]): void {\n for (const key of keys) {\n this._store.delete(key)\n }\n }\n\n getItem<T>(key: string): T | null {\n return (this._store.get(key) as T) ?? null\n }\n\n setItem<T>(key: string, value: T): void {\n this._store.set(key, value)\n }\n}\n\n/**\n * Класс для управления переменными.\n * Присутствует возможность использования в среде исполнения NodeJS, при этом будет использоваться in-memory хранилище переменных, что может потреблять дополнительную память приложения\n *\n * @example Базовое использование\n * ```ts\n * // используем статичный метод класса для получения инстанса\n * const holder = VariableContextHolder.getInstance('VARIABLE_STORE')\n *\n * // эмулируем создание переменной\n * const variable: Variable = {\n * _id: Math.random().toString(36).substring(2),\n * // ключ должен быть обёрнут в шаблон переменной\n * // чтобы это сделать, используем статичный метод\n * key: VariableContextHolder.wrap('variable_key'),\n * value: 'variable_value',\n * createdAt: new Date().toISOString(),\n * updatedAt: new Date().toISOString(),\n * description: ''\n * }\n *\n * holder.append(variable)\n *\n * holder.variables.forEach((v) => {\n * // рендерим переменные как в соответствии с требованиями\n * })\n * ```\n *\n * @example Использование с react\n * ```tsx\n * const Component = () => {\n * // создадим ref с экземпляром класса (это нужно чтобы не изменять ссылку при ре-рендере)\n * const holder = useRef(VariableContextHolder.getInstance('VARIABLE_STORE'))\n * // подключаем и подписываемся на мутацию переменных\n * const variables = useSyncExternalStore(holder.current.observe, () => holder.current.variables)\n *\n * return (\n * <div>\n * {variables.map((variable) => (\n * // рендерим переменные как в соответствии с требованиями\n * ))}\n * </div>\n * )\n * }\n * ```\n *\n * @example Синхронизация с сервером\n * ```ts\n * const holder = VariableContextHolder.getInstance('VARIABLE_STORE')\n *\n * // загружаем переменные с сервера\n * fetch('https://backend.url/variables')\n * .then((response) => response.json())\n * .then((data) => holder.replace(data))\n * ```\n *\n * @example Обход строки для замены переменных на их значения\n * ```ts\n * const holder = VariableContextHolder.getInstance('VARIABLE_STORE')\n *\n * const transformVariable = (value: string): string => {\n * let str = value\n * // находим все переменные в строке\n * let matches = VariableContextHolder.match(str)\n * // получаем вхождения по найденным переменным\n * let variables = holder.entriesOf(...(matches ?? []))\n *\n * // выполняем замену переменных до тех пор, пока в строке содержатся переменные\n * while (!TypeGuards.isArrayEmpty(variables)) {\n * variables.forEach(([key, value]) => {\n * // заменяем каждую переменную на её значение\n * str = str.replace(key, value)\n * })\n * // пробуем снова получить переменные в строке,\n * // так как переменная может содержать другую переменную\n * matches = VariableContextHolder.match(str)\n * variables = holder.entriesOf(...(matches ?? []))\n * }\n *\n * return str\n * }\n *\n * const stringWithVariables = 'Процентная ставка \\${percent}% годовых до \\${months} месяцев'\n * const processedString = transformVariable(stringWithVariables)\n * ```\n */\n/**\n * @deprecated dont use\n */\nexport class VariableContextHolder<Key extends string = string, Value = string> implements IVariableContextHolder<Key, Value> {\n private _variables: Variable<Key, Value>[] = []\n private _listeners = new Map<symbol, (variables: Variable<Key, Value>[]) => void>()\n private _nextListenerId: number = 0\n private _storeContext: VariableStore\n\n private static _VARIABLE_REGEX: RegExp = /\\$\\{([^}]+)}/g\n private static _VARIABLE_PATTERN: string = '${variable}'\n private static _instance = new Map<string, VariableContextHolder>()\n\n private constructor(private _store: string) {\n // create in-memory store if instance created out of browser\n if (typeof window === 'undefined') {\n this._storeContext = new InMemoryVariableStore()\n } else {\n this._storeContext = localStorageActions\n }\n\n this._variables = this._storeContext.getItem<Variable<Key, Value>[]>(this._store) ?? []\n }\n\n /**\n * метод для извлечения ключа переменной из шаблона\n * @param variable\n */\n public static unwrap(variable: string): string {\n return variable.replace(/\\$\\{|}/g, '')\n }\n\n /**\n * метод для оборачивания ключа переменной в шаблон\n * @param variable\n */\n public static wrap(variable: string): string {\n return this._VARIABLE_PATTERN.replace('variable', variable)\n }\n\n /**\n * метод для поиска переменных в строке\n * @param pattern\n * @returns `string[]` если переменные присутствуют в строке, иначе `null`\n */\n public static match(pattern: string): string[] | null {\n return pattern.match(this._VARIABLE_REGEX) as string[] | null\n }\n\n /**\n * метод для получения синглтон экземпляра класса по ключу хранилища\n * @param store\n * @returns экземпляр подключенный к in-memory хранилищу если код выполняется в NodeJS, `localStorage` если в браузере\n */\n public static getInstance(store: string): VariableContextHolder {\n const instance = VariableContextHolder._instance.get(store)\n\n if (!instance) {\n const holder = new VariableContextHolder(store)\n VariableContextHolder._instance.set(store, holder)\n\n return holder\n }\n\n return instance\n }\n\n get variables() {\n return this._variables\n }\n\n private collect() {\n this._storeContext.setItem(this._store, this._variables)\n this._listeners.forEach((listener) => listener(this._variables))\n\n return this._variables\n }\n\n get = (id: string) => {\n return this._variables.find((variable) => variable._id === id)\n }\n\n append = (variable: Variable<Key, Value>) => {\n this._variables.push(variable)\n this.collect()\n }\n\n clear = () => {\n this._variables = []\n this.collect()\n }\n\n entriesOf = (...keys: Key[]): VariableEntry<Key, Value>[] => {\n const entries: VariableEntry<Key, Value>[] = []\n\n for (const variable of this._variables) {\n if (keys.includes(variable.key)) entries.push([variable.key, variable.value])\n }\n\n return entries\n }\n\n remove = (key: Key) => {\n this._variables = this._variables.filter((v) => v.key !== key)\n this.collect()\n }\n\n replace = (variables: Variable<Key, Value>[]): Variable<Key, Value>[] => {\n this._variables = variables\n\n return this.collect()\n }\n\n update = (id: string, variable: Variable<Key, Value>): Variable<Key, Value>[] => {\n const updated = this._variables.map((v) => (v._id === id ? variable : v))\n\n return this.replace(updated)\n }\n\n observe = (listener: (variables: Variable<Key, Value>[]) => void): (() => void) => {\n const listenerId = Symbol(this._nextListenerId++)\n this._listeners.set(listenerId, listener)\n\n return () => {\n this._listeners.delete(listenerId)\n }\n }\n\n has(key: Key): boolean {\n return this._variables.some((variable) => variable.key === key)\n }\n}\n"],"names":["InMemoryVariableStore","keys","key","value","VariableContextHolder","_store","localStorageActions","variable","pattern","store","instance","holder","listener","id","entries","v","variables","updated","listenerId"],"mappings":"gEA0EA,MAAMA,CAA+C,CAC3C,WAAa,IAErB,aAAc,CAAC,CAEf,cAAcC,EAAsB,CAClC,UAAWC,KAAOD,EAChB,KAAK,OAAO,OAAOC,CAAG,CAE1B,CAEA,QAAWA,EAAuB,CAChC,OAAQ,KAAK,OAAO,IAAIA,CAAG,GAAW,IACxC,CAEA,QAAWA,EAAaC,EAAgB,CACtC,KAAK,OAAO,IAAID,EAAKC,CAAK,CAC5B,CACF,CA2FO,MAAMC,CAAiH,CAUpH,YAAoBC,EAAgB,CAAhB,KAAA,OAAAA,EAEtB,OAAO,OAAW,IACpB,KAAK,cAAgB,IAAIL,EAEzB,KAAK,cAAgBM,EAGvB,KAAK,WAAa,KAAK,cAAc,QAAgC,KAAK,MAAM,GAAK,CAAA,CACvF,CAlBQ,WAAqC,CAAA,EACrC,eAAiB,IACjB,gBAA0B,EAC1B,cAER,OAAe,gBAA0B,gBACzC,OAAe,kBAA4B,cAC3C,OAAe,UAAY,IAAI,IAiB/B,OAAc,OAAOC,EAA0B,CAC7C,OAAOA,EAAS,QAAQ,UAAW,EAAE,CACvC,CAMA,OAAc,KAAKA,EAA0B,CAC3C,OAAO,KAAK,kBAAkB,QAAQ,WAAYA,CAAQ,CAC5D,CAOA,OAAc,MAAMC,EAAkC,CACpD,OAAOA,EAAQ,MAAM,KAAK,eAAe,CAC3C,CAOA,OAAc,YAAYC,EAAsC,CAC9D,MAAMC,EAAWN,EAAsB,UAAU,IAAIK,CAAK,EAE1D,GAAI,CAACC,EAAU,CACb,MAAMC,EAAS,IAAIP,EAAsBK,CAAK,EAC9C,OAAAL,EAAsB,UAAU,IAAIK,EAAOE,CAAM,EAE1CA,CACT,CAEA,OAAOD,CACT,CAEA,IAAI,WAAY,CACd,OAAO,KAAK,UACd,CAEQ,SAAU,CAChB,YAAK,cAAc,QAAQ,KAAK,OAAQ,KAAK,UAAU,EACvD,KAAK,WAAW,QAASE,GAAaA,EAAS,KAAK,UAAU,CAAC,EAExD,KAAK,UACd,CAEA,IAAOC,GACE,KAAK,WAAW,KAAMN,GAAaA,EAAS,MAAQM,CAAE,EAG/D,OAAUN,GAAmC,CAC3C,KAAK,WAAW,KAAKA,CAAQ,EAC7B,KAAK,QAAA,CACP,EAEA,MAAQ,IAAM,CACZ,KAAK,WAAa,CAAA,EAClB,KAAK,QAAA,CACP,EAEA,UAAY,IAAIN,IAA6C,CAC3D,MAAMa,EAAuC,CAAA,EAE7C,UAAWP,KAAY,KAAK,WACtBN,EAAK,SAASM,EAAS,GAAG,GAAGO,EAAQ,KAAK,CAACP,EAAS,IAAKA,EAAS,KAAK,CAAC,EAG9E,OAAOO,CACT,EAEA,OAAUZ,GAAa,CACrB,KAAK,WAAa,KAAK,WAAW,OAAQa,GAAMA,EAAE,MAAQb,CAAG,EAC7D,KAAK,QAAA,CACP,EAEA,QAAWc,IACT,KAAK,WAAaA,EAEX,KAAK,QAAA,GAGd,OAAS,CAACH,EAAYN,IAA2D,CAC/E,MAAMU,EAAU,KAAK,WAAW,IAAKF,GAAOA,EAAE,MAAQF,EAAKN,EAAWQ,CAAE,EAExE,OAAO,KAAK,QAAQE,CAAO,CAC7B,EAEA,QAAWL,GAAwE,CACjF,MAAMM,EAAa,OAAO,KAAK,iBAAiB,EAChD,YAAK,WAAW,IAAIA,EAAYN,CAAQ,EAEjC,IAAM,CACX,KAAK,WAAW,OAAOM,CAAU,CACnC,CACF,EAEA,IAAIhB,EAAmB,CACrB,OAAO,KAAK,WAAW,KAAMK,GAAaA,EAAS,MAAQL,CAAG,CAChE,CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"variableResolver.js","sources":["../../../../../lib/shared/utils/variables/variableResolver.ts"],"sourcesContent":["import { type AllowedVariablePrefix, type Resolved, type VariablePattern, type VariableType } from './types'\n\nexport const defaultAllowedPrefixes: AllowedVariablePrefix[] = ['$', '@', '#']\n\nexport const variableResolver = <Variable extends VariableType>() => {\n const patterns: VariablePattern[] = []\n const variables: Map<string, string> = new Map()\n\n const addPattern = (start: VariablePattern['start'], end: VariablePattern['end']) => {\n patterns.push({ start, end })\n return resolver\n }\n\n const addVariables = (vars: Variable[]) => {\n vars?.forEach(({ key, value }) => {\n variables.set(key, value)\n })\n return resolver\n }\n\n const escapeVariable = (string: string): string => {\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n }\n\n const unwrapVariable = (string: string, allowedPrefixes?: AllowedVariablePrefix[]): string => {\n const prefixes = allowedPrefixes || defaultAllowedPrefixes\n for (const prefix of prefixes) {\n const start = `${prefix}{`\n const end = '}'\n if (string.startsWith(start) && string.endsWith(end)) {\n return string.slice(start.length, -end.length)\n }\n }\n\n return string // не соответствует ни одному шаблону\n }\n\n const wrapVariable = (string: string, allowedPrefixes?: AllowedVariablePrefix[]): string => {\n const prefixes = allowedPrefixes || ['$']\n const prefix = prefixes[0]\n return `${prefix}{${string}}`\n }\n\n const resolve = <T>(data: T): Resolved<T> => {\n if (typeof data === 'string') {\n return replaceInString(data) as Resolved<T>\n }\n\n if (Array.isArray(data)) {\n return data.map((item) => resolve(item)) as Resolved<T>\n }\n\n if (typeof data === 'object' && data !== null) {\n const result = {} as Record<keyof T, unknown>\n for (const key in data) {\n result[key] = resolve(data[key])\n }\n return result as Resolved<T>\n }\n\n return data as Resolved<T>\n }\n\n const replaceInString = (str: string): string => {\n let result = str\n for (const { start, end } of patterns) {\n const regex = new RegExp(`${escapeVariable(start)}(.*?)${escapeVariable(end)}`, 'g')\n result = result.replace(regex, (match, varName) => {\n const fullKey = `${start}${varName}${end}`\n return variables.get(fullKey) ?? match\n })\n }\n return result\n }\n\n const resolver = {\n addPattern,\n addVariables,\n unwrapVariable,\n wrapVariable,\n escapeVariable,\n resolve\n }\n\n return resolver\n}\n"],"names":["defaultAllowedPrefixes","variableResolver","patterns","variables","addPattern","start","end","resolver","addVariables","vars","key","value","escapeVariable","string","unwrapVariable","allowedPrefixes","prefixes","prefix","wrapVariable","resolve","data","replaceInString","item","result","str","regex","match","varName","fullKey"],"mappings":"AAEO,MAAMA,EAAkD,CAAC,IAAK,IAAK,GAAG,EAEhEC,EAAmB,IAAqC,CACnE,MAAMC,EAA8B,CAAA,EAC9BC,MAAqC,IAErCC,EAAa,CAACC,EAAiCC,KACnDJ,EAAS,KAAK,CAAE,MAAAG,EAAO,IAAAC,CAAA,CAAK,EACrBC,GAGHC,EAAgBC,IACpBA,GAAM,QAAQ,CAAC,CAAE,IAAAC,EAAK,MAAAC,KAAY,CAChCR,EAAU,IAAIO,EAAKC,CAAK,CAC1B,CAAC,EACMJ,GAGHK,EAAkBC,GACfA,EAAO,QAAQ,sBAAuB,MAAM,EAG/CC,EAAiB,CAACD,EAAgBE,IAAsD,CAC5F,MAAMC,EAAWD,GAAmBf,EACpC,UAAWiB,KAAUD,EAAU,CAC7B,MAAMX,EAAQ,GAAGY,CAAM,IACjBX,EAAM,IACZ,GAAIO,EAAO,WAAWR,CAAK,GAAKQ,EAAO,SAASP,CAAG,EACjD,OAAOO,EAAO,MAAMR,EAAM,OAAQ,CAACC,EAAI,MAAM,CAEjD,CAEA,OAAOO,CACT,EAEMK,EAAe,CAACL,EAAgBE,IAG7B,IAFUA,GAAmB,CAAC,GAAG,GAChB,CAAC,CACT,IAAIF,CAAM,IAGtBM,EAAcC,GAAyB,CAC3C,GAAI,OAAOA,GAAS,SAClB,OAAOC,EAAgBD,CAAI,EAG7B,GAAI,MAAM,QAAQA,CAAI,EACpB,OAAOA,EAAK,IAAKE,GAASH,EAAQG,CAAI,CAAC,EAGzC,GAAI,OAAOF,GAAS,UAAYA,IAAS,KAAM,CAC7C,MAAMG,EAAS,CAAA,EACf,UAAWb,KAAOU,EAChBG,EAAOb,CAAG,EAAIS,EAAQC,EAAKV,CAAG,CAAC,EAEjC,OAAOa,CACT,CAEA,OAAOH,CACT,EAEMC,EAAmBG,GAAwB,CAC/C,IAAID,EAASC,EACb,SAAW,CAAE,MAAAnB,EAAO,IAAAC,CAAA,IAASJ,EAAU,CACrC,MAAMuB,EAAQ,IAAI,OAAO,GAAGb,EAAeP,CAAK,CAAC,QAAQO,EAAeN,CAAG,CAAC,GAAI,GAAG,EACnFiB,EAASA,EAAO,QAAQE,EAAO,CAACC,EAAOC,IAAY,CACjD,MAAMC,EAAU,GAAGvB,CAAK,GAAGsB,CAAO,GAAGrB,CAAG,GACxC,OAAOH,EAAU,IAAIyB,CAAO,GAAKF,CACnC,CAAC,CACH,CACA,OAAOH,CACT,EAEMhB,EAAW,CACf,WAAAH,EACA,aAAAI,EACA,eAAAM,EACA,aAAAI,EACA,eAAAN,EACA,QAAAO,CAAA,EAGF,OAAOZ,CACT"}
1
+ {"version":3,"file":"variableResolver.js","sources":["../../../../../lib/shared/utils/variables/variableResolver.ts"],"sourcesContent":["import { type AllowedVariablePrefix, type Resolved, type VariablePattern, type VariableType } from './types'\n\nexport const defaultAllowedPrefixes: AllowedVariablePrefix[] = ['$', '@', '#']\n\nexport type VariableResolver<Variable extends VariableType> = {\n addPattern: (start: VariablePattern['start'], end: VariablePattern['end']) => VariableResolver<Variable>\n addVariables: (vars: Variable[]) => VariableResolver<Variable>\n unwrapVariable: (string: string, allowedPrefixes?: AllowedVariablePrefix[]) => string\n wrapVariable: (string: string, allowedPrefixes?: AllowedVariablePrefix[]) => string\n escapeVariable: (string: string) => string\n resolve: <T>(data: T) => Resolved<T>\n}\n\nexport const variableResolver = <Variable extends VariableType>(): VariableResolver<Variable> => {\n const patterns: VariablePattern[] = []\n const variables: Map<string, string> = new Map()\n\n const addPattern = (start: VariablePattern['start'], end: VariablePattern['end']) => {\n patterns.push({ start, end })\n return resolver\n }\n\n const addVariables = (vars: Variable[]) => {\n vars?.forEach(({ key, value }) => {\n variables.set(key, value)\n })\n return resolver\n }\n\n const escapeVariable = (string: string): string => {\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n }\n\n const unwrapVariable = (string: string, allowedPrefixes?: AllowedVariablePrefix[]): string => {\n const prefixes = allowedPrefixes || defaultAllowedPrefixes\n for (const prefix of prefixes) {\n const start = `${prefix}{`\n const end = '}'\n if (string.startsWith(start) && string.endsWith(end)) {\n return string.slice(start.length, -end.length)\n }\n }\n\n return string // не соответствует ни одному шаблону\n }\n\n const wrapVariable = (string: string, allowedPrefixes?: AllowedVariablePrefix[]): string => {\n const prefixes = allowedPrefixes || ['$']\n const prefix = prefixes[0]\n return `${prefix}{${string}}`\n }\n\n const resolve = <T>(data: T): Resolved<T> => {\n if (typeof data === 'string') {\n return replaceInString(data) as Resolved<T>\n }\n\n if (Array.isArray(data)) {\n return data.map((item) => resolve(item)) as Resolved<T>\n }\n\n if (typeof data === 'object' && data !== null) {\n const result = {} as Record<keyof T, unknown>\n for (const key in data) {\n result[key] = resolve(data[key])\n }\n return result as Resolved<T>\n }\n\n return data as Resolved<T>\n }\n\n const replaceInString = (str: string): string => {\n let result = str\n for (const { start, end } of patterns) {\n const regex = new RegExp(`${escapeVariable(start)}(.*?)${escapeVariable(end)}`, 'g')\n result = result.replace(regex, (match, varName) => {\n const fullKey = `${start}${varName}${end}`\n return variables.get(fullKey) ?? match\n })\n }\n return result\n }\n\n const resolver = {\n addPattern,\n addVariables,\n unwrapVariable,\n wrapVariable,\n escapeVariable,\n resolve\n }\n\n return resolver\n}\n"],"names":["defaultAllowedPrefixes","variableResolver","patterns","variables","addPattern","start","end","resolver","addVariables","vars","key","value","escapeVariable","string","unwrapVariable","allowedPrefixes","prefixes","prefix","wrapVariable","resolve","data","replaceInString","item","result","str","regex","match","varName","fullKey"],"mappings":"AAEO,MAAMA,EAAkD,CAAC,IAAK,IAAK,GAAG,EAWhEC,EAAmB,IAAiE,CAC/F,MAAMC,EAA8B,CAAA,EAC9BC,MAAqC,IAErCC,EAAa,CAACC,EAAiCC,KACnDJ,EAAS,KAAK,CAAE,MAAAG,EAAO,IAAAC,CAAA,CAAK,EACrBC,GAGHC,EAAgBC,IACpBA,GAAM,QAAQ,CAAC,CAAE,IAAAC,EAAK,MAAAC,KAAY,CAChCR,EAAU,IAAIO,EAAKC,CAAK,CAC1B,CAAC,EACMJ,GAGHK,EAAkBC,GACfA,EAAO,QAAQ,sBAAuB,MAAM,EAG/CC,EAAiB,CAACD,EAAgBE,IAAsD,CAC5F,MAAMC,EAAWD,GAAmBf,EACpC,UAAWiB,KAAUD,EAAU,CAC7B,MAAMX,EAAQ,GAAGY,CAAM,IACjBX,EAAM,IACZ,GAAIO,EAAO,WAAWR,CAAK,GAAKQ,EAAO,SAASP,CAAG,EACjD,OAAOO,EAAO,MAAMR,EAAM,OAAQ,CAACC,EAAI,MAAM,CAEjD,CAEA,OAAOO,CACT,EAEMK,EAAe,CAACL,EAAgBE,IAG7B,IAFUA,GAAmB,CAAC,GAAG,GAChB,CAAC,CACT,IAAIF,CAAM,IAGtBM,EAAcC,GAAyB,CAC3C,GAAI,OAAOA,GAAS,SAClB,OAAOC,EAAgBD,CAAI,EAG7B,GAAI,MAAM,QAAQA,CAAI,EACpB,OAAOA,EAAK,IAAKE,GAASH,EAAQG,CAAI,CAAC,EAGzC,GAAI,OAAOF,GAAS,UAAYA,IAAS,KAAM,CAC7C,MAAMG,EAAS,CAAA,EACf,UAAWb,KAAOU,EAChBG,EAAOb,CAAG,EAAIS,EAAQC,EAAKV,CAAG,CAAC,EAEjC,OAAOa,CACT,CAEA,OAAOH,CACT,EAEMC,EAAmBG,GAAwB,CAC/C,IAAID,EAASC,EACb,SAAW,CAAE,MAAAnB,EAAO,IAAAC,CAAA,IAASJ,EAAU,CACrC,MAAMuB,EAAQ,IAAI,OAAO,GAAGb,EAAeP,CAAK,CAAC,QAAQO,EAAeN,CAAG,CAAC,GAAI,GAAG,EACnFiB,EAASA,EAAO,QAAQE,EAAO,CAACC,EAAOC,IAAY,CACjD,MAAMC,EAAU,GAAGvB,CAAK,GAAGsB,CAAO,GAAGrB,CAAG,GACxC,OAAOH,EAAU,IAAIyB,CAAO,GAAKF,CACnC,CAAC,CACH,CACA,OAAOH,CACT,EAEMhB,EAAW,CACf,WAAAH,EACA,aAAAI,EACA,eAAAM,EACA,aAAAI,EACA,eAAAN,EACA,QAAAO,CAAA,EAGF,OAAOZ,CACT"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VariablesFork.js","sources":["../../../../../lib/shared/utils/variablesFork/VariablesFork.ts"],"sourcesContent":["import { TypeGuards } from '../typeGuards'\n\nexport interface Var {\n key: string\n value: string\n description: string\n}\n\n/** Что нам для этого нужно\n * 1. Реализация CRUD для переменных в админке\n * 2.\n * - Нужно реализовать функцию traverseToData чтобы бежать по всей структуре данных\n * - Нужно реализовать функцию, которая ищет в строке переменную matchVarsFromString, и возвращает массив ключей переменных\n * - Для match нужно описать регулярку, которая матчит переменную, а так же добавить возможно прокидывать регулярку в конструктор\n * - Нужно реализовать функцию, которая массив ключей транформирует в entries [[${var}, 'boba'], [${var2}, 'biba']], чтобы трансформировать нужно написать метод entriesOf\n * - entriesOf метод, который сравнивает айтемы с бэка с текущим ключом и возвратает entries [[${var}, 'boba'], [${var2}, 'biba']]\n * - Потом нужно в текущей строке подменить ключ на value, делаем мы это через перебор всех переменных, которые мы нашли в строке\n * - Нужно ещё раз пробежатся по итовой строке, и проверить её на переменные с помощью функции matchVarsFromString\n * - Нужно добавить функции wrap и unwrap\n */\n\nexport class VariablesFork {\n private static regexes = [/\\$\\{([^}]+)}/g, /@\\{([^}]+)}/g]\n private static allowedPrefixes = ['$', '@', '#'] as const\n\n private constructor() {}\n\n static matchVariables(string: string) {\n const result = []\n for (const regex of this.regexes) {\n const matched = string.match(regex)\n\n if (matched) {\n result.push(...matched)\n }\n }\n\n return result\n }\n\n static wrap(string: string, prefix: (typeof this.allowedPrefixes)[number] | string) {\n return `${prefix}{${string}}`\n }\n\n static unwrap(string: (typeof this.allowedPrefixes)[number] | string): string {\n if (!(string.length > 1)) return string\n\n const firstChar = string[0]\n const secondChar = string[1]\n const isWrapped =\n this.allowedPrefixes.includes(firstChar as (typeof this.allowedPrefixes)[number]) &&\n secondChar === '{' &&\n string.endsWith('}')\n\n if (isWrapped) {\n return string.slice(2, -1)\n }\n\n return string\n }\n\n static mapKeysToVariables(keys: string[] | null, variables: Var[]) {\n const entries = []\n\n for (const variable of variables) {\n if (keys?.includes(variable.key)) {\n entries.push(variable)\n }\n }\n\n return entries\n }\n\n static interpolate(string: string, variables: Var[]) {\n let str = string\n\n let matches = this.matchVariables(string)\n let detectedVariables = this.mapKeysToVariables(matches ?? [], variables)\n\n while (!TypeGuards.isArrayEmpty(detectedVariables)) {\n detectedVariables.forEach(({ key, value }) => {\n str = str.replace(key, value)\n })\n\n matches = this.matchVariables(str)\n detectedVariables = this.mapKeysToVariables(matches ?? [], detectedVariables)\n }\n\n return str\n }\n\n static structureInterpolate<T>(data: T, variables: Var[]): T {\n if (typeof data === 'string') {\n return this.interpolate(data, variables) as T\n }\n\n if (TypeGuards.isArray(data)) {\n return data.map((item) => this.structureInterpolate(item, variables)) as T\n }\n\n if (typeof data === 'object' && data !== null) {\n const processed = {} as Record<keyof T, unknown>\n const keys = Object.keys(data) as (keyof T)[]\n\n for (const key of keys) {\n processed[key] = this.structureInterpolate(data[key], variables)\n }\n\n return processed as T\n }\n\n return data\n }\n}\n"],"names":["VariablesFork","string","result","regex","matched","prefix","firstChar","secondChar","keys","variables","entries","variable","str","matches","detectedVariables","TypeGuards","key","value","data","item","processed"],"mappings":"8CAqBO,MAAMA,CAAc,CACzB,OAAe,QAAU,CAAC,gBAAiB,cAAc,EACzD,OAAe,gBAAkB,CAAC,IAAK,IAAK,GAAG,EAEvC,aAAc,CAAC,CAEvB,OAAO,eAAeC,EAAgB,CACpC,MAAMC,EAAS,CAAA,EACf,UAAWC,KAAS,KAAK,QAAS,CAChC,MAAMC,EAAUH,EAAO,MAAME,CAAK,EAE9BC,GACFF,EAAO,KAAK,GAAGE,CAAO,CAE1B,CAEA,OAAOF,CACT,CAEA,OAAO,KAAKD,EAAgBI,EAAwD,CAClF,MAAO,GAAGA,CAAM,IAAIJ,CAAM,GAC5B,CAEA,OAAO,OAAOA,EAAgE,CAC5E,GAAI,EAAEA,EAAO,OAAS,GAAI,OAAOA,EAEjC,MAAMK,EAAYL,EAAO,CAAC,EACpBM,EAAaN,EAAO,CAAC,EAM3B,OAJE,KAAK,gBAAgB,SAASK,CAAkD,GAChFC,IAAe,KACfN,EAAO,SAAS,GAAG,EAGZA,EAAO,MAAM,EAAG,EAAE,EAGpBA,CACT,CAEA,OAAO,mBAAmBO,EAAuBC,EAAkB,CACjE,MAAMC,EAAU,CAAA,EAEhB,UAAWC,KAAYF,EACjBD,GAAM,SAASG,EAAS,GAAG,GAC7BD,EAAQ,KAAKC,CAAQ,EAIzB,OAAOD,CACT,CAEA,OAAO,YAAYT,EAAgBQ,EAAkB,CACnD,IAAIG,EAAMX,EAENY,EAAU,KAAK,eAAeZ,CAAM,EACpCa,EAAoB,KAAK,mBAAmBD,GAAW,CAAA,EAAIJ,CAAS,EAExE,KAAO,CAACM,EAAW,aAAaD,CAAiB,GAC/CA,EAAkB,QAAQ,CAAC,CAAE,IAAAE,EAAK,MAAAC,KAAY,CAC5CL,EAAMA,EAAI,QAAQI,EAAKC,CAAK,CAC9B,CAAC,EAEDJ,EAAU,KAAK,eAAeD,CAAG,EACjCE,EAAoB,KAAK,mBAAmBD,GAAW,CAAA,EAAIC,CAAiB,EAG9E,OAAOF,CACT,CAEA,OAAO,qBAAwBM,EAAST,EAAqB,CAC3D,GAAI,OAAOS,GAAS,SAClB,OAAO,KAAK,YAAYA,EAAMT,CAAS,EAGzC,GAAIM,EAAW,QAAQG,CAAI,EACzB,OAAOA,EAAK,IAAKC,GAAS,KAAK,qBAAqBA,EAAMV,CAAS,CAAC,EAGtE,GAAI,OAAOS,GAAS,UAAYA,IAAS,KAAM,CAC7C,MAAME,EAAY,CAAA,EACZZ,EAAO,OAAO,KAAKU,CAAI,EAE7B,UAAWF,KAAOR,EAChBY,EAAUJ,CAAG,EAAI,KAAK,qBAAqBE,EAAKF,CAAG,EAAGP,CAAS,EAGjE,OAAOW,CACT,CAEA,OAAOF,CACT,CACF"}
@@ -1,2 +1,2 @@
1
- import{jsx as e,jsxs as f}from"react/jsx-runtime";import{useEffect as p}from"react";import{FormProvider as d}from"react-hook-form";import{getCalculatorSchema as n,isFormula as h}from"./model/utils.js";import{localStorageActions as F}from"../../shared/utils/localStorageActions.js";import{evaluateFormula as g}from"./model/helpers.js";import{cn as x}from"../../shared/utils/cn.js";import{CalculatorFields as C}from"./ui/calculatorFields/CalculatorFields.js";import{CalculatorInfo as V}from"./ui/calculatorInfo/CalculatorInfo.js";import{useControlledForm as w}from"../../shared/hooks/useControlledForm.js";import{ZodUtils as b}from"../../shared/validation/utils/zodUtils.js";const N=({calculatorInfoConfig:l,calculatorFieldsConfig:a,classes:o,headline:s})=>{const m=n(a?.fieldsGroup),c=w({schema:m,mode:"onBlur",defaultValues:b.getZodDefaults(m)}),r=c.watch(),{rootValue:t}=l;p(()=>{F.setItem("calculatorData",r)},[r]);const i=h(t)?g(t.formula,r):t,u={...l,rootValue:i};return e(d,{...c,children:f("div",{className:x("flex items-start gap-16 mobile:flex-col mobile:items-center mobile:gap-8",o?.wrapper),children:[e(C,{...a,classes:o?.calculatorFields}),e(V,{...u,headline:s,classes:o?.calculatorInfo})]})})};export{N as CalculatorView};
1
+ import{jsx as t,jsxs as p}from"react/jsx-runtime";import{useEffect as d}from"react";import{FormProvider as n}from"react-hook-form";import{getCalculatorSchema as h}from"./model/utils.js";import{localStorageActions as F}from"../../shared/utils/localStorageActions.js";import{evaluateFormula as g}from"./model/helpers.js";import{cn as x}from"../../shared/utils/cn.js";import{CalculatorFields as C}from"./ui/calculatorFields/CalculatorFields.js";import{CalculatorInfo as V}from"./ui/calculatorInfo/CalculatorInfo.js";import{useControlledForm as w}from"../../shared/hooks/useControlledForm.js";import{ZodUtils as b}from"../../shared/validation/utils/zodUtils.js";const N=({calculatorInfoConfig:e,calculatorFieldsConfig:l,classes:o,headline:s})=>{const a=h(l?.fieldsGroup),m=w({schema:a,mode:"onBlur",defaultValues:b.getZodDefaults(a)}),r=m.watch(),{rootValue:c,isFormula:i}=e;d(()=>{F.setItem("calculatorData",r)},[r]);const u=i?g(c,r):c,f={...e,rootValue:u};return t(n,{...m,children:p("div",{className:x("flex items-start gap-16 mobile:flex-col mobile:items-center mobile:gap-8",o?.wrapper),children:[t(C,{...l,classes:o?.calculatorFields}),t(V,{...f,headline:s,classes:o?.calculatorInfo})]})})};export{N as CalculatorView};
2
2
  //# sourceMappingURL=CalculatorView.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CalculatorView.js","sources":["../../../../lib/widgets/calculator/CalculatorView.tsx"],"sourcesContent":["import { useEffect } from 'react'\nimport { type FieldValues, FormProvider } from 'react-hook-form'\nimport { type CalculatorSchema, evaluateFormula, getCalculatorSchema, isFormula } from './model'\nimport {\n CalculatorFields,\n type CalculatorFieldsClasses,\n type CalculatorFieldsProps,\n CalculatorInfo,\n type CalculatorInfoClasses,\n type CalculatorInfoProps,\n type CalculatorTab\n} from './ui'\nimport { useControlledForm } from '$/shared/hooks'\nimport { cn, localStorageActions } from '$/shared/utils'\nimport { ZodUtils } from '$/shared/validation'\n\nexport type CalculatorViewClasses = {\n wrapper?: string\n calculatorFields?: CalculatorFieldsClasses\n calculatorInfo?: CalculatorInfoClasses\n}\n\nexport interface CalculatorViewProps<T extends FieldValues = FieldValues> extends CalculatorTab {\n calculatorInfoConfig: CalculatorInfoProps\n calculatorFieldsConfig: CalculatorFieldsProps<T>\n classes?: CalculatorViewClasses\n headline?: string\n}\n\nexport const CalculatorView = <T extends FieldValues>({\n calculatorInfoConfig,\n calculatorFieldsConfig,\n classes,\n headline\n}: CalculatorViewProps<T>) => {\n const calculatorSchema: CalculatorSchema = getCalculatorSchema(calculatorFieldsConfig?.fieldsGroup)\n\n const formMethods = useControlledForm({\n schema: calculatorSchema,\n mode: 'onBlur',\n defaultValues: ZodUtils.getZodDefaults(calculatorSchema)\n })\n\n const watchedFields = formMethods.watch()\n\n const { rootValue } = calculatorInfoConfig\n\n useEffect(() => {\n localStorageActions.setItem('calculatorData', watchedFields)\n }, [watchedFields])\n\n const calculatedValue = isFormula(rootValue) ? evaluateFormula(rootValue.formula, watchedFields) : rootValue\n\n const mergedCalcInfoConfig = { ...calculatorInfoConfig, rootValue: calculatedValue }\n\n return (\n <FormProvider {...formMethods}>\n <div className={cn('flex items-start gap-16 mobile:flex-col mobile:items-center mobile:gap-8', classes?.wrapper)}>\n <CalculatorFields {...calculatorFieldsConfig} classes={classes?.calculatorFields} />\n <CalculatorInfo {...mergedCalcInfoConfig} headline={headline} classes={classes?.calculatorInfo} />\n </div>\n </FormProvider>\n )\n}\n"],"names":["CalculatorView","calculatorInfoConfig","calculatorFieldsConfig","classes","headline","calculatorSchema","getCalculatorSchema","formMethods","useControlledForm","ZodUtils","watchedFields","rootValue","useEffect","localStorageActions","calculatedValue","isFormula","evaluateFormula","mergedCalcInfoConfig","jsx","FormProvider","jsxs","cn","CalculatorFields","CalculatorInfo"],"mappings":"iqBA6BO,MAAMA,EAAiB,CAAwB,CACpD,qBAAAC,EACA,uBAAAC,EACA,QAAAC,EACA,SAAAC,CACF,IAA8B,CAC5B,MAAMC,EAAqCC,EAAoBJ,GAAwB,WAAW,EAE5FK,EAAcC,EAAkB,CACpC,OAAQH,EACR,KAAM,SACN,cAAeI,EAAS,eAAeJ,CAAgB,CAAA,CACxD,EAEKK,EAAgBH,EAAY,MAAA,EAE5B,CAAE,UAAAI,GAAcV,EAEtBW,EAAU,IAAM,CACdC,EAAoB,QAAQ,iBAAkBH,CAAa,CAC7D,EAAG,CAACA,CAAa,CAAC,EAElB,MAAMI,EAAkBC,EAAUJ,CAAS,EAAIK,EAAgBL,EAAU,QAASD,CAAa,EAAIC,EAE7FM,EAAuB,CAAE,GAAGhB,EAAsB,UAAWa,CAAA,EAEnE,OACEI,EAACC,EAAA,CAAc,GAAGZ,EAChB,SAAAa,EAAC,MAAA,CAAI,UAAWC,EAAG,2EAA4ElB,GAAS,OAAO,EAC7G,SAAA,CAAAe,EAACI,EAAA,CAAkB,GAAGpB,EAAwB,QAASC,GAAS,iBAAkB,IACjFoB,EAAA,CAAgB,GAAGN,EAAsB,SAAAb,EAAoB,QAASD,GAAS,cAAA,CAAgB,CAAA,CAAA,CAClG,CAAA,CACF,CAEJ"}
1
+ {"version":3,"file":"CalculatorView.js","sources":["../../../../lib/widgets/calculator/CalculatorView.tsx"],"sourcesContent":["import { useEffect } from 'react'\nimport { type FieldValues, FormProvider } from 'react-hook-form'\nimport { type CalculatorSchema, evaluateFormula, getCalculatorSchema } from './model'\nimport {\n CalculatorFields,\n type CalculatorFieldsClasses,\n type CalculatorFieldsProps,\n CalculatorInfo,\n type CalculatorInfoClasses,\n type CalculatorInfoProps,\n type CalculatorTab\n} from './ui'\nimport { useControlledForm } from '$/shared/hooks'\nimport { cn, localStorageActions } from '$/shared/utils'\nimport { ZodUtils } from '$/shared/validation'\n\nexport type CalculatorViewClasses = {\n wrapper?: string\n calculatorFields?: CalculatorFieldsClasses\n calculatorInfo?: CalculatorInfoClasses\n}\n\nexport interface CalculatorViewProps<T extends FieldValues = FieldValues> extends CalculatorTab {\n calculatorInfoConfig: CalculatorInfoProps\n calculatorFieldsConfig: CalculatorFieldsProps<T>\n classes?: CalculatorViewClasses\n headline?: string\n}\n\nexport const CalculatorView = <T extends FieldValues>({\n calculatorInfoConfig,\n calculatorFieldsConfig,\n classes,\n headline\n}: CalculatorViewProps<T>) => {\n const calculatorSchema: CalculatorSchema = getCalculatorSchema(calculatorFieldsConfig?.fieldsGroup)\n\n const formMethods = useControlledForm({\n schema: calculatorSchema,\n mode: 'onBlur',\n defaultValues: ZodUtils.getZodDefaults(calculatorSchema)\n })\n\n const watchedFields = formMethods.watch()\n\n const { rootValue, isFormula } = calculatorInfoConfig\n\n useEffect(() => {\n localStorageActions.setItem('calculatorData', watchedFields)\n }, [watchedFields])\n\n const calculatedValue = isFormula ? evaluateFormula(rootValue, watchedFields) : rootValue\n\n const mergedCalcInfoConfig = { ...calculatorInfoConfig, rootValue: calculatedValue }\n\n return (\n <FormProvider {...formMethods}>\n <div className={cn('flex items-start gap-16 mobile:flex-col mobile:items-center mobile:gap-8', classes?.wrapper)}>\n <CalculatorFields {...calculatorFieldsConfig} classes={classes?.calculatorFields} />\n <CalculatorInfo {...mergedCalcInfoConfig} headline={headline} classes={classes?.calculatorInfo} />\n </div>\n </FormProvider>\n )\n}\n"],"names":["CalculatorView","calculatorInfoConfig","calculatorFieldsConfig","classes","headline","calculatorSchema","getCalculatorSchema","formMethods","useControlledForm","ZodUtils","watchedFields","rootValue","isFormula","useEffect","localStorageActions","calculatedValue","evaluateFormula","mergedCalcInfoConfig","jsx","FormProvider","jsxs","cn","CalculatorFields","CalculatorInfo"],"mappings":"kpBA6BO,MAAMA,EAAiB,CAAwB,CACpD,qBAAAC,EACA,uBAAAC,EACA,QAAAC,EACA,SAAAC,CACF,IAA8B,CAC5B,MAAMC,EAAqCC,EAAoBJ,GAAwB,WAAW,EAE5FK,EAAcC,EAAkB,CACpC,OAAQH,EACR,KAAM,SACN,cAAeI,EAAS,eAAeJ,CAAgB,CAAA,CACxD,EAEKK,EAAgBH,EAAY,MAAA,EAE5B,CAAE,UAAAI,EAAW,UAAAC,CAAA,EAAcX,EAEjCY,EAAU,IAAM,CACdC,EAAoB,QAAQ,iBAAkBJ,CAAa,CAC7D,EAAG,CAACA,CAAa,CAAC,EAElB,MAAMK,EAAkBH,EAAYI,EAAgBL,EAAWD,CAAa,EAAIC,EAE1EM,EAAuB,CAAE,GAAGhB,EAAsB,UAAWc,CAAA,EAEnE,OACEG,EAACC,EAAA,CAAc,GAAGZ,EAChB,SAAAa,EAAC,MAAA,CAAI,UAAWC,EAAG,2EAA4ElB,GAAS,OAAO,EAC7G,SAAA,CAAAe,EAACI,EAAA,CAAkB,GAAGpB,EAAwB,QAASC,GAAS,iBAAkB,IACjFoB,EAAA,CAAgB,GAAGN,EAAsB,SAAAb,EAAoB,QAASD,GAAS,cAAA,CAAgB,CAAA,CAAA,CAClG,CAAA,CACF,CAEJ"}
@@ -1,2 +1,2 @@
1
- import{isFormula as u}from"./utils.js";import{TypeGuards as m}from"../../../shared/utils/typeGuards.js";const c=(a,e)=>(a.match(/[a-zA-Z_$][a-zA-Z0-9_$]*/g)||[]).filter(s=>!(s in e)).length>0?"":a,b=(a,e)=>{const r=Object.entries(e).map(([t,i])=>[t,m.isNil(i)?"1":i]),n=r.map(([t])=>t),s=r.map(([,t])=>t),o=c(a,Object.fromEntries(r)),l=new Function(...n,`return ${o};`)(...s.map(Number));return Number.isNaN(Number(l))?"0":l.toString()},F=(a,e)=>a.map(r=>({...r,value:u(r.value)?b(r.value.formula,e):r.value}));export{b as evaluateFormula,F as formatInfoList};
1
+ import{TypeGuards as u}from"../../../shared/utils/typeGuards.js";const c=(r,e)=>(r.match(/[a-zA-Z_$][a-zA-Z0-9_$]*/g)||[]).filter(t=>!(t in e)).length>0?"":r,m=(r,e)=>{const a=Object.entries(e).map(([s,l])=>[s,u.isNil(l)?"1":l]),n=a.map(([s])=>s),t=a.map(([,s])=>s),o=c(r,Object.fromEntries(a)),i=new Function(...n,`return ${o};`)(...t.map(Number));return Number.isNaN(Number(i))?"0":i.toString()},v=(r,e)=>r.map(a=>({...a,value:a?.isFormula?m(a.value,e):a.value}));export{m as evaluateFormula,v as formatInfoList};
2
2
  //# sourceMappingURL=helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sources":["../../../../../lib/widgets/calculator/model/helpers.ts"],"sourcesContent":["import { TypeGuards } from '../../../shared/utils'\nimport type { InfoListItemDTO, InfoListItemProps } from '../ui'\nimport type { CalculatorVariables } from './types'\nimport { isFormula } from './utils'\n\nconst validateFormula = (formula: string, variables: CalculatorVariables) => {\n const variablesInFormula = formula.match(/[a-zA-Z_$][a-zA-Z0-9_$]*/g) || []\n const missingVariables = variablesInFormula.filter((varName) => !(varName in variables))\n\n if (missingVariables.length > 0) {\n return ''\n // throw new Error(`Отсутствуют переменные для калькулятора: ${missingVariables.join(', ')}`) 12 + 14 / select1\n }\n\n return formula\n}\n\nexport const evaluateFormula = (formula: string, variables: CalculatorVariables): string => {\n const entries = Object.entries(variables).map(([key, value]) => [key, !TypeGuards.isNil(value) ? value : '1'])\n\n const variablesKeys = entries.map(([key]) => key)\n const variablesValues = entries.map(([, value]) => value)\n\n const validatedFormula = validateFormula(formula, Object.fromEntries(entries))\n\n const replaceVariables = new Function(...variablesKeys, `return ${validatedFormula};`)\n\n const replaceResult: number = replaceVariables(...variablesValues.map(Number))\n\n if (Number.isNaN(Number(replaceResult))) {\n return '0'\n }\n\n return replaceResult.toString()\n}\n\nexport const formatInfoList = (list: InfoListItemDTO[], variables: CalculatorVariables): InfoListItemProps[] => {\n return list.map((item) => {\n return {\n ...item,\n value: isFormula(item.value) ? evaluateFormula(item.value.formula, variables) : item.value\n }\n })\n}\n"],"names":["validateFormula","formula","variables","varName","evaluateFormula","entries","key","value","TypeGuards","variablesKeys","variablesValues","validatedFormula","replaceResult","formatInfoList","list","item","isFormula"],"mappings":"wGAKA,MAAMA,EAAkB,CAACC,EAAiBC,KACbD,EAAQ,MAAM,2BAA2B,GAAK,CAAA,GAC7B,OAAQE,GAAY,EAAEA,KAAWD,EAAU,EAElE,OAAS,EACrB,GAIFD,EAGIG,EAAkB,CAACH,EAAiBC,IAA2C,CAC1F,MAAMG,EAAU,OAAO,QAAQH,CAAS,EAAE,IAAI,CAAC,CAACI,EAAKC,CAAK,IAAM,CAACD,EAAME,EAAW,MAAMD,CAAK,EAAY,IAARA,CAAW,CAAC,EAEvGE,EAAgBJ,EAAQ,IAAI,CAAC,CAACC,CAAG,IAAMA,CAAG,EAC1CI,EAAkBL,EAAQ,IAAI,CAAC,CAAA,CAAGE,CAAK,IAAMA,CAAK,EAElDI,EAAmBX,EAAgBC,EAAS,OAAO,YAAYI,CAAO,CAAC,EAIvEO,EAFmB,IAAI,SAAS,GAAGH,EAAe,UAAUE,CAAgB,GAAG,EAEtC,GAAGD,EAAgB,IAAI,MAAM,CAAC,EAE7E,OAAI,OAAO,MAAM,OAAOE,CAAa,CAAC,EAC7B,IAGFA,EAAc,SAAA,CACvB,EAEaC,EAAiB,CAACC,EAAyBZ,IAC/CY,EAAK,IAAKC,IACR,CACL,GAAGA,EACH,MAAOC,EAAUD,EAAK,KAAK,EAAIX,EAAgBW,EAAK,MAAM,QAASb,CAAS,EAAIa,EAAK,KAAA,EAExF"}
1
+ {"version":3,"file":"helpers.js","sources":["../../../../../lib/widgets/calculator/model/helpers.ts"],"sourcesContent":["import type { InfoListItemProps } from '../ui'\nimport type { CalculatorVariables } from './types'\nimport { TypeGuards } from '$/shared/utils'\n\nconst validateFormula = (formula: string, variables: CalculatorVariables) => {\n const variablesInFormula = formula.match(/[a-zA-Z_$][a-zA-Z0-9_$]*/g) || []\n const missingVariables = variablesInFormula.filter((varName) => !(varName in variables))\n\n if (missingVariables.length > 0) {\n return ''\n // throw new Error(`Отсутствуют переменные для калькулятора: ${missingVariables.join(', ')}`) 12 + 14 / select1\n }\n\n return formula\n}\n\nexport const evaluateFormula = (formula: string, variables: CalculatorVariables): string => {\n const entries = Object.entries(variables).map(([key, value]) => [key, !TypeGuards.isNil(value) ? value : '1'])\n\n const variablesKeys = entries.map(([key]) => key)\n const variablesValues = entries.map(([, value]) => value)\n\n const validatedFormula = validateFormula(formula, Object.fromEntries(entries))\n const replaceVariables = new Function(...variablesKeys, `return ${validatedFormula};`)\n\n const replaceResult: number = replaceVariables(...variablesValues.map(Number))\n\n if (Number.isNaN(Number(replaceResult))) {\n return '0'\n }\n\n return replaceResult.toString()\n}\n\nexport const formatInfoList = (list: InfoListItemProps[], variables: CalculatorVariables): InfoListItemProps[] => {\n return list.map((item) => {\n return {\n ...item,\n value: item?.isFormula ? evaluateFormula(item.value, variables) : item.value\n }\n })\n}\n"],"names":["validateFormula","formula","variables","varName","evaluateFormula","entries","key","value","TypeGuards","variablesKeys","variablesValues","validatedFormula","replaceResult","formatInfoList","list","item"],"mappings":"iEAIA,MAAMA,EAAkB,CAACC,EAAiBC,KACbD,EAAQ,MAAM,2BAA2B,GAAK,CAAA,GAC7B,OAAQE,GAAY,EAAEA,KAAWD,EAAU,EAElE,OAAS,EACrB,GAIFD,EAGIG,EAAkB,CAACH,EAAiBC,IAA2C,CAC1F,MAAMG,EAAU,OAAO,QAAQH,CAAS,EAAE,IAAI,CAAC,CAACI,EAAKC,CAAK,IAAM,CAACD,EAAME,EAAW,MAAMD,CAAK,EAAY,IAARA,CAAW,CAAC,EAEvGE,EAAgBJ,EAAQ,IAAI,CAAC,CAACC,CAAG,IAAMA,CAAG,EAC1CI,EAAkBL,EAAQ,IAAI,CAAC,CAAA,CAAGE,CAAK,IAAMA,CAAK,EAElDI,EAAmBX,EAAgBC,EAAS,OAAO,YAAYI,CAAO,CAAC,EAGvEO,EAFmB,IAAI,SAAS,GAAGH,EAAe,UAAUE,CAAgB,GAAG,EAEtC,GAAGD,EAAgB,IAAI,MAAM,CAAC,EAE7E,OAAI,OAAO,MAAM,OAAOE,CAAa,CAAC,EAC7B,IAGFA,EAAc,SAAA,CACvB,EAEaC,EAAiB,CAACC,EAA2BZ,IACjDY,EAAK,IAAKC,IACR,CACL,GAAGA,EACH,MAAOA,GAAM,UAAYX,EAAgBW,EAAK,MAAOb,CAAS,EAAIa,EAAK,KAAA,EAE1E"}
@@ -1,2 +1,2 @@
1
- import{evaluateFormula as a,formatInfoList as r}from"./helpers.js";import{formatValueToRenderInfoItem as m,formatWithIntl as f,getCalculatorSchema as l,isFormula as u}from"./utils.js";export{a as evaluateFormula,r as formatInfoList,m as formatValueToRenderInfoItem,f as formatWithIntl,l as getCalculatorSchema,u as isFormula};
1
+ import{evaluateFormula as a,formatInfoList as e}from"./helpers.js";import{formatValueToRenderInfoItem as m,formatWithIntl as f,getCalculatorSchema as l}from"./utils.js";export{a as evaluateFormula,e as formatInfoList,m as formatValueToRenderInfoItem,f as formatWithIntl,l as getCalculatorSchema};
2
2
  //# sourceMappingURL=index.js.map
@@ -1,2 +1,2 @@
1
- import{z as n}from"zod";import{getDynamicSchema as m}from"../../../../src/shared/utils/getDynamicSchema.js";const s=t=>typeof t!="string"&&"formula"in t,c=(t,e)=>{let o=e;const r={style:t};switch(t){case"currency":r.currency="RUB",r.minimumFractionDigits=0,r.maximumFractionDigits=0;break;case"percent":r.minimumFractionDigits=0,r.maximumFractionDigits=1,o=o/100;break;default:return null}return new Intl.NumberFormat("ru-RU",r).format(o)},l=(t,e)=>{switch(t){case"text":return e;default:return c(t,Number(e))}},f=t=>Object.values(t).reduce((o,r)=>o.merge(m(r.fields)),n.object({}));export{l as formatValueToRenderInfoItem,c as formatWithIntl,f as getCalculatorSchema,s as isFormula};
1
+ import{z as m}from"zod";import{getDynamicSchema as o}from"../../../../src/shared/utils/getDynamicSchema.js";const a=(r,e)=>{let c=e;const t={style:r};switch(r){case"currency":t.currency="RUB",t.minimumFractionDigits=0,t.maximumFractionDigits=0;break;case"percent":t.minimumFractionDigits=0,t.maximumFractionDigits=1,c=c/100;break;default:return null}return new Intl.NumberFormat("ru-RU",t).format(c)},s=(r,e)=>{switch(r){case"text":return e;default:return a(r,Number(e))}},l=r=>Object.values(r).reduce((c,t)=>c.merge(o(t.fields)),m.object({}));export{s as formatValueToRenderInfoItem,a as formatWithIntl,l as getCalculatorSchema};
2
2
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../../../../lib/widgets/calculator/model/utils.ts"],"sourcesContent":["import type { FieldValues } from 'react-hook-form'\nimport { z } from 'zod'\nimport { getDynamicSchema } from '@/shared/utils'\nimport { type CalculatorViewProps } from '$/widgets'\nimport { type CalculatorSuffix, type ValueWithFormula } from '$/widgets/calculator/model/types'\nimport { type InfoListItemMode } from '$/widgets/calculator/ui'\n\nexport const isFormula = (value: ValueWithFormula | string): value is ValueWithFormula => {\n return typeof value !== 'string' && 'formula' in value\n}\n\nexport const formatWithIntl = (suffix: CalculatorSuffix, value: number) => {\n let calculationValue = value\n\n const options: Intl.NumberFormatOptions = {\n style: suffix\n }\n\n switch (suffix) {\n case 'currency':\n options.currency = 'RUB'\n options.minimumFractionDigits = 0\n options.maximumFractionDigits = 0\n break\n\n case 'percent':\n options.minimumFractionDigits = 0\n options.maximumFractionDigits = 1\n calculationValue = calculationValue / 100\n break\n default:\n return null\n }\n\n const formatter = new Intl.NumberFormat('ru-RU', options)\n return formatter.format(calculationValue)\n}\n\nexport const formatValueToRenderInfoItem = (renderMode: InfoListItemMode, value: string) => {\n switch (renderMode) {\n case 'text':\n return value\n default:\n return formatWithIntl(renderMode, Number(value))\n }\n}\n\nexport const getCalculatorSchema = <T extends FieldValues>(\n props: CalculatorViewProps<T>['calculatorFieldsConfig']['fieldsGroup']\n) => {\n const groups = Object.values(props)\n\n return groups.reduce<z.ZodObject<any>>((acc, item) => acc.merge(getDynamicSchema(item.fields)), z.object({}))\n}\n"],"names":["isFormula","value","formatWithIntl","suffix","calculationValue","options","formatValueToRenderInfoItem","renderMode","getCalculatorSchema","props","acc","item","getDynamicSchema","z"],"mappings":"4GAOO,MAAMA,EAAaC,GACjB,OAAOA,GAAU,UAAY,YAAaA,EAGtCC,EAAiB,CAACC,EAA0BF,IAAkB,CACzE,IAAIG,EAAmBH,EAEvB,MAAMI,EAAoC,CACxC,MAAOF,CAAA,EAGT,OAAQA,EAAA,CACN,IAAK,WACHE,EAAQ,SAAW,MACnBA,EAAQ,sBAAwB,EAChCA,EAAQ,sBAAwB,EAChC,MAEF,IAAK,UACHA,EAAQ,sBAAwB,EAChCA,EAAQ,sBAAwB,EAChCD,EAAmBA,EAAmB,IACtC,MACF,QACE,OAAO,IAAA,CAIX,OADkB,IAAI,KAAK,aAAa,QAASC,CAAO,EACvC,OAAOD,CAAgB,CAC1C,EAEaE,EAA8B,CAACC,EAA8BN,IAAkB,CAC1F,OAAQM,EAAA,CACN,IAAK,OACH,OAAON,EACT,QACE,OAAOC,EAAeK,EAAY,OAAON,CAAK,CAAC,CAAA,CAErD,EAEaO,EACXC,GAEe,OAAO,OAAOA,CAAK,EAEpB,OAAyB,CAACC,EAAKC,IAASD,EAAI,MAAME,EAAiBD,EAAK,MAAM,CAAC,EAAGE,EAAE,OAAO,CAAA,CAAE,CAAC"}
1
+ {"version":3,"file":"utils.js","sources":["../../../../../lib/widgets/calculator/model/utils.ts"],"sourcesContent":["import type { FieldValues } from 'react-hook-form'\nimport { z } from 'zod'\nimport { getDynamicSchema } from '@/shared/utils'\nimport { type CalculatorViewProps } from '$/widgets'\nimport { type CalculatorSuffix } from '$/widgets/calculator/model/types'\nimport { type InfoListItemMode } from '$/widgets/calculator/ui'\n\nexport const formatWithIntl = (suffix: CalculatorSuffix, value: number) => {\n let calculationValue = value\n\n const options: Intl.NumberFormatOptions = {\n style: suffix\n }\n\n switch (suffix) {\n case 'currency':\n options.currency = 'RUB'\n options.minimumFractionDigits = 0\n options.maximumFractionDigits = 0\n break\n\n case 'percent':\n options.minimumFractionDigits = 0\n options.maximumFractionDigits = 1\n calculationValue = calculationValue / 100\n break\n default:\n return null\n }\n\n const formatter = new Intl.NumberFormat('ru-RU', options)\n return formatter.format(calculationValue)\n}\n\nexport const formatValueToRenderInfoItem = (renderMode: InfoListItemMode, value: string) => {\n switch (renderMode) {\n case 'text':\n return value\n default:\n return formatWithIntl(renderMode, Number(value))\n }\n}\n\nexport const getCalculatorSchema = <T extends FieldValues>(\n props: CalculatorViewProps<T>['calculatorFieldsConfig']['fieldsGroup']\n) => {\n const groups = Object.values(props)\n\n return groups.reduce<z.ZodObject<any>>((acc, item) => acc.merge(getDynamicSchema(item.fields)), z.object({}))\n}\n"],"names":["formatWithIntl","suffix","value","calculationValue","options","formatValueToRenderInfoItem","renderMode","getCalculatorSchema","props","acc","item","getDynamicSchema","z"],"mappings":"4GAOO,MAAMA,EAAiB,CAACC,EAA0BC,IAAkB,CACzE,IAAIC,EAAmBD,EAEvB,MAAME,EAAoC,CACxC,MAAOH,CAAA,EAGT,OAAQA,EAAA,CACN,IAAK,WACHG,EAAQ,SAAW,MACnBA,EAAQ,sBAAwB,EAChCA,EAAQ,sBAAwB,EAChC,MAEF,IAAK,UACHA,EAAQ,sBAAwB,EAChCA,EAAQ,sBAAwB,EAChCD,EAAmBA,EAAmB,IACtC,MACF,QACE,OAAO,IAAA,CAIX,OADkB,IAAI,KAAK,aAAa,QAASC,CAAO,EACvC,OAAOD,CAAgB,CAC1C,EAEaE,EAA8B,CAACC,EAA8BJ,IAAkB,CAC1F,OAAQI,EAAA,CACN,IAAK,OACH,OAAOJ,EACT,QACE,OAAOF,EAAeM,EAAY,OAAOJ,CAAK,CAAC,CAAA,CAErD,EAEaK,EACXC,GAEe,OAAO,OAAOA,CAAK,EAEpB,OAAyB,CAACC,EAAKC,IAASD,EAAI,MAAME,EAAiBD,EAAK,MAAM,CAAC,EAAGE,EAAE,OAAO,CAAA,CAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"CalculatorFields.js","sources":["../../../../../../lib/widgets/calculator/ui/calculatorFields/CalculatorFields.tsx"],"sourcesContent":["import { type FieldValues } from 'react-hook-form'\nimport { useAdditionalSlider } from './hooks'\nimport {\n AdditionalSlider,\n type AdditionalSliderGroupConfig,\n CalculatorModal,\n type CalculatorModalClasses,\n type CalculatorModalProps,\n type CheckboxGroupProps,\n type RadioGroupProps,\n type SelectGroupProps,\n SliderFieldsGroup,\n type SlidersGroupProps,\n type SwitchGroupProps\n} from './ui'\nimport { FieldsGroup } from './ui'\nimport { cn, TypeGuards } from '$/shared/utils'\n\nexport type CalculatorFieldsClasses = {\n rootFieldsWrapper?: string\n selectFieldsWrapper?: string\n checkboxFieldsWrapper?: string\n switchFieldsWrapper?: string\n modalClasses?: CalculatorModalClasses\n}\n\nexport interface CalculatorFieldsProps<T extends FieldValues> {\n classes?: CalculatorFieldsClasses\n modalConfig?: CalculatorModalProps\n fieldsGroup: {\n selectGroupConfig?: SelectGroupProps<T>\n slidersGroupConfig?: SlidersGroupProps<T>\n radioGroupTabConfig?: RadioGroupProps<T>\n checkboxGroupConfig?: CheckboxGroupProps<T>\n radioGroupConfig?: RadioGroupProps<T>\n radioGroupCardConfig?: RadioGroupProps<T>\n switchGroupConfig?: SwitchGroupProps<T>\n additionalSliderGroupConfig?: AdditionalSliderGroupConfig<T> & { fields: any[] }\n }\n}\n\n//TODO: Переписать лаконично убрать дубляж\n// type BaseFieldsGroup<Fields> = {\n// fields: Fields\n// }\n// const hasFields = <T extends BaseFieldsGroup<T>>(groupConfig: T) => groupConfig && !TypeGuards.isArrayEmpty(groupConfig?.fields)\n\nexport const CalculatorFields = <T extends FieldValues>({ modalConfig, fieldsGroup, classes }: CalculatorFieldsProps<T>) => {\n const { sliderSumExist, sliderSumCorrectType } = useAdditionalSlider({\n slidersGroupConfig: fieldsGroup.slidersGroupConfig,\n additionalSliderGroupConfig: fieldsGroup.additionalSliderGroupConfig\n })\n\n return (\n <div className={cn('flex flex-1 flex-col gap-6 mobile:w-full desktop:gap-8', classes?.rootFieldsWrapper)}>\n {modalConfig?.triggerText && modalConfig?.contentVariant && (\n <CalculatorModal classes={classes?.modalClasses} {...modalConfig} />\n )}\n {fieldsGroup?.selectGroupConfig && !TypeGuards.isArrayEmpty(fieldsGroup?.selectGroupConfig?.fields) && (\n <div className={cn('flex flex-col gap-4', classes?.selectFieldsWrapper)}>\n <FieldsGroup {...fieldsGroup?.selectGroupConfig} />\n </div>\n )}\n {fieldsGroup?.slidersGroupConfig && !TypeGuards.isArrayEmpty(fieldsGroup?.slidersGroupConfig?.fields) && (\n <SliderFieldsGroup {...fieldsGroup?.slidersGroupConfig} />\n )}\n {fieldsGroup?.radioGroupTabConfig && !TypeGuards.isArrayEmpty(fieldsGroup?.radioGroupTabConfig?.fields) && (\n <FieldsGroup {...fieldsGroup?.radioGroupTabConfig} />\n )}\n {fieldsGroup?.checkboxGroupConfig && !TypeGuards.isArrayEmpty(fieldsGroup?.checkboxGroupConfig?.fields) && (\n <div className={cn('flex flex-col gap-4', classes?.checkboxFieldsWrapper)}>\n <FieldsGroup {...fieldsGroup?.checkboxGroupConfig} />\n </div>\n )}\n {fieldsGroup?.radioGroupConfig && !TypeGuards.isArrayEmpty(fieldsGroup?.radioGroupConfig?.fields) && (\n <FieldsGroup {...fieldsGroup?.radioGroupConfig} />\n )}\n {fieldsGroup?.radioGroupCardConfig && !TypeGuards.isArrayEmpty(fieldsGroup?.radioGroupCardConfig?.fields) && (\n <FieldsGroup {...fieldsGroup?.radioGroupCardConfig} />\n )}\n {fieldsGroup?.switchGroupConfig && !TypeGuards.isArrayEmpty(fieldsGroup?.switchGroupConfig?.fields) && (\n <div className={cn('flex flex-col gap-4', classes?.switchFieldsWrapper)}>\n <FieldsGroup {...fieldsGroup?.switchGroupConfig} />\n </div>\n )}\n {fieldsGroup.additionalSliderGroupConfig?.args.enabled &&\n fieldsGroup.slidersGroupConfig &&\n fieldsGroup.additionalSliderGroupConfig &&\n sliderSumExist &&\n sliderSumCorrectType && (\n <AdditionalSlider\n slidersGroupConfig={fieldsGroup.slidersGroupConfig}\n additionalSliderGroupConfig={fieldsGroup.additionalSliderGroupConfig}\n />\n )}\n </div>\n )\n}\n"],"names":["CalculatorFields","modalConfig","fieldsGroup","classes","sliderSumExist","sliderSumCorrectType","useAdditionalSlider","cn","jsx","CalculatorModal","TypeGuards","FieldsGroup","SliderFieldsGroup","AdditionalSlider"],"mappings":"qdA+CO,MAAMA,EAAmB,CAAwB,CAAE,YAAAC,EAAa,YAAAC,EAAa,QAAAC,KAAwC,CAC1H,KAAM,CAAE,eAAAC,EAAgB,qBAAAC,CAAA,EAAyBC,EAAoB,CACnE,mBAAoBJ,EAAY,mBAChC,4BAA6BA,EAAY,2BAAA,CAC1C,EAED,SACG,MAAA,CAAI,UAAWK,EAAG,yDAA0DJ,GAAS,iBAAiB,EACpG,SAAA,CAAAF,GAAa,aAAeA,GAAa,gBACxCO,EAACC,GAAgB,QAASN,GAAS,aAAe,GAAGF,CAAA,CAAa,EAEnEC,GAAa,mBAAqB,CAACQ,EAAW,aAAaR,GAAa,mBAAmB,MAAM,GAChGM,EAAC,MAAA,CAAI,UAAWD,EAAG,sBAAuBJ,GAAS,mBAAmB,EACpE,WAACQ,EAAA,CAAa,GAAGT,GAAa,iBAAA,CAAmB,CAAA,CACnD,EAEDA,GAAa,oBAAsB,CAACQ,EAAW,aAAaR,GAAa,oBAAoB,MAAM,GAClGM,EAACI,EAAA,CAAmB,GAAGV,GAAa,kBAAA,CAAoB,EAEzDA,GAAa,qBAAuB,CAACQ,EAAW,aAAaR,GAAa,qBAAqB,MAAM,GACpGM,EAACG,EAAA,CAAa,GAAGT,GAAa,mBAAA,CAAqB,EAEpDA,GAAa,qBAAuB,CAACQ,EAAW,aAAaR,GAAa,qBAAqB,MAAM,GACpGM,EAAC,MAAA,CAAI,UAAWD,EAAG,sBAAuBJ,GAAS,qBAAqB,EACtE,WAACQ,EAAA,CAAa,GAAGT,GAAa,mBAAA,CAAqB,CAAA,CACrD,EAEDA,GAAa,kBAAoB,CAACQ,EAAW,aAAaR,GAAa,kBAAkB,MAAM,GAC9FM,EAACG,EAAA,CAAa,GAAGT,GAAa,gBAAA,CAAkB,EAEjDA,GAAa,sBAAwB,CAACQ,EAAW,aAAaR,GAAa,sBAAsB,MAAM,GACtGM,EAACG,EAAA,CAAa,GAAGT,GAAa,oBAAA,CAAsB,EAErDA,GAAa,mBAAqB,CAACQ,EAAW,aAAaR,GAAa,mBAAmB,MAAM,GAChGM,EAAC,MAAA,CAAI,UAAWD,EAAG,sBAAuBJ,GAAS,mBAAmB,EACpE,WAACQ,EAAA,CAAa,GAAGT,GAAa,iBAAA,CAAmB,CAAA,CACnD,EAEDA,EAAY,6BAA6B,KAAK,SAC7CA,EAAY,oBACZA,EAAY,6BACZE,GACAC,GACEG,EAACK,EAAA,CACC,mBAAoBX,EAAY,mBAChC,4BAA6BA,EAAY,2BAAA,CAAA,CAC3C,EAEN,CAEJ"}
1
+ {"version":3,"file":"CalculatorFields.js","sources":["../../../../../../lib/widgets/calculator/ui/calculatorFields/CalculatorFields.tsx"],"sourcesContent":["import { type FieldValues } from 'react-hook-form'\nimport { useAdditionalSlider } from './hooks'\nimport {\n AdditionalSlider,\n type AdditionalSliderGroupConfig,\n CalculatorModal,\n type CalculatorModalClasses,\n type CalculatorModalProps,\n type CheckboxGroupProps,\n type RadioGroupProps,\n type SelectGroupProps,\n SliderFieldsGroup,\n type SlidersGroupProps,\n type SwitchGroupProps\n} from './ui'\nimport { FieldsGroup } from './ui'\nimport { cn, TypeGuards } from '$/shared/utils'\n\nexport type CalculatorFieldsClasses = {\n rootFieldsWrapper?: string\n selectFieldsWrapper?: string\n checkboxFieldsWrapper?: string\n switchFieldsWrapper?: string\n modalClasses?: CalculatorModalClasses\n}\n\nexport interface CalculatorFieldsProps<T extends FieldValues> {\n classes?: CalculatorFieldsClasses\n modalConfig?: CalculatorModalProps\n fieldsGroup: {\n selectGroupConfig?: SelectGroupProps<T>\n slidersGroupConfig?: SlidersGroupProps<T>\n radioGroupTabConfig?: RadioGroupProps<T>\n checkboxGroupConfig?: CheckboxGroupProps<T>\n radioGroupConfig?: RadioGroupProps<T>\n radioGroupCardConfig?: RadioGroupProps<T>\n switchGroupConfig?: SwitchGroupProps<T>\n additionalSliderGroupConfig?: AdditionalSliderGroupConfig<T> & { fields: any[] }\n }\n}\n\nexport const CalculatorFields = <T extends FieldValues>({ modalConfig, fieldsGroup, classes }: CalculatorFieldsProps<T>) => {\n const { sliderSumExist, sliderSumCorrectType } = useAdditionalSlider({\n slidersGroupConfig: fieldsGroup.slidersGroupConfig,\n additionalSliderGroupConfig: fieldsGroup.additionalSliderGroupConfig\n })\n\n return (\n <div className={cn('flex flex-1 flex-col gap-6 mobile:w-full desktop:gap-8', classes?.rootFieldsWrapper)}>\n {modalConfig?.triggerText && modalConfig?.contentVariant && (\n <CalculatorModal classes={classes?.modalClasses} {...modalConfig} />\n )}\n {fieldsGroup?.selectGroupConfig && !TypeGuards.isArrayEmpty(fieldsGroup?.selectGroupConfig?.fields) && (\n <div className={cn('flex flex-col gap-4', classes?.selectFieldsWrapper)}>\n <FieldsGroup {...fieldsGroup?.selectGroupConfig} />\n </div>\n )}\n {fieldsGroup?.slidersGroupConfig && !TypeGuards.isArrayEmpty(fieldsGroup?.slidersGroupConfig?.fields) && (\n <SliderFieldsGroup {...fieldsGroup?.slidersGroupConfig} />\n )}\n {fieldsGroup?.radioGroupTabConfig && !TypeGuards.isArrayEmpty(fieldsGroup?.radioGroupTabConfig?.fields) && (\n <FieldsGroup {...fieldsGroup?.radioGroupTabConfig} />\n )}\n {fieldsGroup?.checkboxGroupConfig && !TypeGuards.isArrayEmpty(fieldsGroup?.checkboxGroupConfig?.fields) && (\n <div className={cn('flex flex-col gap-4', classes?.checkboxFieldsWrapper)}>\n <FieldsGroup {...fieldsGroup?.checkboxGroupConfig} />\n </div>\n )}\n {fieldsGroup?.radioGroupConfig && !TypeGuards.isArrayEmpty(fieldsGroup?.radioGroupConfig?.fields) && (\n <FieldsGroup {...fieldsGroup?.radioGroupConfig} />\n )}\n {fieldsGroup?.radioGroupCardConfig && !TypeGuards.isArrayEmpty(fieldsGroup?.radioGroupCardConfig?.fields) && (\n <FieldsGroup {...fieldsGroup?.radioGroupCardConfig} />\n )}\n {fieldsGroup?.switchGroupConfig && !TypeGuards.isArrayEmpty(fieldsGroup?.switchGroupConfig?.fields) && (\n <div className={cn('flex flex-col gap-4', classes?.switchFieldsWrapper)}>\n <FieldsGroup {...fieldsGroup?.switchGroupConfig} />\n </div>\n )}\n {fieldsGroup.additionalSliderGroupConfig?.args.enabled &&\n fieldsGroup.slidersGroupConfig &&\n fieldsGroup.additionalSliderGroupConfig &&\n sliderSumExist &&\n sliderSumCorrectType && (\n <AdditionalSlider\n slidersGroupConfig={fieldsGroup.slidersGroupConfig}\n additionalSliderGroupConfig={fieldsGroup.additionalSliderGroupConfig}\n />\n )}\n </div>\n )\n}\n"],"names":["CalculatorFields","modalConfig","fieldsGroup","classes","sliderSumExist","sliderSumCorrectType","useAdditionalSlider","cn","jsx","CalculatorModal","TypeGuards","FieldsGroup","SliderFieldsGroup","AdditionalSlider"],"mappings":"qdAyCO,MAAMA,EAAmB,CAAwB,CAAE,YAAAC,EAAa,YAAAC,EAAa,QAAAC,KAAwC,CAC1H,KAAM,CAAE,eAAAC,EAAgB,qBAAAC,CAAA,EAAyBC,EAAoB,CACnE,mBAAoBJ,EAAY,mBAChC,4BAA6BA,EAAY,2BAAA,CAC1C,EAED,SACG,MAAA,CAAI,UAAWK,EAAG,yDAA0DJ,GAAS,iBAAiB,EACpG,SAAA,CAAAF,GAAa,aAAeA,GAAa,gBACxCO,EAACC,GAAgB,QAASN,GAAS,aAAe,GAAGF,CAAA,CAAa,EAEnEC,GAAa,mBAAqB,CAACQ,EAAW,aAAaR,GAAa,mBAAmB,MAAM,GAChGM,EAAC,MAAA,CAAI,UAAWD,EAAG,sBAAuBJ,GAAS,mBAAmB,EACpE,WAACQ,EAAA,CAAa,GAAGT,GAAa,iBAAA,CAAmB,CAAA,CACnD,EAEDA,GAAa,oBAAsB,CAACQ,EAAW,aAAaR,GAAa,oBAAoB,MAAM,GAClGM,EAACI,EAAA,CAAmB,GAAGV,GAAa,kBAAA,CAAoB,EAEzDA,GAAa,qBAAuB,CAACQ,EAAW,aAAaR,GAAa,qBAAqB,MAAM,GACpGM,EAACG,EAAA,CAAa,GAAGT,GAAa,mBAAA,CAAqB,EAEpDA,GAAa,qBAAuB,CAACQ,EAAW,aAAaR,GAAa,qBAAqB,MAAM,GACpGM,EAAC,MAAA,CAAI,UAAWD,EAAG,sBAAuBJ,GAAS,qBAAqB,EACtE,WAACQ,EAAA,CAAa,GAAGT,GAAa,mBAAA,CAAqB,CAAA,CACrD,EAEDA,GAAa,kBAAoB,CAACQ,EAAW,aAAaR,GAAa,kBAAkB,MAAM,GAC9FM,EAACG,EAAA,CAAa,GAAGT,GAAa,gBAAA,CAAkB,EAEjDA,GAAa,sBAAwB,CAACQ,EAAW,aAAaR,GAAa,sBAAsB,MAAM,GACtGM,EAACG,EAAA,CAAa,GAAGT,GAAa,oBAAA,CAAsB,EAErDA,GAAa,mBAAqB,CAACQ,EAAW,aAAaR,GAAa,mBAAmB,MAAM,GAChGM,EAAC,MAAA,CAAI,UAAWD,EAAG,sBAAuBJ,GAAS,mBAAmB,EACpE,WAACQ,EAAA,CAAa,GAAGT,GAAa,iBAAA,CAAmB,CAAA,CACnD,EAEDA,EAAY,6BAA6B,KAAK,SAC7CA,EAAY,oBACZA,EAAY,6BACZE,GACAC,GACEG,EAACK,EAAA,CACC,mBAAoBX,EAAY,mBAChC,4BAA6BA,EAAY,2BAAA,CAAA,CAC3C,EAEN,CAEJ"}
@@ -1,2 +1,2 @@
1
- import{jsxs as n,jsx as l}from"react/jsx-runtime";import{cn as i}from"../../../../shared/utils/cn.js";import{CalculatedBlock as I}from"./ui/CalculatedBlock.js";import{CalculatorInfoHead as x}from"./ui/CalculatorInfoHead.js";import{CalculatorInfoBody as B}from"./ui/CalculatorInfoBody.js";import{CalculatorInfoFooter as C}from"./ui/CalculatorInfoFooter.js";const k=({rootDescription:c,bottomDescription:e,rootValue:t,title:m,subtitle:u,buttonsConfig:d,infoList:r,suffix:f,assistHint:a,headline:p,classes:o})=>n("div",{className:i("w-full max-w-[456px] rounded-md bg-color-blue-grey-100 p-8 mobile:px-4 mobile:py-8",o?.wrapper),children:[l(I,{suffix:f,rootValue:t,rootDescription:c,classes:o?.calculatedBlock}),l(x,{title:m,subtitle:u,classes:o?.calculatedInfoHead}),l(B,{withoutDivider:r.length>0||!!a,infoList:r,classes:o?.calculatorInfoBody}),l(C,{assistHint:a,headline:p,buttonsConfig:d,bottomDescription:e,classes:o?.calculatorInfoFooter})]});export{k as CalculatorInfo};
1
+ import{jsxs as i,jsx as l}from"react/jsx-runtime";import{cn as I}from"../../../../shared/utils/cn.js";import{CalculatedBlock as x}from"./ui/CalculatedBlock.js";import{CalculatorInfoHead as B}from"./ui/CalculatorInfoHead.js";import{CalculatorInfoBody as C}from"./ui/CalculatorInfoBody.js";import{CalculatorInfoFooter as b}from"./ui/CalculatorInfoFooter.js";const s=({rootDescription:c,bottomDescription:e,rootValue:t,title:m,subtitle:u,buttonsConfig:d,infoList:r,suffix:f,assistHint:a,headline:p,isFormula:n,classes:o})=>i("div",{className:I("w-full max-w-[456px] rounded-md bg-color-blue-grey-100 p-8 mobile:px-4 mobile:py-8",o?.wrapper),children:[l(x,{isFormula:n,suffix:f,rootValue:t,rootDescription:c,classes:o?.calculatedBlock}),l(B,{title:m,subtitle:u,classes:o?.calculatedInfoHead}),l(C,{withoutDivider:r.length>0||!!a,infoList:r,classes:o?.calculatorInfoBody}),l(b,{assistHint:a,headline:p,buttonsConfig:d,bottomDescription:e,classes:o?.calculatorInfoFooter})]});export{s as CalculatorInfo};
2
2
  //# sourceMappingURL=CalculatorInfo.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CalculatorInfo.js","sources":["../../../../../../lib/widgets/calculator/ui/calculatorInfo/CalculatorInfo.tsx"],"sourcesContent":["import {\n CalculatedBlock,\n type CalculatedBlockClasses,\n type CalculatedBlockProps,\n type CalculatedInfoBodyProps,\n CalculatorInfoBody,\n type CalculatorInfoBodyClasses,\n CalculatorInfoFooter,\n type CalculatorInfoFooterClasses,\n type CalculatorInfoFooterProps,\n CalculatorInfoHead,\n type CalculatorInfoHeadClasses,\n type CalculatorInfoHeadProps\n} from './ui'\nimport { cn } from '$/shared/utils'\n\nexport type CalculatorInfoClasses = {\n wrapper?: string\n calculatedBlock?: CalculatedBlockClasses\n calculatedInfoHead?: CalculatorInfoHeadClasses\n calculatorInfoBody?: CalculatorInfoBodyClasses\n calculatorInfoFooter?: CalculatorInfoFooterClasses\n}\n\nexport interface CalculatorInfoProps\n extends Omit<CalculatedBlockProps, 'classes'>,\n Omit<CalculatorInfoHeadProps, 'classes'>,\n Omit<CalculatedInfoBodyProps, 'classes'>,\n Omit<CalculatorInfoFooterProps, 'classes'> {\n classes?: CalculatorInfoClasses\n headline?: string\n}\n\nexport const CalculatorInfo = ({\n rootDescription,\n bottomDescription,\n rootValue,\n title,\n subtitle,\n buttonsConfig,\n infoList,\n suffix,\n assistHint,\n headline,\n classes\n}: CalculatorInfoProps) => {\n return (\n <div className={cn('w-full max-w-[456px] rounded-md bg-color-blue-grey-100 p-8 mobile:px-4 mobile:py-8', classes?.wrapper)}>\n <CalculatedBlock\n suffix={suffix}\n rootValue={rootValue}\n rootDescription={rootDescription}\n classes={classes?.calculatedBlock}\n />\n <CalculatorInfoHead title={title} subtitle={subtitle} classes={classes?.calculatedInfoHead} />\n <CalculatorInfoBody\n withoutDivider={infoList.length > 0 || Boolean(assistHint)}\n infoList={infoList}\n classes={classes?.calculatorInfoBody}\n />\n <CalculatorInfoFooter\n assistHint={assistHint}\n headline={headline}\n buttonsConfig={buttonsConfig}\n bottomDescription={bottomDescription}\n classes={classes?.calculatorInfoFooter}\n />\n </div>\n )\n}\n"],"names":["CalculatorInfo","rootDescription","bottomDescription","rootValue","title","subtitle","buttonsConfig","infoList","suffix","assistHint","headline","classes","cn","jsx","CalculatedBlock","CalculatorInfoHead","CalculatorInfoBody","CalculatorInfoFooter"],"mappings":"oWAiCO,MAAMA,EAAiB,CAAC,CAC7B,gBAAAC,EACA,kBAAAC,EACA,UAAAC,EACA,MAAAC,EACA,SAAAC,EACA,cAAAC,EACA,SAAAC,EACA,OAAAC,EACA,WAAAC,EACA,SAAAC,EACA,QAAAC,CACF,MAEK,MAAA,CAAI,UAAWC,EAAG,qFAAsFD,GAAS,OAAO,EACvH,SAAA,CAAAE,EAACC,EAAA,CACC,OAAAN,EACA,UAAAL,EACA,gBAAAF,EACA,QAASU,GAAS,eAAA,CAAA,IAEnBI,EAAA,CAAmB,MAAAX,EAAc,SAAAC,EAAoB,QAASM,GAAS,mBAAoB,EAC5FE,EAACG,EAAA,CACC,eAAgBT,EAAS,OAAS,GAAK,EAAQE,EAC/C,SAAAF,EACA,QAASI,GAAS,kBAAA,CAAA,EAEpBE,EAACI,EAAA,CACC,WAAAR,EACA,SAAAC,EACA,cAAAJ,EACA,kBAAAJ,EACA,QAASS,GAAS,oBAAA,CAAA,CACpB,EACF"}
1
+ {"version":3,"file":"CalculatorInfo.js","sources":["../../../../../../lib/widgets/calculator/ui/calculatorInfo/CalculatorInfo.tsx"],"sourcesContent":["import {\n CalculatedBlock,\n type CalculatedBlockClasses,\n type CalculatedBlockProps,\n type CalculatedInfoBodyProps,\n CalculatorInfoBody,\n type CalculatorInfoBodyClasses,\n CalculatorInfoFooter,\n type CalculatorInfoFooterClasses,\n type CalculatorInfoFooterProps,\n CalculatorInfoHead,\n type CalculatorInfoHeadClasses,\n type CalculatorInfoHeadProps\n} from './ui'\nimport { cn } from '$/shared/utils'\n\nexport type CalculatorInfoClasses = {\n wrapper?: string\n calculatedBlock?: CalculatedBlockClasses\n calculatedInfoHead?: CalculatorInfoHeadClasses\n calculatorInfoBody?: CalculatorInfoBodyClasses\n calculatorInfoFooter?: CalculatorInfoFooterClasses\n}\n\nexport interface CalculatorInfoProps\n extends Omit<CalculatedBlockProps, 'classes'>,\n Omit<CalculatorInfoHeadProps, 'classes'>,\n Omit<CalculatedInfoBodyProps, 'classes'>,\n Omit<CalculatorInfoFooterProps, 'classes'> {\n classes?: CalculatorInfoClasses\n headline?: string\n}\n\nexport const CalculatorInfo = ({\n rootDescription,\n bottomDescription,\n rootValue,\n title,\n subtitle,\n buttonsConfig,\n infoList,\n suffix,\n assistHint,\n headline,\n isFormula,\n classes\n}: CalculatorInfoProps) => {\n return (\n <div className={cn('w-full max-w-[456px] rounded-md bg-color-blue-grey-100 p-8 mobile:px-4 mobile:py-8', classes?.wrapper)}>\n <CalculatedBlock\n isFormula={isFormula}\n suffix={suffix}\n rootValue={rootValue}\n rootDescription={rootDescription}\n classes={classes?.calculatedBlock}\n />\n <CalculatorInfoHead title={title} subtitle={subtitle} classes={classes?.calculatedInfoHead} />\n <CalculatorInfoBody\n withoutDivider={infoList.length > 0 || Boolean(assistHint)}\n infoList={infoList}\n classes={classes?.calculatorInfoBody}\n />\n <CalculatorInfoFooter\n assistHint={assistHint}\n headline={headline}\n buttonsConfig={buttonsConfig}\n bottomDescription={bottomDescription}\n classes={classes?.calculatorInfoFooter}\n />\n </div>\n )\n}\n"],"names":["CalculatorInfo","rootDescription","bottomDescription","rootValue","title","subtitle","buttonsConfig","infoList","suffix","assistHint","headline","isFormula","classes","cn","jsx","CalculatedBlock","CalculatorInfoHead","CalculatorInfoBody","CalculatorInfoFooter"],"mappings":"oWAiCO,MAAMA,EAAiB,CAAC,CAC7B,gBAAAC,EACA,kBAAAC,EACA,UAAAC,EACA,MAAAC,EACA,SAAAC,EACA,cAAAC,EACA,SAAAC,EACA,OAAAC,EACA,WAAAC,EACA,SAAAC,EACA,UAAAC,EACA,QAAAC,CACF,MAEK,MAAA,CAAI,UAAWC,EAAG,qFAAsFD,GAAS,OAAO,EACvH,SAAA,CAAAE,EAACC,EAAA,CACC,UAAAJ,EACA,OAAAH,EACA,UAAAL,EACA,gBAAAF,EACA,QAASW,GAAS,eAAA,CAAA,IAEnBI,EAAA,CAAmB,MAAAZ,EAAc,SAAAC,EAAoB,QAASO,GAAS,mBAAoB,EAC5FE,EAACG,EAAA,CACC,eAAgBV,EAAS,OAAS,GAAK,EAAQE,EAC/C,SAAAF,EACA,QAASK,GAAS,kBAAA,CAAA,EAEpBE,EAACI,EAAA,CACC,WAAAT,EACA,SAAAC,EACA,cAAAJ,EACA,kBAAAJ,EACA,QAASU,GAAS,oBAAA,CAAA,CACpB,EACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"CalculatedBlock.js","sources":["../../../../../../../lib/widgets/calculator/ui/calculatorInfo/ui/CalculatedBlock.tsx"],"sourcesContent":["import { cn } from '$/shared/utils'\nimport { type CalculatorSuffix, type CalculatorValue, formatWithIntl } from '$/widgets/calculator/model'\n\nexport type CalculatedBlockClasses = {\n wrapper?: string\n description?: string\n value?: string\n}\n\nexport interface CalculatedBlockProps {\n rootDescription: string\n rootValue: CalculatorValue\n suffix: CalculatorSuffix\n classes?: CalculatedBlockClasses\n}\n\nexport const CalculatedBlock = ({ rootDescription, rootValue, suffix, classes }: CalculatedBlockProps) => {\n return (\n <div className={cn('mb-6 flex items-center justify-between gap-6', classes?.wrapper)}>\n <p className={cn('desk-body-regular-l text-color-dark', classes?.description)}>{rootDescription}</p>\n <div className={cn('desk-title-bold-l flex items-center gap-1 text-color-dark mobile:mob-title-bold-l', classes?.value)}>\n {formatWithIntl(suffix, Number(rootValue))}\n </div>\n </div>\n )\n}\n"],"names":["CalculatedBlock","rootDescription","rootValue","suffix","classes","cn","jsx","formatWithIntl"],"mappings":"kKAgBO,MAAMA,EAAkB,CAAC,CAAE,gBAAAC,EAAiB,UAAAC,EAAW,OAAAC,EAAQ,QAAAC,OAEjE,MAAA,CAAI,UAAWC,EAAG,+CAAgDD,GAAS,OAAO,EACjF,SAAA,CAAAE,EAAC,KAAE,UAAWD,EAAG,sCAAuCD,GAAS,WAAW,EAAI,SAAAH,EAAgB,EAChGK,EAAC,MAAA,CAAI,UAAWD,EAAG,oFAAqFD,GAAS,KAAK,EACnH,SAAAG,EAAeJ,EAAQ,OAAOD,CAAS,CAAC,CAAA,CAC3C,CAAA,EACF"}
1
+ {"version":3,"file":"CalculatedBlock.js","sources":["../../../../../../../lib/widgets/calculator/ui/calculatorInfo/ui/CalculatedBlock.tsx"],"sourcesContent":["import { cn } from '$/shared/utils'\nimport { type CalculatorRootValue, type CalculatorSuffix, formatWithIntl } from '$/widgets/calculator/model'\n\nexport type CalculatedBlockClasses = {\n wrapper?: string\n description?: string\n value?: string\n}\n\nexport interface CalculatedBlockProps {\n rootDescription: string\n rootValue: CalculatorRootValue\n isFormula: boolean\n suffix: CalculatorSuffix\n classes?: CalculatedBlockClasses\n}\n\nexport const CalculatedBlock = ({ rootDescription, rootValue, suffix, classes }: CalculatedBlockProps) => {\n return (\n <div className={cn('mb-6 flex items-center justify-between gap-6', classes?.wrapper)}>\n <p className={cn('desk-body-regular-l text-color-dark', classes?.description)}>{rootDescription}</p>\n <div className={cn('desk-title-bold-l flex items-center gap-1 text-color-dark mobile:mob-title-bold-l', classes?.value)}>\n {formatWithIntl(suffix, Number(rootValue))}\n </div>\n </div>\n )\n}\n"],"names":["CalculatedBlock","rootDescription","rootValue","suffix","classes","cn","jsx","formatWithIntl"],"mappings":"kKAiBO,MAAMA,EAAkB,CAAC,CAAE,gBAAAC,EAAiB,UAAAC,EAAW,OAAAC,EAAQ,QAAAC,OAEjE,MAAA,CAAI,UAAWC,EAAG,+CAAgDD,GAAS,OAAO,EACjF,SAAA,CAAAE,EAAC,KAAE,UAAWD,EAAG,sCAAuCD,GAAS,WAAW,EAAI,SAAAH,EAAgB,EAChGK,EAAC,MAAA,CAAI,UAAWD,EAAG,oFAAqFD,GAAS,KAAK,EACnH,SAAAG,EAAeJ,EAAQ,OAAOD,CAAS,CAAC,CAAA,CAC3C,CAAA,EACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"CalculatorInfoBody.js","sources":["../../../../../../../lib/widgets/calculator/ui/calculatorInfo/ui/CalculatorInfoBody.tsx"],"sourcesContent":["import { useFormContext } from 'react-hook-form'\nimport { cn } from '$/shared/utils'\nimport { type CalculatorSchema, formatInfoList } from '$/widgets/calculator/model'\nimport { InfoListItem, type InfoListItemDTO } from '$/widgets/calculator/ui'\n\nexport type CalculatorInfoBodyClasses = {\n wrapper?: string\n}\n\nexport interface CalculatedInfoBodyProps {\n infoList: InfoListItemDTO[]\n classes?: CalculatorInfoBodyClasses\n withoutDivider?: boolean\n}\n\nexport const CalculatorInfoBody = ({ infoList, classes, withoutDivider }: CalculatedInfoBodyProps) => {\n const { watch } = useFormContext<CalculatorSchema>()\n const watchedFields = watch()\n const formattedInfoList = formatInfoList(infoList, watchedFields)\n\n return (\n <div\n className={cn(\n 'flex flex-col gap-3 pt-4',\n { 'mb-6 mt-4 border-t border-solid border-blue-grey-500': withoutDivider },\n classes?.wrapper\n )}\n >\n {formattedInfoList?.map((listItem) => (\n <InfoListItem key={listItem.label} {...listItem} />\n ))}\n </div>\n )\n}\n"],"names":["CalculatorInfoBody","infoList","classes","withoutDivider","watch","useFormContext","watchedFields","formattedInfoList","formatInfoList","jsx","cn","listItem","InfoListItem"],"mappings":"4PAeO,MAAMA,EAAqB,CAAC,CAAE,SAAAC,EAAU,QAAAC,EAAS,eAAAC,KAA8C,CACpG,KAAM,CAAE,MAAAC,CAAA,EAAUC,EAAA,EACZC,EAAgBF,EAAA,EAChBG,EAAoBC,EAAeP,EAAUK,CAAa,EAEhE,OACEG,EAAC,MAAA,CACC,UAAWC,EACT,2BACA,CAAE,uDAAwDP,CAAA,EAC1DD,GAAS,OAAA,EAGV,SAAAK,GAAmB,IAAKI,GACvBF,EAACG,GAAmC,GAAGD,GAApBA,EAAS,KAAqB,CAClD,CAAA,CAAA,CAGP"}
1
+ {"version":3,"file":"CalculatorInfoBody.js","sources":["../../../../../../../lib/widgets/calculator/ui/calculatorInfo/ui/CalculatorInfoBody.tsx"],"sourcesContent":["import { useFormContext } from 'react-hook-form'\nimport { cn } from '$/shared/utils'\nimport { type CalculatorSchema, formatInfoList } from '$/widgets/calculator/model'\nimport { InfoListItem, type InfoListItemProps } from '$/widgets/calculator/ui'\n\nexport type CalculatorInfoBodyClasses = {\n wrapper?: string\n}\n\nexport interface CalculatedInfoBodyProps {\n infoList: InfoListItemProps[]\n classes?: CalculatorInfoBodyClasses\n withoutDivider?: boolean\n}\n\nexport const CalculatorInfoBody = ({ infoList, classes, withoutDivider }: CalculatedInfoBodyProps) => {\n const { watch } = useFormContext<CalculatorSchema>()\n const watchedFields = watch()\n const formattedInfoList = formatInfoList(infoList, watchedFields)\n\n return (\n <div\n className={cn(\n 'flex flex-col gap-3 pt-4',\n { 'mb-6 mt-4 border-t border-solid border-blue-grey-500': withoutDivider },\n classes?.wrapper\n )}\n >\n {formattedInfoList?.map((listItem) => (\n <InfoListItem key={listItem.label} {...listItem} />\n ))}\n </div>\n )\n}\n"],"names":["CalculatorInfoBody","infoList","classes","withoutDivider","watch","useFormContext","watchedFields","formattedInfoList","formatInfoList","jsx","cn","listItem","InfoListItem"],"mappings":"4PAeO,MAAMA,EAAqB,CAAC,CAAE,SAAAC,EAAU,QAAAC,EAAS,eAAAC,KAA8C,CACpG,KAAM,CAAE,MAAAC,CAAA,EAAUC,EAAA,EACZC,EAAgBF,EAAA,EAChBG,EAAoBC,EAAeP,EAAUK,CAAa,EAEhE,OACEG,EAAC,MAAA,CACC,UAAWC,EACT,2BACA,CAAE,uDAAwDP,CAAA,EAC1DD,GAAS,OAAA,EAGV,SAAAK,GAAmB,IAAKI,GACvBF,EAACG,GAAmC,GAAGD,GAApBA,EAAS,KAAqB,CAClD,CAAA,CAAA,CAGP"}
@@ -1 +1 @@
1
- {"version":3,"file":"InfoListItem.js","sources":["../../../../../../../lib/widgets/calculator/ui/calculatorInfo/ui/InfoListItem.tsx"],"sourcesContent":["import { pushToDlTooltip } from '../../../../../shared/dataLayers'\nimport { Icon, Popover } from '$/shared/ui'\nimport { cn } from '$/shared/utils'\nimport { type CalculatorSuffix, type CalculatorValue, formatValueToRenderInfoItem } from '$/widgets/calculator/model'\n\nexport type InfoListItemMode = CalculatorSuffix | 'text'\nexport type InfoListItemColor = 'dark' | 'blue'\n\nexport interface InfoListItemCommon {\n label: string\n mode: InfoListItemMode\n hint?: string\n accent?: boolean\n color?: InfoListItemColor\n withFormula?: boolean\n}\n\nexport interface InfoListItemDTO extends InfoListItemCommon {\n value: CalculatorValue\n}\n\nexport interface InfoListItemProps extends InfoListItemCommon {\n value: string\n}\n\nexport const InfoListItem = ({ hint, value, label, mode, color = 'dark', accent = false }: InfoListItemProps) => {\n return (\n <div className='flex items-center justify-between gap-4'>\n <div className='flex items-center gap-2'>\n <p className='desk-body-regular-l text-color-dark'>{label}</p>\n {hint && (\n <Popover\n onPointerDown={() => pushToDlTooltip(label, 'calculator')}\n withCloseBtn={false}\n triggerElement={<Icon className='size-5 text-icon-blue-grey-600' name='info/helpCircle' />}\n >\n <p>{hint}</p>\n </Popover>\n )}\n </div>\n <span\n className={cn('desk-body-medium-l text-color-dark', {\n '[&&]:desk-title-bold-s': accent,\n 'text-color-primary-default': color === 'blue'\n })}\n >\n {formatValueToRenderInfoItem(mode, value)}\n </span>\n </div>\n )\n}\n"],"names":["InfoListItem","hint","value","label","mode","color","accent","jsxs","jsx","Popover","pushToDlTooltip","Icon","cn","formatValueToRenderInfoItem"],"mappings":"8XAyBO,MAAMA,EAAe,CAAC,CAAE,KAAAC,EAAM,MAAAC,EAAO,MAAAC,EAAO,KAAAC,EAAM,MAAAC,EAAQ,OAAQ,OAAAC,EAAS,MAE9EC,EAAC,MAAA,CAAI,UAAU,0CACb,SAAA,CAAAA,EAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAC,EAAC,IAAA,CAAE,UAAU,sCAAuC,SAAAL,EAAM,EACzDF,GACCO,EAACC,EAAA,CACC,cAAe,IAAMC,EAAgBP,EAAO,YAAY,EACxD,aAAc,GACd,eAAgBK,EAACG,EAAA,CAAK,UAAU,iCAAiC,KAAK,kBAAkB,EAExF,SAAAH,EAAC,KAAG,SAAAP,CAAA,CAAK,CAAA,CAAA,CACX,EAEJ,EACAO,EAAC,OAAA,CACC,UAAWI,EAAG,qCAAsC,CAClD,yBAA0BN,EAC1B,6BAA8BD,IAAU,MAAA,CACzC,EAEA,SAAAQ,EAA4BT,EAAMF,CAAK,CAAA,CAAA,CAC1C,EACF"}
1
+ {"version":3,"file":"InfoListItem.js","sources":["../../../../../../../lib/widgets/calculator/ui/calculatorInfo/ui/InfoListItem.tsx"],"sourcesContent":["import { pushToDlTooltip } from '$/shared/dataLayers'\nimport { Icon, Popover } from '$/shared/ui'\nimport { cn } from '$/shared/utils'\nimport { type CalculatorSuffix, formatValueToRenderInfoItem } from '$/widgets/calculator/model'\n\nexport type InfoListItemMode = CalculatorSuffix | 'text'\nexport type InfoListItemColor = 'dark' | 'blue'\nexport type InfoListItemValue = string\n\nexport interface InfoListItemProps {\n label: string\n mode: InfoListItemMode\n hint?: string\n accent?: boolean\n color?: InfoListItemColor\n isFormula: boolean\n value: InfoListItemValue\n}\n\nexport const InfoListItem = ({ hint, value, label, mode, color = 'dark', accent = false }: InfoListItemProps) => {\n return (\n <div className='flex items-center justify-between gap-4'>\n <div className='flex items-center gap-2'>\n <p className='desk-body-regular-l text-color-dark'>{label}</p>\n {hint && (\n <Popover\n onPointerDown={() => pushToDlTooltip(label, 'calculator')}\n withCloseBtn={false}\n triggerElement={<Icon className='size-5 text-icon-blue-grey-600' name='info/helpCircle' />}\n >\n <p>{hint}</p>\n </Popover>\n )}\n </div>\n <span\n className={cn('desk-body-medium-l text-color-dark', {\n '[&&]:desk-title-bold-s': accent,\n 'text-color-primary-default': color === 'blue'\n })}\n >\n {formatValueToRenderInfoItem(mode, value)}\n </span>\n </div>\n )\n}\n"],"names":["InfoListItem","hint","value","label","mode","color","accent","jsxs","jsx","Popover","pushToDlTooltip","Icon","cn","formatValueToRenderInfoItem"],"mappings":"8XAmBO,MAAMA,EAAe,CAAC,CAAE,KAAAC,EAAM,MAAAC,EAAO,MAAAC,EAAO,KAAAC,EAAM,MAAAC,EAAQ,OAAQ,OAAAC,EAAS,MAE9EC,EAAC,MAAA,CAAI,UAAU,0CACb,SAAA,CAAAA,EAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAC,EAAC,IAAA,CAAE,UAAU,sCAAuC,SAAAL,EAAM,EACzDF,GACCO,EAACC,EAAA,CACC,cAAe,IAAMC,EAAgBP,EAAO,YAAY,EACxD,aAAc,GACd,eAAgBK,EAACG,EAAA,CAAK,UAAU,iCAAiC,KAAK,kBAAkB,EAExF,SAAAH,EAAC,KAAG,SAAAP,CAAA,CAAK,CAAA,CAAA,CACX,EAEJ,EACAO,EAAC,OAAA,CACC,UAAWI,EAAG,qCAAsC,CAClD,yBAA0BN,EAC1B,6BAA8BD,IAAU,MAAA,CACzC,EAEA,SAAAQ,EAA4BT,EAAMF,CAAK,CAAA,CAAA,CAC1C,EACF"}