sales-frontend-components 0.0.182 → 0.0.184
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs.js +43 -0
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.esm.js +44 -2
- package/dist/index.esm.js.map +1 -1
- package/package.json +10 -10
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/form/form-checkbox-button.tsx","../src/form/form-checkbox.tsx","../../../node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/dayjs.min.js","../../../node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/plugin/customParseFormat.js","../../utils/dist/index.js","../src/form/form-date-picker.tsx","../../../node_modules/.pnpm/classnames@2.5.1/node_modules/classnames/bind.js","../src/modal/common.tsx","../src/modal/standard/address-search/address-search-modal.tsx","../src/modal/standard/address-search/use-search-address.tsx","../src/modal/standard/bank-stock-search/constants.tsx","../src/modal/standard/bank-stock-search/use-bank-stock-search.tsx","../src/modal/standard/bank-stock-search/bank-stock-search-modal.tsx","../src/modal/standard/customer-search/use-customer-search.tsx","../src/modal/standard/customer-search/customer-search.tsx","../src/modal/standard/customer-search/customer-search-modal.tsx","../src/modal/standard/nationality-search/nationality-search-modal.tsx","../src/modal/standard/nationality-search/use-search-nationality.tsx","../src/modal/standard/nxl-one/use-nxl-one-modal.tsx","../src/modal/standard/visa-search/visa-search-modal.tsx","../src/modal/standard/visa-search/use-search-visa.tsx","../src/modal/pre-standard/dea-customer-search-modal/dea-customer-search-result.tsx","../src/modal/pre-standard/dea-customer-search-modal/dea-customer-search.tsx","../src/modal/pre-standard/dea-customer-search-modal/dea-customer-search-modal.tsx","../src/modal/pre-standard/employee-search-modal/constants.ts","../src/modal/pre-standard/employee-search-modal/employee-search-result.tsx","../src/modal/pre-standard/employee-search-modal/employee-search.tsx","../src/modal/pre-standard/employee-search-modal/employee-search-modal.tsx","../src/modal/pre-standard/job-search-modal/constants.ts","../src/modal/pre-standard/job-search-modal/job-search-detail.tsx","../src/modal/pre-standard/job-search-modal/job-search-category.tsx","../src/modal/pre-standard/job-search-modal/job-search-favorite.tsx","../src/modal/pre-standard/job-search-modal/job-search-result.tsx","../src/modal/pre-standard/job-search-modal/job-search.tsx","../src/modal/pre-standard/job-search-modal/use-job-search.tsx","../src/modal/pre-standard/job-vehicle-search-modal/job-vehicle-search-grade.tsx","../src/modal/pre-standard/vehicle-search-modal/vehicle-search.tsx","../src/modal/pre-standard/vehicle-search-modal/use-vehicle-search.tsx","../src/modal/pre-standard/job-vehicle-search-modal/use-job-vehicle-search.tsx","../src/modal/pre-standard/job-vehicle-search-modal/job-vehicle-search.tsx","../src/modal/pre-standard/organization-search-modal/organization-search-result.tsx","../src/modal/pre-standard/organization-search-modal/organization-search.tsx","../src/modal/pre-standard/organization-search-modal/organization-search-modal.tsx","../src/modal/pre-standard/vehicle-search-modal/vehicle-search-modal.tsx","../src/form/form-search-job-field.tsx","../src/form/form-segment.tsx","../src/form/form-select.tsx","../src/form/form-text-field.tsx","../src/step-indicator/step-indicator.tsx","../src/camera/attachment.tsx","../src/camera/resize.ts","../src/camera/use-camera.tsx","../src/canvas-paint/use-canvas-paint.ts","../src/canvas-paint/dummyData.ts","../src/remote-identity-verification/use-remote-identity-verification.tsx","../src/dud-fileupload/stories/upload.tsx","../src/dud-fileupload/stories/download.tsx","../src/downloader/use-downloader.tsx","../src/ga/ga-iframe.tsx"],"sourcesContent":["import { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { CheckboxButton, type CheckboxButtonProps } from 'sales-frontend-design-system';\n\nexport const FormCheckboxButton = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n children,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled'> & Omit<CheckboxButtonProps, 'id'>) => {\n const { field, fieldState } = useController({ name, control, disabled });\n\n return (\n <CheckboxButton\n {...props}\n {...field}\n id={field.name}\n checked={field.value ?? false}\n error={fieldState.invalid}\n onChange={(checked) => {\n field.onChange(checked);\n props.onChange?.(checked);\n }}\n >\n {children}\n </CheckboxButton>\n );\n};\n","import { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { Checkbox, CheckboxProps } from 'sales-frontend-design-system';\n\nexport const FormCheckbox = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n children,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled'> & Omit<CheckboxProps, 'id'>) => {\n const { field } = useController({ name, control, disabled });\n\n return (\n <Checkbox {...props} {...field} id={field.name} checked={field.value} onChange={field.onChange}>\n {children}\n </Checkbox>\n );\n};\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),k=_.prototype;return O.prototype=k,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){k[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_customParseFormat=t()}(this,(function(){\"use strict\";var e={LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"},t=/(\\[[^[]*\\])|([-_:/.,()\\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\\d/,r=/\\d\\d/,i=/\\d\\d?/,o=/\\d*[^-_:/,()\\s\\d]+/,s={},a=function(e){return(e=+e)+(e>68?1900:2e3)};var f=function(e){return function(t){this[e]=+t}},h=[/[+-]\\d\\d:?(\\d\\d)?|Z/,function(e){(this.zone||(this.zone={})).offset=function(e){if(!e)return 0;if(\"Z\"===e)return 0;var t=e.match(/([+-]|\\d\\d)/g),n=60*t[1]+(+t[2]||0);return 0===n?0:\"+\"===t[0]?-n:n}(e)}],u=function(e){var t=s[e];return t&&(t.indexOf?t:t.s.concat(t.f))},d=function(e,t){var n,r=s.meridiem;if(r){for(var i=1;i<=24;i+=1)if(e.indexOf(r(i,0,t))>-1){n=i>12;break}}else n=e===(t?\"pm\":\"PM\");return n},c={A:[o,function(e){this.afternoon=d(e,!1)}],a:[o,function(e){this.afternoon=d(e,!0)}],Q:[n,function(e){this.month=3*(e-1)+1}],S:[n,function(e){this.milliseconds=100*+e}],SS:[r,function(e){this.milliseconds=10*+e}],SSS:[/\\d{3}/,function(e){this.milliseconds=+e}],s:[i,f(\"seconds\")],ss:[i,f(\"seconds\")],m:[i,f(\"minutes\")],mm:[i,f(\"minutes\")],H:[i,f(\"hours\")],h:[i,f(\"hours\")],HH:[i,f(\"hours\")],hh:[i,f(\"hours\")],D:[i,f(\"day\")],DD:[r,f(\"day\")],Do:[o,function(e){var t=s.ordinal,n=e.match(/\\d+/);if(this.day=n[0],t)for(var r=1;r<=31;r+=1)t(r).replace(/\\[|\\]/g,\"\")===e&&(this.day=r)}],w:[i,f(\"week\")],ww:[r,f(\"week\")],M:[i,f(\"month\")],MM:[r,f(\"month\")],MMM:[o,function(e){var t=u(\"months\"),n=(u(\"monthsShort\")||t.map((function(e){return e.slice(0,3)}))).indexOf(e)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[o,function(e){var t=u(\"months\").indexOf(e)+1;if(t<1)throw new Error;this.month=t%12||t}],Y:[/[+-]?\\d+/,f(\"year\")],YY:[r,function(e){this.year=a(e)}],YYYY:[/\\d{4}/,f(\"year\")],Z:h,ZZ:h};function l(n){var r,i;r=n,i=s&&s.formats;for(var o=(n=r.replace(/(\\[[^\\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var o=r&&r.toUpperCase();return n||i[r]||e[r]||i[o].replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,n){return t||n.slice(1)}))}))).match(t),a=o.length,f=0;f<a;f+=1){var h=o[f],u=c[h],d=u&&u[0],l=u&&u[1];o[f]=l?{regex:d,parser:l}:h.replace(/^\\[|\\]$/g,\"\")}return function(e){for(var t={},n=0,r=0;n<a;n+=1){var i=o[n];if(\"string\"==typeof i)r+=i.length;else{var s=i.regex,f=i.parser,h=e.slice(r),u=s.exec(h)[0];f.call(t,u),e=e.replace(u,\"\")}}return function(e){var t=e.afternoon;if(void 0!==t){var n=e.hours;t?n<12&&(e.hours+=12):12===n&&(e.hours=0),delete e.afternoon}}(t),t}}return function(e,t,n){n.p.customParseFormat=!0,e&&e.parseTwoDigitYear&&(a=e.parseTwoDigitYear);var r=t.prototype,i=r.parse;r.parse=function(e){var t=e.date,r=e.utc,o=e.args;this.$u=r;var a=o[1];if(\"string\"==typeof a){var f=!0===o[2],h=!0===o[3],u=f||h,d=o[2];h&&(d=o[2]),s=this.$locale(),!f&&d&&(s=n.Ls[d]),this.$d=function(e,t,n,r){try{if([\"x\",\"X\"].indexOf(t)>-1)return new Date((\"X\"===t?1e3:1)*e);var i=l(t)(e),o=i.year,s=i.month,a=i.day,f=i.hours,h=i.minutes,u=i.seconds,d=i.milliseconds,c=i.zone,m=i.week,M=new Date,Y=a||(o||s?1:M.getDate()),p=o||M.getFullYear(),v=0;o&&!s||(v=s>0?s-1:M.getMonth());var D,w=f||0,g=h||0,y=u||0,L=d||0;return c?new Date(Date.UTC(p,v,Y,w,g,y,L+60*c.offset*1e3)):n?new Date(Date.UTC(p,v,Y,w,g,y,L)):(D=new Date(p,v,Y,w,g,y,L),m&&(D=r(D).week(m).toDate()),D)}catch(e){return new Date(\"\")}}(t,a,r,n),this.init(),d&&!0!==d&&(this.$L=this.locale(d).$L),u&&t!=this.format(a)&&(this.$d=new Date(\"\")),s={}}else if(a instanceof Array)for(var c=a.length,m=1;m<=c;m+=1){o[1]=a[m-1];var M=n.apply(this,o);if(M.isValid()){this.$d=M.$d,this.$L=M.$L,this.init();break}m===c&&(this.$d=new Date(\"\"))}else i.call(this,e)}}}));","import dayjs from 'dayjs';\nimport customParseFormat from 'dayjs/plugin/customParseFormat.js';\n\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n\n// src/utils/timing-utils.ts\nfunction throttle(func, delay) {\n let lastCall = 0;\n let timeout = null;\n return (...args) => {\n const now = Date.now();\n if (now - lastCall >= delay) {\n lastCall = now;\n func(...args);\n } else if (!timeout) {\n timeout = setTimeout(\n () => {\n lastCall = Date.now();\n func(...args);\n timeout = null;\n },\n delay - (now - lastCall)\n );\n }\n };\n}\nfunction debounce(func, delay) {\n let timeout = null;\n return (...args) => {\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(() => {\n func(...args);\n timeout = null;\n }, delay);\n };\n}\n\n// src/utils/cookie-utils.ts\nvar getCookie = (name) => {\n if (typeof document === \"undefined\") {\n return \"\";\n }\n const match = document.cookie.match(new RegExp(`(^|; *)${name}=([^;]*)`));\n return match ? decodeURIComponent(match[2] || \"\") : \"\";\n};\nvar setCookie = (name, value, options = {}) => {\n if (typeof document === \"undefined\") {\n return;\n }\n let cookieString = `${name}=${encodeURIComponent(value)}`;\n if (options.expires) {\n let expiresDate;\n if (typeof options.expires === \"number\") {\n expiresDate = /* @__PURE__ */ new Date();\n expiresDate.setDate(expiresDate.getDate() + options.expires);\n } else {\n expiresDate = options.expires;\n }\n cookieString += `; expires=${expiresDate.toUTCString()}`;\n }\n cookieString += `; path=${options.path || \"/\"}`;\n if (options.domain) {\n cookieString += `; domain=${options.domain}`;\n }\n if (options.secure) {\n cookieString += \"; secure\";\n }\n document.cookie = cookieString;\n};\nvar deleteCookie = (name, options = {}) => {\n setCookie(name, \"\", { ...options, expires: -1 });\n};\n\n// src/utils/environment-utils.ts\nvar getSubdomain = (hostname) => {\n if (!hostname || hostname === \"localhost\" || hostname === \"127.0.0.1\") {\n return \"\";\n }\n const parts = hostname.split(\".\");\n if (parts.length < 3) {\n return \"\";\n }\n return parts[0] ?? \"\";\n};\nvar getEnvironmentFromHostname = (hostname) => {\n const debugModeEnv = getCookie(\"dsp-debug-mode-env\")?.toLowerCase();\n if (debugModeEnv) {\n return debugModeEnv;\n }\n const subDomain = getSubdomain(hostname);\n if (hostname === \"localhost\" || hostname === \"127.0.0.1\" || hostname.startsWith(\"localhost\")) {\n return \"local\";\n }\n if (subDomain.includes(`dev`)) {\n return \"dev\";\n }\n if (subDomain.includes(\"stg\")) {\n return \"stg\";\n }\n return \"prd\";\n};\nvar isClient = () => {\n try {\n return !!window;\n } catch {\n return false;\n }\n};\nvar isStorybookEnv = () => {\n try {\n return window.isStorybookEnv === true;\n } catch {\n return false;\n }\n};\nvar getBusinessWorkDivisionCode = () => {\n return location.pathname.split(\"/\")[1] ?? \"\";\n};\nvar getServicePath = () => {\n if (typeof window.isStorybookEnv === \"boolean\") {\n return \"\";\n } else {\n return `/${getBusinessWorkDivisionCode()}`;\n }\n};\nvar getApiHostNameFromEnvironment = (currentHostname, forceApiHostName) => {\n if (forceApiHostName) {\n return forceApiHostName;\n }\n const environment = getEnvironmentFromHostname(currentHostname);\n switch (environment) {\n case \"dev\":\n return `https://nxl-dsp-dev.hanwhalife.com`;\n case \"local\":\n case \"stg\":\n return `https://nxl-dsp-stg.hanwhalife.com`;\n case \"prd\":\n return `https://nxl-dsp.hanwhalife.com`;\n default:\n console.warn(\"DSP API environment is not defined\");\n return \"\";\n }\n};\nvar getCdnHostNameFromEnvironment = (currentHostname, forceApiHostName) => {\n if (!isClient()) {\n return \"\";\n }\n if (forceApiHostName) {\n return forceApiHostName;\n }\n const environment = getEnvironmentFromHostname(currentHostname);\n switch (environment) {\n case \"dev\":\n return `https://dev-dsp-static.hanwhalife.com`;\n case \"local\":\n case \"stg\":\n return `https://stg-dsp-static.hanwhalife.com`;\n case \"prd\":\n return `https://dsp-static.hanwhalife.com'`;\n default:\n console.warn(\"DSP environment is not defined\");\n return \"\";\n }\n};\nvar getDudApiBasePathFromEnvironment = (hostname) => {\n if (!isClient()) {\n return \"\";\n }\n const environment = getEnvironmentFromHostname(hostname || location.hostname);\n switch (environment) {\n /**\n * local에서 호출시, rewrite동작을 위해 상대주소를 호출합니다.\n * (cors이슈 해결을 위해 필수)\n */\n case \"local\":\n return `${getServicePath()}/api/dud`;\n /**\n * local 이 아닌 환경에서는 전체주소를 호출합니다.\n */\n case \"dev\":\n return `https://dsp-dud-dev.hanwhalife.com:10101/api`;\n case \"stg\":\n return `https://dsp-dud-stg.hanwhalife.com:10102/api`;\n case \"prd\":\n return `https://dsp-dud.hanwhalife.com/api`;\n default:\n console.warn(\"DUD API environment is not defined\");\n return \"\";\n }\n};\nvar getDspApiBasePathFromEnvironment = (serviceCodeTo, hostname) => {\n if (!isClient()) {\n return \"\";\n }\n const environment = getEnvironmentFromHostname(hostname || location.hostname);\n switch (environment) {\n /**\n * local에서 호출시, rewrite동작을 위해 상대주소를 호출합니다.\n * (cors이슈 해결을 위해 필수)\n */\n case \"local\":\n return `${getServicePath()}/api/${serviceCodeTo}`;\n /**\n * local 이 아닌 환경에서는 전체주소를 호출합니다.\n */\n case \"dev\":\n return `https://nxl-dsp-dev.hanwhalife.com/api/${serviceCodeTo}`;\n case \"stg\":\n return `https://nxl-dsp-stg.hanwhalife.com/api/${serviceCodeTo}`;\n case \"prd\":\n return `https://nxl-dsp.hanwhalife.com/api/${serviceCodeTo}`;\n default:\n console.warn(\"DSP API environment is not defined\");\n return \"\";\n }\n};\nvar getNlcHostFromEnvironment = (hostname) => {\n if (!isClient()) {\n return \"\";\n }\n const environment = getEnvironmentFromHostname(hostname || location.hostname);\n switch (environment) {\n case \"local\":\n return `https://nxl-nlc-stg.hanwhalife.com`;\n case \"dev\":\n return `https://nxl-nlc-dev.hanwhalife.com`;\n case \"stg\":\n return `https://nxl-nlc-stg.hanwhalife.com`;\n case \"prd\":\n return `https://nxl-nlc.hanwhalife.com`;\n default:\n console.warn(\"NLC environment is not defined\");\n return \"\";\n }\n};\n\n// src/utils/user-agent-utils.ts\nvar getDspExecutionEnvironment = () => {\n if (!isClient()) {\n return \"unknown\";\n }\n if (window.n2Bridge) {\n return \"android-webview\";\n }\n if (window.webkit?.messageHandlers?.n2Bridge) {\n return \"ios-webview\";\n }\n if (window.self !== window.top) {\n return \"iframe\";\n }\n return \"web\";\n};\nvar isProductionApp = () => {\n if (!isClient()) {\n return false;\n }\n return isDspApp() || isFpPlannerApp();\n};\nvar checkUserAgentDspApp = (userAgent) => {\n return userAgent.toLowerCase().includes(\"sspapp\");\n};\nvar isDspApp = () => {\n if (!isClient()) {\n return false;\n }\n const environment = getDspExecutionEnvironment();\n return checkUserAgentDspApp(navigator.userAgent) && (environment === \"android-webview\" || environment === \"ios-webview\");\n};\nvar isFpPlannerApp = () => {\n if (!isClient()) {\n return false;\n }\n const environment = getDspExecutionEnvironment();\n return checkUserAgentDspApp(navigator.userAgent) === false && (environment === \"android-webview\" || environment === \"ios-webview\");\n};\nvar isSalesPortal = () => {\n if (!isClient()) {\n return false;\n }\n const environment = getDspExecutionEnvironment();\n return environment === \"iframe\";\n};\nvar isTablet = (userAgent) => {\n const ua = userAgent.toLowerCase();\n return (\n // Apple 태블릿\n ua.includes(\"ipad\") || // Android 태블릿 (Mobile 키워드 없음)\n ua.includes(\"android\") && !ua.includes(\"mobile\") || // 명시적 태블릿 키워드\n ua.includes(\"tablet\") || // Amazon 태블릿\n ua.includes(\"kindle\") || ua.includes(\"silk\") || /kf[a-z]{2}wi|kftt/.test(ua) || // BlackBerry 태블릿\n ua.includes(\"playbook\") || // 삼성 갤럭시 탭 (개선된 정규식)\n /gt-p\\d{4}|sm-[tp]\\d{3}/.test(ua) || // 구글 넥서스/픽셀 태블릿\n /nexus (?:[789]|10)|pixel [cs]|pixel slate/.test(ua) || // 기타 브랜드 태블릿\n /xoom|transformer|mediapad|mipad|tab\\s/.test(ua) || // Windows 태블릿 (개선된 조건)\n ua.includes(\"windows\") && (ua.includes(\"touch\") || ua.includes(\"tablet\")) || ua.includes(\"surface\")\n );\n};\nvar isPhone = (userAgent) => {\n const ua = userAgent.toLowerCase();\n return (\n // Apple 모바일\n ua.includes(\"iphone\") || ua.includes(\"ipod\") || // Android 스마트폰 (Mobile 키워드 있음)\n ua.includes(\"android\") && ua.includes(\"mobile\") || // BlackBerry\n ua.includes(\"blackberry\") || ua.includes(\"bb10\") || // Windows Mobile\n ua.includes(\"windows phone\") || ua.includes(\"windows mobile\") || ua.includes(\"iemobile\") || // Opera Mobile\n ua.includes(\"opera mini\") || ua.includes(\"opera mobi\") || // 기타 모바일 브라우저\n ua.includes(\"mobile\") && (ua.includes(\"firefox\") || ua.includes(\"chrome\") || ua.includes(\"safari\") || ua.includes(\"edge\")) || // 모바일 키워드 (태블릿 제외)\n ua.includes(\"mobile\") && !ua.includes(\"tablet\") || // 삼성 갤럭시 폰 (개선)\n /sm-[a-z]\\d{3}[a-z]?|gt-[a-z]\\d{4}/.test(ua) || // LG, HTC 폰\n /lg-[a-z]\\d{3,4}|htc[_\\s]/.test(ua) || // 화웨이/샤오미 등 (개선)\n /huawei|honor|redmi|mi[\\s\\d]|oneplus|oppo|vivo/.test(ua)\n );\n};\nvar isPc = (userAgent) => {\n const ua = userAgent.toLowerCase();\n return !isPhone(ua) && !isTablet(ua);\n};\nvar getFormFactorFromUserAgent = (userAgent) => {\n if (!userAgent) {\n return \"pc\";\n }\n const ua = userAgent.toLowerCase();\n if (isTablet(ua)) {\n return \"tablet\";\n }\n if (isPhone(ua)) {\n return \"phone\";\n }\n return \"pc\";\n};\nvar getOSName = (userAgent) => {\n if (!userAgent) {\n return \"unknown\";\n }\n const ua = userAgent.toLowerCase();\n if (/iphone|ipad|ipod/.test(ua)) {\n return \"ios\";\n }\n if (ua.includes(\"android\")) {\n return \"android\";\n }\n if (ua.includes(\"windows\") || ua.includes(\"win32\") || ua.includes(\"win64\")) {\n return \"windows\";\n }\n if (ua.includes(\"mac os x\") || ua.includes(\"macos\") || ua.includes(\"macintosh\")) {\n return \"mac\";\n }\n if (ua.includes(\"linux\") && !ua.includes(\"android\")) {\n return \"linux\";\n }\n return \"unknown\";\n};\nvar getCurrentOSName = () => {\n if (!isClient() || typeof navigator === \"undefined\") {\n return \"unknown\";\n }\n return getOSName(navigator.userAgent);\n};\nvar getOSVersion = (userAgent) => {\n if (!userAgent) {\n return \"unknown\";\n }\n const ua = userAgent.toLowerCase();\n const iosMatch = ua.match(/os (\\d+)_(\\d+)(?:_(\\d+))?/);\n if (iosMatch && iosMatch.length >= 3) {\n const major = iosMatch[1];\n const minor = iosMatch[2];\n const patch = iosMatch[3];\n return patch ? `${major}.${minor}.${patch}` : `${major}.${minor}`;\n }\n const androidMatch = ua.match(/android (\\d+(?:\\.\\d+)*)/);\n if (androidMatch && androidMatch[1]) {\n return androidMatch[1];\n }\n const windowsMatch = ua.match(/windows nt (\\d+\\.\\d+)/);\n if (windowsMatch && windowsMatch[1]) {\n const version = windowsMatch[1];\n const windowsVersionMap = {\n \"10.0\": \"10/11\",\n \"6.3\": \"8.1\",\n \"6.2\": \"8\",\n \"6.1\": \"7\",\n \"6.0\": \"Vista\",\n \"5.1\": \"XP\"\n };\n return windowsVersionMap[version] || version;\n }\n const macMatch = ua.match(/mac os x (\\d+)_(\\d+)(?:_(\\d+))?/);\n if (macMatch && macMatch.length >= 3) {\n const major = macMatch[1];\n const minor = macMatch[2];\n const patch = macMatch[3];\n return patch ? `${major}.${minor}.${patch}` : `${major}.${minor}`;\n }\n return \"unknown\";\n};\nvar getBrowserName = (userAgent) => {\n if (!userAgent) {\n return \"unknown\";\n }\n const ua = userAgent.toLowerCase();\n if (ua.includes(\"edg/\") || ua.includes(\"edge/\")) {\n return \"edge\";\n }\n if (ua.includes(\"samsungbrowser\")) {\n return \"samsung\";\n }\n if (ua.includes(\"opr/\") || ua.includes(\"opera\")) {\n return \"opera\";\n }\n if (ua.includes(\"chrome\") && !ua.includes(\"edg\")) {\n return \"chrome\";\n }\n if (ua.includes(\"firefox\")) {\n return \"firefox\";\n }\n if (ua.includes(\"safari\") && !ua.includes(\"chrome\")) {\n return \"safari\";\n }\n return \"unknown\";\n};\nvar getBrowserVersion = (userAgent) => {\n if (!userAgent) {\n return \"unknown\";\n }\n const ua = userAgent.toLowerCase();\n const edgMatch = ua.match(/edg\\/(\\d+(?:\\.\\d+)*)/);\n if (edgMatch && edgMatch[1]) {\n return edgMatch[1];\n }\n const samsungMatch = ua.match(/samsungbrowser\\/(\\d+(?:\\.\\d+)*)/);\n if (samsungMatch && samsungMatch[1]) {\n return samsungMatch[1];\n }\n const operaMatch = ua.match(/(?:opr|opera)\\/(\\d+(?:\\.\\d+)*)/);\n if (operaMatch && operaMatch[1]) {\n return operaMatch[1];\n }\n const chromeMatch = ua.match(/chrome\\/(\\d+(?:\\.\\d+)*)/);\n if (chromeMatch && chromeMatch[1] && !ua.includes(\"edg\")) {\n return chromeMatch[1];\n }\n const firefoxMatch = ua.match(/firefox\\/(\\d+(?:\\.\\d+)*)/);\n if (firefoxMatch && firefoxMatch[1]) {\n return firefoxMatch[1];\n }\n const safariMatch = ua.match(/version\\/(\\d+(?:\\.\\d+)*)/);\n if (safariMatch && safariMatch[1] && ua.includes(\"safari\") && !ua.includes(\"chrome\")) {\n return safariMatch[1];\n }\n return \"unknown\";\n};\nvar getCurrentOSVersion = () => {\n if (!isClient() || typeof navigator === \"undefined\") {\n return \"unknown\";\n }\n return getOSVersion(navigator.userAgent);\n};\nvar getCurrentBrowserName = () => {\n if (!isClient() || typeof navigator === \"undefined\") {\n return \"unknown\";\n }\n return getBrowserName(navigator.userAgent);\n};\nvar getCurrentBrowserVersion = () => {\n if (!isClient() || typeof navigator === \"undefined\") {\n return \"unknown\";\n }\n return getBrowserVersion(navigator.userAgent);\n};\nvar getOrCreateDeviceId = () => {\n if (typeof window === \"undefined\") {\n return \"\";\n }\n const STORAGE_KEY = \"dsp_device_id\";\n let deviceId = localStorage.getItem(STORAGE_KEY);\n if (!deviceId) {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).substring(2, 15);\n deviceId = `dsp-web-${timestamp}-${random}`;\n try {\n localStorage.setItem(STORAGE_KEY, deviceId);\n } catch (error) {\n console.warn(\"[DeviceId] localStorage \\uC800\\uC7A5 \\uC2E4\\uD328:\", error);\n }\n }\n return deviceId;\n};\nvar getDeviceModel = () => {\n if (!isClient()) {\n return \"\";\n }\n const ua = navigator.userAgent;\n if (/iPad/.test(ua)) {\n return \"iPad\";\n }\n if (/iPhone/.test(ua)) {\n return \"iPhone\";\n }\n if (/iPod/.test(ua)) {\n return \"iPod Touch\";\n }\n if (/SM-[A-Z0-9]+/.test(ua)) {\n const match = ua.match(/SM-[A-Z0-9]+/);\n return match ? `Samsung ${match[0]}` : \"Samsung\";\n }\n if (/Pixel/.test(ua)) {\n const match = ua.match(/Pixel [0-9]+[a-zA-Z]*/);\n return match ? `Google ${match[0]}` : \"Google Pixel\";\n }\n if (/Mi\\s|Redmi|POCO/.test(ua)) {\n return \"Xiaomi\";\n }\n if (/HUAWEI/.test(ua)) {\n return \"Huawei\";\n }\n if (/OnePlus/.test(ua)) {\n return \"OnePlus\";\n }\n if (/Windows/.test(ua)) {\n return \"Windows PC\";\n }\n if (/Mac OS X/.test(ua)) {\n return \"Mac\";\n }\n if (/Linux/.test(ua)) {\n return \"Linux PC\";\n }\n return \"Unknown\";\n};\nvar isAndroidDevice = () => {\n if (isClient() === false) {\n return false;\n }\n return /Android/i.test(navigator.userAgent);\n};\nvar isIosDevice = () => {\n if (isClient() === false) {\n return false;\n }\n return /iPhone|iPad|iPod/i.test(navigator.userAgent);\n};\nvar isAndroidWebView = () => {\n return getDspExecutionEnvironment() === \"android-webview\";\n};\nvar isIosWebView = () => {\n return getDspExecutionEnvironment() === \"ios-webview\";\n};\n\n// src/utils/event-handler-utils.ts\nvar _MessageEventManager = class _MessageEventManager {\n constructor() {\n __publicField(this, \"handlers\", /* @__PURE__ */ new Map());\n window.addEventListener(\"message\", this.handleMessage.bind(this));\n }\n static getInstance() {\n if (!_MessageEventManager.instance) {\n _MessageEventManager.instance = new _MessageEventManager();\n }\n return _MessageEventManager.instance;\n }\n /**\n *\n * @param event\n */\n handleMessage(event) {\n for (const [key, handler] of this.handlers) {\n try {\n handler(event);\n } catch (error) {\n console.error(`Message handler ${key} error:`, error);\n }\n }\n }\n /**\n * 이벤트 헨들러 함수를 등록합니다.\n * @param key\n * @param handler\n */\n registerHandler(key, handler) {\n this.handlers.set(key, handler);\n }\n /**\n * 이벤트 핸들러 함수를 삭제합니다.\n * @param key\n */\n unregisterHandler(key) {\n this.handlers.delete(key);\n }\n};\n__publicField(_MessageEventManager, \"instance\");\nvar MessageEventManager = _MessageEventManager;\n\n// src/utils/canvas-utils.ts\nvar convertTextToImg = ({\n targetStr,\n canvasWidth,\n canvasHeight,\n backgroundColor,\n fontColor,\n fontSize,\n fontWeight,\n fontFamily = `'Malgun Gothic', '\\uB9D1\\uC740 \\uACE0\\uB515', 'sans-serif', 'Arial'`\n}) => {\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n throw new Error(\"Canvas context\\uB97C \\uAC00\\uC838\\uC62C \\uC218 \\uC5C6\\uC2B5\\uB2C8\\uB2E4.\");\n }\n const defaultHeight = 150;\n const calculatedWidth = targetStr.length * 70;\n canvas.width = canvasWidth ?? calculatedWidth;\n canvas.height = canvasHeight ?? defaultHeight;\n if (backgroundColor) {\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n }\n ctx.fillStyle = fontColor ?? \"black\";\n ctx.textAlign = \"center\";\n ctx.font = `${fontWeight ?? \"bold\"} ${fontSize ?? 75}px ${fontFamily}`;\n console.log(\"font\", `${fontWeight ?? \"bold\"} ${fontSize ?? 75}px ${fontFamily}`);\n ctx.textBaseline = \"middle\";\n ctx.fillText(targetStr, canvas.width / 2, canvas.height / 2);\n return canvas.toDataURL();\n};\nfunction drawImageResizeCentered(base64, size) {\n return new Promise((resolve) => {\n const { canvasHeight, canvasWidth } = size;\n const canvas = document.createElement(\"canvas\");\n canvas.width = canvasWidth;\n canvas.height = canvasHeight;\n const ctx = canvas.getContext(\"2d\");\n const img = new Image();\n img.src = base64;\n img.onload = () => {\n const imageWidth = img.width;\n const imageHeight = img.height;\n const canvasRatio = canvasWidth / canvasHeight;\n const imageRatio = imageWidth / imageHeight;\n let newWidth;\n let newHeight;\n if (imageRatio > canvasRatio) {\n newWidth = canvasWidth;\n newHeight = newWidth / imageRatio;\n } else {\n newHeight = canvasHeight;\n newWidth = newHeight * imageRatio;\n }\n const x = (canvasWidth - newWidth) / 2;\n const y = (canvasHeight - newHeight) / 2;\n ctx?.clearRect(0, 0, canvasWidth, canvasHeight);\n ctx?.drawImage(img, x, y, newWidth, newHeight);\n resolve(canvas.toDataURL());\n };\n });\n}\n\n// src/utils/file-utils.ts\nfunction base64ToBlob(base64String, contentType = \"\") {\n const regex = /^data:([a-zA-Z0-9/+.-]+);base64,/;\n const matches = base64String.match(regex);\n if (matches === null) {\n throw new Error(\"Invalid base64 string\");\n }\n const contentTypeFinal = contentType || matches[1];\n const byteCharacters = atob(base64String.replace(regex, \"\"));\n const byteNumbers = new Array(byteCharacters.length);\n for (let i = 0; i < byteCharacters.length; i++) {\n byteNumbers[i] = byteCharacters.charCodeAt(i);\n }\n const byteArray = new Uint8Array(byteNumbers);\n return new Blob([byteArray], { type: contentTypeFinal });\n}\nfunction base64ToFile(base64String, fileName, contentType = \"\") {\n const blob = base64ToBlob(base64String, contentType);\n if (!blob) {\n throw new Error(\"Invalid base64 string\");\n }\n return blobToFile(blob, fileName);\n}\nfunction blobToFile(blob, fileName) {\n return new File([blob], fileName, {\n type: blob.type,\n lastModified: Date.now()\n });\n}\nasync function fileToBase64(file) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => {\n if (typeof reader.result === \"string\") {\n resolve(reader.result);\n } else {\n reject(new Error(\"Invalid file type\"));\n }\n };\n reader.onerror = (error) => {\n reject(error);\n };\n reader.readAsDataURL(file);\n });\n}\nfunction getExt(data) {\n if (typeof data === \"string\") {\n return data.split(\".\").pop();\n }\n if (data instanceof File) {\n return data.name.split(\"/\").pop();\n }\n if (data instanceof Blob) {\n return data.type.split(\"/\").pop();\n }\n}\nasync function objectUrlToBlob(objectUrl) {\n try {\n const response = await fetch(objectUrl);\n const blob = await response.blob();\n return blob;\n } catch (error) {\n console.error(\"Error converting object URL to Blob:\", error);\n throw error;\n }\n}\nasync function objectUrlToBase64(objectUrl) {\n const blob = await objectUrlToBlob(objectUrl);\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onloadend = () => {\n if (typeof reader.result === \"string\") {\n resolve(reader.result);\n } else {\n reject(new Error(\"Invalid file type\"));\n }\n };\n reader.onerror = reject;\n reader.readAsDataURL(blob);\n });\n}\nfunction downloadBlob(blob, filename) {\n const url = URL.createObjectURL(blob);\n const link = document.createElement(\"a\");\n link.style.display = \"none\";\n link.href = url;\n link.download = `${filename}.${getExt(blob)}`;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n}\nasync function imageUrlToFileFetch(imageUrl) {\n const headers = new Headers();\n headers.append(\"cache-control\", \"no-cache\");\n const resImage = await fetch(imageUrl, { headers });\n const blob = await resImage.blob();\n const { type } = blob;\n const name = type.split(\"/\").join(\".\");\n const file = new File([blob], name, { type });\n return file;\n}\nasync function imageUrlToFile(imageUrl) {\n const fileConvertTypeCookieKey = \"dsp-debug-mode-file-convert-type\";\n const fileConvertType = getCookie(fileConvertTypeCookieKey);\n if (fileConvertType === \"fetch\") {\n return await imageUrlToFileFetch(imageUrl);\n }\n if (fileConvertType === \"xhr\") {\n return await imageUrlToFileWithXMLHttpRequest(imageUrl);\n }\n return await imageUrlToFileWithCanvas(imageUrl);\n}\nasync function imageUrlToFileWithCanvas(imageUrl) {\n const newImage = new Image();\n newImage.src = imageUrl;\n newImage.crossOrigin = \"Anonymous\";\n return new Promise((resolve, reject) => {\n newImage.onload = () => {\n const canvas = document.createElement(\"canvas\");\n canvas.width = newImage.width;\n canvas.height = newImage.height;\n const ctx = canvas.getContext(\"2d\");\n if (ctx) {\n ctx.drawImage(newImage, 0, 0);\n canvas.toBlob((blob) => {\n if (blob) {\n const ext = getExt(imageUrl);\n const file = new File([blob], `image.${ext}`, { type: blob.type });\n resolve(file);\n }\n });\n }\n };\n newImage.onerror = (e) => {\n reject(JSON.stringify(e));\n };\n });\n}\nasync function imageUrlToFileWithXMLHttpRequest(imageUrl) {\n const xhr = new XMLHttpRequest();\n xhr.open(\"GET\", imageUrl, true);\n xhr.responseType = \"blob\";\n xhr.send();\n return new Promise((resolve, reject) => {\n xhr.onload = () => {\n if (xhr.status === 200) {\n const blob = xhr.response;\n const file = new File([blob], `image.${getExt(imageUrl)}`, { type: blob.type });\n resolve(file);\n } else {\n reject(new Error(`Failed to load image: ${xhr.status}`));\n }\n };\n xhr.onerror = (e) => {\n reject(JSON.stringify(e));\n };\n });\n}\n\n// src/utils/astx2/astx2.min.js\nvar astx2_min_default = \"/* eslint-disable */\\n/* ASTx 1.3 | (C) Copyright AhnLab, Inc. | $Revision: 32070 $ */\\nvar $ASTX2_CONST = {\\n ERROR_SUCCESS: 0,\\n ERROR_FAILED: 101,\\n ERROR_NOINIT: 102,\\n ERROR_NOTINST: 103,\\n ERROR_NOTSUPPORTED: 104,\\n ERROR_NOCONNECT: 105,\\n ERROR_NCK: 106,\\n ERROR_ERR: 107,\\n ERROR_NSP: 108,\\n ERROR_PARAM: 109,\\n ERROR_EXCESS: 110,\\n ERROR_NEEDUPDATE: 111,\\n OPTION_NONE2E: 1,\\n OPTION_AUTOFOCUS: 2,\\n OPTION_AUTOSETTEXT: 4,\\n OPTION_E2EFORM: 8,\\n OPTION_E2EFORM_NOENC: 16,\\n OPTION_E2EFORM_ALLTRIP: 32,\\n OPTION_E2EFORM_ONLY: 64,\\n OPTION_E2EFORM_TAGSET: 128,\\n OPTION_NONE2E_ALG: 256,\\n OPTION_NOSPTDUMMY: 512,\\n OPTION_FIXEDTYPE: 1024,\\n PROTECT_AK: 1,\\n PROTECT_FW: 2,\\n PROTECT_PB: 4,\\n PROTECT_PCS: 8,\\n SERVICE_AK: 1,\\n REQUEST_JSONP: 1,\\n REQUEST_AJAX: 2,\\n DEBUG_NOALIVE: 1,\\n INTERVAL_ALIVE: 5e3,\\n E2ETYPE_EXCLUDE: -1,\\n E2ETYPE_NONE: 0,\\n E2ETYPE_CERT1: 1,\\n E2ETYPE_CERT2: 2,\\n E2ETYPE_SDK: 11,\\n E2ETYPE_PLAIN1: 21,\\n E2ETYPE_PLAIN2: 22,\\n E2ETYPE_WIZVERA: 31,\\n PAGEID: '',\\n BROWSER_TYPE: '',\\n BROWSER_VER: '',\\n E2EFORM_TAIL: !0,\\n E2EFORM_INIT: '_e2e_forminit',\\n E2EFORM_TAG1: '_e2e_1__',\\n E2EFORM_TAG2: '_e2e_2__',\\n E2EFORM_TAG1_PWD: '_e2e_1_pwd__',\\n E2EFORM_TAG2_PWD: '_e2e_2_pwd__',\\n getErrno: function (a) {\\n return 'NCK' == a ? this.ERROR_NCK : 'ERR' == a ? this.ERROR_ERR : 'NSP' == a ? this.ERROR_NSP : this.ERROR_FAILED;\\n },\\n _get_browser_version: function (a) {\\n var b = 0;\\n if (0 <= a.indexOf('Edge/') && ((b = parseInt(a.split('Edge/')[1])), 0 < b)) return 'EG' + b;\\n if (0 <= a.indexOf('MSIE')) {\\n if (((b = parseInt(a.split('MSIE')[1])), 0 < b)) return 'IE' + b;\\n } else if (\\n 0 <= a.indexOf('Trident') &&\\n (0 <= a.indexOf('rv:')\\n ? (b = parseInt(a.split('rv:')[1]))\\n : 0 <= a.indexOf('IE') && (b = parseInt(a.split('IE')[1])),\\n 0 < b)\\n )\\n return 'IE' + b;\\n return 0 <= a.indexOf('OPR/') && ((b = parseInt(a.split('OPR/')[1])), 0 < b)\\n ? 'OP' + b\\n : 0 <= a.indexOf('Firefox/') && ((b = parseInt(a.split('Firefox/')[1])), 0 < b)\\n ? 'FF' + b\\n : 0 <= a.indexOf('Chrome/') && ((b = parseInt(a.split('Chrome/')[1])), 0 < b)\\n ? 'CR' + b\\n : 0 <= a.indexOf('AppleWebKit') &&\\n 0 <= a.indexOf('Version/') &&\\n ((b = parseInt(a.split('Version/')[1])), 0 < b)\\n ? 'SF' + b\\n : 'OT0';\\n },\\n init: function () {\\n this.PAGEID = new Date().getTime();\\n this.PAGEID -= Math.floor(100 * Math.random());\\n this.BROWSER_VER = this._get_browser_version(navigator.userAgent);\\n this.BROWSER_TYPE = this.BROWSER_VER.substring(0, 2);\\n }\\n};\\n$ASTX2_CONST.init();\\nvar $ASTX2_COMM = {\\n mLocalServerURL: '',\\n mClientPublicKey: '',\\n mErrorAbortFlag: !1,\\n mDegugFlags: 0,\\n setDegugFlags: function (a) {\\n this.mDegugFlags |= a;\\n },\\n getDegugFlags: function () {\\n return this.mDegugFlags;\\n },\\n isEnable: function () {\\n return 0 < this.mLocalServerURL.length ? !0 : !1;\\n },\\n uninit: function () {\\n this.mLocalServerURL = '';\\n },\\n errorAbort: function (a) {\\n 1 != this.mErrorAbortFlag && ((this.mErrorAbortFlag = !0), $ASTX2_CUST.errorAbort(a));\\n }\\n },\\n $_astxu = {\\n mJsonpSequence: 0,\\n jsonQstr: function (a) {\\n var b = [],\\n c;\\n for (c in a) a.hasOwnProperty(c) && b.push(encodeURIComponent(c) + '=' + encodeURIComponent(a[c]));\\n return b.join('&');\\n },\\n jsonParse: function (a) {\\n var b = a.indexOf('{'),\\n c = a.indexOf('}');\\n if (-1 == b || -1 == c) return {};\\n a = a.substring(b, c + 1);\\n return 'object' == typeof window.JSON && 'function' == typeof window.JSON.parse\\n ? window.JSON.parse(a)\\n : 'function' == typeof jQuery && 'function' == typeof jQuery.parseJSON\\n ? jQuery.parseJSON(a)\\n : eval('(' + a + ')');\\n },\\n _send_jsonp_jquery: function (a) {\\n try {\\n jQuery.ajax({\\n url: a.src,\\n timeout: a.timeout,\\n cache: !1,\\n crossDomain: !0,\\n dataType: 'jsonp',\\n contentType: 'application/javascript',\\n success: function (b, d, e) {\\n a.onSuccess(b);\\n },\\n error: function (b, d, e) {\\n if (200 == b.status && 1 == a.nocallback) a.onSuccess();\\n else a.onFailure();\\n },\\n complete: function (a, b) {}\\n });\\n } catch (b) {\\n a.onFailure();\\n }\\n },\\n _send_jsonp_dom: function (a) {\\n var b = document.createElement('script');\\n b.type = 'text/javascript';\\n b.id = a.callback;\\n b.async = a.async;\\n b.src = a.src;\\n var c = document.getElementsByTagName('body')[0];\\n if (null == c && ((c = document.getElementsByTagName('head')[0]), null == c)) {\\n a.onFailure();\\n return;\\n }\\n var d = window.setTimeout(function () {\\n window[a.callback] = function () {};\\n try {\\n var b = document.getElementById(a.callback);\\n b && ((b.onerror = function () {}), c.removeChild(b));\\n } catch (d) {}\\n a.onFailure();\\n }, a.timeout);\\n 0 == a.nocallback\\n ? (window[a.callback] = function (b) {\\n window.clearTimeout(d);\\n try {\\n var f = document.getElementById(a.callback);\\n f && c.removeChild(f);\\n } catch (g) {}\\n a.onSuccess(b);\\n })\\n : (b.onload = function () {\\n window.clearTimeout(d);\\n try {\\n var b = document.getElementById(a.callback);\\n b && c.removeChild(b);\\n } catch (f) {}\\n a.onSuccess();\\n });\\n b.onerror = function () {\\n window.clearTimeout(d);\\n window[a.callback] = function () {};\\n try {\\n var b = document.getElementById(a.callback);\\n b && c.removeChild(b);\\n } catch (f) {}\\n a.onFailure();\\n };\\n c.appendChild(b);\\n },\\n sendJsonp: function (a) {\\n null == a.data && (a.data = {});\\n null == a.callback && (a.callback = 'jsonpCallback' + $_astxu.rnd());\\n null == a.nocallback && (a.nocallback = !1);\\n null == a.timeout && (a.timeout = 5e3);\\n null == a.async && (a.async = !0);\\n null == a.seq && (a.seq = !1);\\n null == a.onSuccess && (a.onSuccess = function (a) {});\\n null == a.onFailure && (a.onFailure = function () {});\\n a.src = 1 == $ASTX2.mUseJQuery ? a.url + '?v=3' : a.url + '?v=2&callback=' + a.callback;\\n if (1 == a.seq) {\\n var b = ++this.mJsonpSequence;\\n a.src += '&seq=' + b;\\n 2147483647 <= this.mJsonpSequence && (this.mJsonpSequence = 0);\\n }\\n b = this.jsonQstr(a.data);\\n 0 < b.length && (a.src += '&' + b);\\n 1 == $ASTX2.mUseJQuery ? this._send_jsonp_jquery(a) : this._send_jsonp_dom(a);\\n },\\n _get_xhr_object: function () {\\n if ('undefined' !== typeof XMLHttpRequest)\\n try {\\n return new XMLHttpRequest();\\n } catch (a) {}\\n try {\\n return new ActiveXObject('Microsoft.XMLHTTP');\\n } catch (b) {}\\n return null;\\n },\\n sendAjax: function (a) {\\n var b = this._get_xhr_object();\\n if (null == b) $_astxu.msg('[sendAjax] _get_xhr_object failed');\\n else {\\n null == a.data && (a.data = {});\\n null == a.type && (a.type = 'POST');\\n null == a.async && (a.async = !0);\\n null == a.onSuccess && (a.onSuccess = function (a) {});\\n null == a.onFailure && (a.onFailure = function (a, b) {});\\n var c = this.jsonQstr(a.data);\\n b.open(a.type, 'GET' == a.type ? a.url + '&' + c : a.url, a.async);\\n b.onreadystatechange = function () {\\n if (4 == b.readyState)\\n if (200 == b.status) a.onSuccess(b.responseText);\\n else a.onFailure(b.status);\\n };\\n null != a.timeout && (b.timeout = a.timeout);\\n b.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\\n b.send(c);\\n }\\n },\\n sendAuthAjax: function (a) {\\n var b = this._get_xhr_object();\\n const stored = JSON.parse(sessionStorage.getItem('cust-mgmt-auth') || '{}');\\n if (null == b) $_astxu.msg('[sendAjax] _get_xhr_object failed');\\n else {\\n null == a.data && (a.data = {});\\n null == a.type && (a.type = 'POST');\\n null == a.async && (a.async = !0);\\n null == a.onSuccess && (a.onSuccess = function (a) {});\\n null == a.onFailure && (a.onFailure = function (a, b) {});\\n var c = this.jsonQstr(a.data);\\n b.open(a.type, 'GET' == a.type ? a.url + '&' + c : a.url, a.async);\\n b.onreadystatechange = function () {\\n if (4 == b.readyState)\\n if (200 == b.status) a.onSuccess(b.responseText);\\n else a.onFailure(b.status);\\n };\\n null != a.timeout && (b.timeout = a.timeout);\\n b.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\\n b.setRequestHeader('Authorization', stored.key);\\n b.withCredentials = true;\\n b.send(c);\\n }\\n },\\n isACK: function (a) {\\n return a && 'ACK' == a ? !0 : !1;\\n },\\n isWinOS: function () {\\n return -1 != navigator.platform.indexOf('Win32') || -1 != navigator.platform.indexOf('Win64') ? !0 : !1;\\n },\\n isMacOS: function () {\\n return -1 != navigator.platform.indexOf('Mac') ? !0 : !1;\\n },\\n isLinuxOS: function () {\\n return -1 != navigator.platform.indexOf('Linux') ? !0 : !1;\\n },\\n isMacLinuxOS: function () {\\n return 1 == this.isMacOS() || 1 == this.isLinuxOS() ? !0 : !1;\\n },\\n hasFocused: function () {\\n var a = !1;\\n try {\\n a = document.hasFocus();\\n } catch (b) {}\\n return a;\\n },\\n addEvent: function (a, b, c) {\\n a.addEventListener ? a.addEventListener(b, c, !1) : a.attachEvent('on' + b, c);\\n },\\n removeEvent: function (a, b, c) {\\n a.removeEventListener ? a.removeEventListener(b, c) : a.detachEvent('on' + b, c);\\n },\\n getCreatedFormValue: function (a, b, c) {\\n null == c && (c = !1);\\n c = 1 == c ? document.getElementsByTagName('input') : a.getElementsByTagName('input');\\n for (var d = 0; d < c.length; d++) {\\n var e = c[d];\\n if (e && this.getnc(e.name) == b) return e;\\n }\\n c = document.createElement('input');\\n c.name = b;\\n c.type = 'hidden';\\n if ('function' === typeof $ASTX2_CUST.onCreatedFormValue) $ASTX2_CUST.onCreatedFormValue(c, b);\\n a.appendChild(c);\\n return c;\\n },\\n getHostPath: function () {\\n var a = window.location.protocol + '//' + window.location.hostname;\\n return (a += window.location.port ? ':' + window.location.port : '');\\n },\\n getnc: function (a, b) {\\n null == b && (b = '');\\n return null == a ? b : a;\\n },\\n getint: function (a, b) {\\n null == b && (b = 0);\\n return parseInt(a) || b;\\n },\\n rnd: function () {\\n var a = new Date().getTime();\\n return (a += new String(Math.floor(100 * Math.random())));\\n },\\n getKeyCode: function (a) {\\n var b = null;\\n a && (b = a.keyCode ? a.keyCode : a.which);\\n return b;\\n },\\n xorEncode: function (a, b) {\\n for (var c = '', d = new String(a), e = 0; e < d.length; e++) c += String.fromCharCode(b ^ d.charCodeAt(e));\\n return c;\\n },\\n xorDecode: function (a, b) {\\n for (var c = '', d = new String(a), e = 0; e < d.length; e++) c += String.fromCharCode(b ^ d.charCodeAt(e));\\n return c;\\n },\\n ltrim: function (a, b) {\\n for (b = this.getnc(b, ' '); a.substring(0, 1) == b; ) a = a.substring(1, a.length);\\n return a;\\n },\\n rtrim: function (a, b) {\\n for (b = this.getnc(b, ' '); a.substring(a.length - 1, a.length) == b; ) a = a.substring(0, a.length - 1);\\n return a;\\n },\\n alltrim: function (a, b) {\\n return this.ltrim(this.rtrim(a, b), b);\\n },\\n setInputFocus: function () {\\n try {\\n for (var a = document.getElementsByTagName('input'), b = 0; b < a.length; b++) {\\n var c = a[b];\\n if (c && 'hidden' != c.type) {\\n c.focus();\\n break;\\n }\\n }\\n } catch (d) {}\\n },\\n log: function (a) {\\n 'object' === typeof debuger && 'function' === typeof debuger.write\\n ? debuger.write(a)\\n : 'object' === typeof window.console && 'function' === typeof console.log && console.log(a);\\n },\\n msg: function (a) {\\n this.log(a);\\n }\\n },\\n $ASTX2_E2E = (function () {\\n var a = null,\\n b = function (a) {\\n function b(a) {\\n var c = a.target;\\n null == c && (c = a.srcElement);\\n return c;\\n }\\n function e(a) {\\n if (null == a) return null;\\n var b = a.getAttribute('e2e_inputid');\\n if (null == b || 0 >= b) return null;\\n var c = a.getAttribute('e2e_type');\\n if (null == c || 0 >= c) return null;\\n var d = a.getAttribute('e2e_inputtype');\\n if (null == d || 0 >= d) d = '';\\n var e = a.getAttribute('wizvera_key');\\n null == e && (e = '');\\n var f = {};\\n f.e2e_inputid = b;\\n f.e2e_type = c;\\n f.e2e_inputtype = d;\\n f.name = $_astxu.getnc(a.name);\\n f.form = a.form ? $_astxu.getnc(a.form.name) : '';\\n f.wizvera_key = e;\\n return f;\\n }\\n function f(a) {\\n var b = e(a);\\n if (null == b) return null;\\n b.type = $_astxu.getnc(a.type);\\n b.maxlength = $_astxu.getnc(a.getAttribute('maxlength'));\\n b.txtmsk = $_astxu.getnc(a.getAttribute('e2e_txtmsk'));\\n return b;\\n }\\n function g(a, b) {\\n a.getAttribute('e2e_type') != $ASTX2_CONST.E2ETYPE_PLAIN1 && (a.readOnly = b);\\n }\\n function h(a, b, c, d, e) {\\n 1 == n && q(a, b, c, d, e);\\n }\\n function q(b, s, d, e, f) {\\n var g = {};\\n g.pageid = $ASTX2_CONST.PAGEID;\\n if (null != s) for (var h in s) s.hasOwnProperty(h) && (g[h] = s[h]);\\n a.send_e2e_cmd(b, g, d, e, f);\\n }\\n function l(a, b) {\\n var c = '';\\n return (c = 0 == $ASTX2_CONST.E2EFORM_TAIL ? b + a : a + b);\\n }\\n function m(a, b) {\\n var c = '';\\n return (c =\\n 'password' == a.type\\n ? b == $ASTX2_CONST.E2ETYPE_CERT2\\n ? l(a.name, $ASTX2_CONST.E2EFORM_TAG2_PWD)\\n : l(a.name, $ASTX2_CONST.E2EFORM_TAG1_PWD)\\n : b == $ASTX2_CONST.E2ETYPE_CERT2\\n ? l(a.name, $ASTX2_CONST.E2EFORM_TAG2)\\n : l(a.name, $ASTX2_CONST.E2EFORM_TAG1));\\n }\\n function C() {\\n if (0 != D)\\n for (var a = document.getElementsByTagName('form'), b = 0; b < a.length; b++) {\\n var c = a[b];\\n if (null != c) {\\n var d = !1;\\n if (k & $ASTX2_CONST.OPTION_E2EFORM_TAGSET) {\\n var e = c.getAttribute(E.e2eform_tagset);\\n if (null == e || 0 >= e) d = !0;\\n } else if (k & $ASTX2_CONST.OPTION_E2EFORM_ONLY) {\\n if (null == c) e = !1;\\n else\\n for (var e = !1, f = c.getElementsByTagName('input'), g = 0; g < f.length; g++) {\\n var h = f[g];\\n if (null != h && ((h = h.getAttribute('e2e_type')), null != h && 0 < h)) {\\n e = !0;\\n break;\\n }\\n }\\n 0 == e && (d = !0);\\n }\\n if (1 != d) {\\n if ((d = $_astxu.getCreatedFormValue(c, l($ASTX2_CONST.E2EFORM_INIT, $ASTX2_CONST.E2EFORM_TAG1))))\\n d.value = F;\\n if ((d = $_astxu.getCreatedFormValue(c, l($ASTX2_CONST.E2EFORM_INIT, $ASTX2_CONST.E2EFORM_TAG2))))\\n d.value = G;\\n }\\n }\\n }\\n }\\n function V(a) {\\n var b = 0;\\n k & $ASTX2_CONST.OPTION_E2EFORM_NOENC && (b = 1);\\n a = {\\n ver: $_astxu.getint(a.ver),\\n alg: $_astxu.getint(a.alg),\\n svr: $_astxu.getnc(a.svr),\\n norsa: $_astxu.getint(a.norsa),\\n uniq: $_astxu.getnc(a.uniq),\\n utime: $_astxu.getint(a.utime),\\n ncert: $_astxu.getnc(a.ncert),\\n pageid: $ASTX2_CONST.PAGEID,\\n noenc: b\\n };\\n $_astxu.sendJsonp({\\n url: $ASTX2_COMM.mLocalServerURL + '/e2e_forminit',\\n data: a,\\n onSuccess: function (a) {\\n var b = $_astxu.getnc(a ? a.result : '');\\n 0 == $_astxu.isACK(b)\\n ? $_astxu.msg('[e2e_forminit] result=' + b)\\n : ((D = !0), (F = $_astxu.getnc(a.e2e_form1)), (G = $_astxu.getnc(a.e2e_form2)), C());\\n },\\n onFailure: function () {\\n $_astxu.msg('[e2e_forminit] failure.');\\n }\\n });\\n }\\n function W() {\\n $_astxu.sendAuthAjax({\\n url: $ASTX2_CUST.getURL($ASTX2_CUST.URL_GET_CERT),\\n onSuccess: function (a) {\\n var b = $_astxu.jsonParse(a);\\n a = $_astxu.getnc(b ? b.result : '');\\n 0 == $_astxu.isACK(a)\\n ? $_astxu.msg('[_init_e2eform] result=' + a)\\n : $ASTX2.set_cert(\\n function () {\\n V(b);\\n },\\n function () {\\n $_astxu.msg('[_init_e2eform] set_cert() failure');\\n },\\n b\\n );\\n },\\n onFailure: function (a) {\\n $_astxu.msg('[_init_e2eform] failure');\\n }\\n });\\n }\\n function H(a) {\\n var b = $_astxu.getHostPath() + $_astxu.getnc(window.location.pathname),\\n c = 0;\\n k & $ASTX2_CONST.OPTION_NOSPTDUMMY && (c = 1);\\n q(\\n 'e2e_start',\\n { browser: $ASTX2_CONST.BROWSER_VER, ver: a.ver, svr: a.svr, valg: a.valg, url: b, custcode: w, nospt: c },\\n 5e3,\\n function (a) {\\n var b = $_astxu.getnc(a ? a.result : '');\\n if ($_astxu.isACK(b)) {\\n n = 1;\\n I = $_astxu.getint(a.call_settext);\\n t = $_astxu.getint(a.call_gettext);\\n J = $_astxu.getint(a.vm_env);\\n K = $_astxu.getint(a.ak_drv);\\n try {\\n var c = document.activeElement;\\n c && x(c, !1);\\n } catch (aa) {}\\n k & $ASTX2_CONST.OPTION_E2EFORM &&\\n (3 > $_astxu.getint(a.stsvr) ? $ASTX2_COMM.errorAbort($ASTX2_CONST.ERROR_NEEDUPDATE) : W());\\n if (k & $ASTX2_CONST.OPTION_AUTOSETTEXT)\\n for (var d in u) (a = u[d]), null != a && (0 >= $_astxu.getnc(a.value).length || y(a));\\n } else n = 2;\\n },\\n function () {\\n n = 2;\\n }\\n );\\n }\\n function L(a) {\\n if (0 == $_astxu.hasFocused()) return !1;\\n if (0 == n) return !0;\\n if (1 == n) {\\n if (!1 === a) return;\\n try {\\n var b = document.activeElement;\\n b && x(b, !1);\\n } catch (c) {}\\n return !0;\\n }\\n n = 0;\\n k & $ASTX2_CONST.OPTION_NONE2E\\n ? ((a = 0),\\n k & $ASTX2_CONST.OPTION_NONE2E_ALG && (a = $ASTX2.mOptionStrings.none2e_alg),\\n H({ ver: 1, svr: '_none2e', valg: a }))\\n : $_astxu.sendAuthAjax({\\n url: $ASTX2_CUST.getURL($ASTX2_CUST.URL_GET_INIT),\\n onSuccess: function (a) {\\n a = $_astxu.jsonParse(a);\\n var b = $_astxu.getnc(a ? a.result : '');\\n $_astxu.isACK(b) ? H(a) : (n = -1);\\n },\\n onFailure: function (a) {\\n n = -1;\\n }\\n });\\n return !0;\\n }\\n function r(a) {\\n if (null != a && (a.getAttribute('e2e_type') != $ASTX2_CONST.E2ETYPE_PLAIN1 || 0 != t)) {\\n try {\\n if (a != document.activeElement) return;\\n } catch (b) {}\\n 'number' == typeof a.selectionStart\\n ? (a.selectionStart = a.selectionEnd = a.value.length)\\n : 'undefined' != typeof a.createTextRange && ((a = a.createTextRange()), a.collapse(!1), a.select());\\n }\\n }\\n function x(a, b) {\\n v = !1;\\n if (k & $ASTX2_CONST.OPTION_FIXEDTYPE && a) {\\n var c = a.getAttribute('e2e_inputid');\\n null != c && 0 < c && z[c] != a.type && (a.type = z[c]);\\n }\\n c = f(a);\\n null != c &&\\n (!0 === b && L(!1),\\n h(\\n 'e2e_focus',\\n c,\\n null,\\n function (b) {\\n g(a, !1);\\n window.setTimeout(function () {\\n r(a);\\n }, 1);\\n },\\n function () {}\\n ));\\n }\\n function M(a) {\\n var c = b(a);\\n if (null != c) {\\n if ('function' === typeof $ASTX2_CUST.onHandlerPreFocus) $ASTX2_CUST.onHandlerPreFocus(c, a);\\n x(c, !0);\\n }\\n }\\n function N(a) {\\n a = b(a);\\n if (null != a) {\\n var c = e(a);\\n if (null != c) {\\n try {\\n if (document.hasFocus() && a === document.activeElement) return;\\n } catch (f) {}\\n g(a, !0);\\n h('e2e_blur', c);\\n }\\n }\\n }\\n function O(a) {\\n var c = b(a);\\n null != c &&\\n window.setTimeout(function () {\\n r(c);\\n }, 1);\\n }\\n function y(a, b) {\\n var c = f(a);\\n if (null != c) {\\n var d = $_astxu.getnc(a.value);\\n c.text = d;\\n k & $ASTX2_CONST.OPTION_E2EFORM && (c.e2eform = 1);\\n k & $ASTX2_CONST.OPTION_E2EFORM_NOENC && (c.noenc = 1);\\n h(\\n 'e2e_settext',\\n c,\\n null,\\n function (d) {\\n var e = $_astxu.getnc(d ? d.result : '');\\n if (0 == $_astxu.isACK(e)) b && b($ASTX2_CONST.ERROR_NCK);\\n else {\\n if (k & $ASTX2_CONST.OPTION_E2EFORM) {\\n var e = m(a, c.e2e_type),\\n f = !1;\\n k & $ASTX2_CONST.OPTION_E2EFORM_ALLTRIP && (f = !0);\\n if ((e = $_astxu.getCreatedFormValue(a.form, e, f))) e.value = $_astxu.getnc(d.e2e_data);\\n }\\n b && b($ASTX2_CONST.ERROR_SUCCESS);\\n }\\n },\\n function () {\\n b && b($ASTX2_CONST.ERROR_FAILED);\\n }\\n );\\n }\\n }\\n function A(a) {\\n 'function' === typeof a.stopPropagation && a.stopPropagation();\\n 'function' === typeof a.preventDefault ? a.preventDefault() : (a.returnValue = !1);\\n }\\n function X(a, b, c) {\\n h(\\n 'e2e_gettext',\\n b,\\n null,\\n function (b) {\\n var d = $_astxu.getnc(b ? b.result : '');\\n $_astxu.isACK(d)\\n ? ((b = $_astxu.getnc(b.text)), (a.value = b), c && c($ASTX2_CONST.ERROR_SUCCESS))\\n : c && c($ASTX2_CONST.ERROR_NCK);\\n },\\n function () {\\n c && c($ASTX2_CONST.ERROR_FAILED);\\n }\\n );\\n }\\n function Y(a, b) {\\n k & $ASTX2_CONST.OPTION_E2EFORM_NOENC && (b.noenc = 1);\\n h(\\n 'e2e_formget',\\n b,\\n null,\\n function (c) {\\n var d = $_astxu.getnc(c ? c.result : '');\\n if (0 == $_astxu.isACK(d)) $_astxu.msg('[e2e_formget] ' + b.name + ',result=' + d);\\n else if (((d = a.form), null != d)) {\\n var e = m(a, b.e2e_type),\\n f = !1;\\n k & $ASTX2_CONST.OPTION_E2EFORM_ALLTRIP && (f = !0);\\n if ((d = $_astxu.getCreatedFormValue(d, e, f))) d.value = $_astxu.getnc(c.e2e_data);\\n }\\n },\\n function () {}\\n );\\n }\\n function P(a) {\\n var c = b(a);\\n if (null != c) {\\n var e = f(c);\\n if (null != e) {\\n r(c);\\n var p = $_astxu.getKeyCode(a);\\n 17 == p && (v = !0);\\n if (1 == v)\\n return (\\n 86 == p &&\\n h(\\n 'e2e_clear',\\n e,\\n null,\\n function (a) {\\n c.value = '';\\n },\\n function () {}\\n ),\\n A(a),\\n !1\\n );\\n if (1 == (16 == p || 17 == p || 18 == p ? !0 : !1)) return !0;\\n var g = !0;\\n k & $ASTX2_CONST.OPTION_E2EFORM &&\\n ((e.e2e_type != $ASTX2_CONST.E2ETYPE_CERT1 && e.e2e_type != $ASTX2_CONST.E2ETYPE_CERT2) || Y(c, e));\\n 'function' === typeof $ASTX2_CUST.onHandlerKeyDown &&\\n 0 == $ASTX2_CUST.onHandlerKeyDown(c, a) &&\\n (A(a), (g = !1));\\n 1 != t ||\\n ('password' == c.type && e.e2e_type != $ASTX2_CONST.E2ETYPE_PLAIN1) ||\\n 0 != J ||\\n (1 == g &&\\n X(c, e, function () {\\n 'password' != c.type &&\\n 'dynamic' == c.getAttribute('e2e_txtmsk') &&\\n (c.value = c.value.replace(/[^*]/g, '*').substring(0, c.value.length - 1) + c.value.slice(-1));\\n }),\\n 0 == (8 == p || 9 == p || 13 == p || 20 == p ? !0 : !1) && (A(a), (g = !1)));\\n return g;\\n }\\n }\\n }\\n function Q(a) {\\n var c = b(a);\\n null != c &&\\n (17 == $_astxu.getKeyCode(a) && (v = !1),\\n 1 == I\\n ? y(c)\\n : 0 == t &&\\n 'password' != c.type &&\\n 'dynamic' == c.getAttribute('e2e_txtmsk') &&\\n (c.value = c.value.replace(/[^*]/g, '*').substring(0, c.value.length - 1) + c.value.slice(-1)),\\n window.setTimeout(function () {\\n r(c);\\n }, 1));\\n }\\n function R(a) {\\n var c = b(a);\\n null != c &&\\n window.setTimeout(function () {\\n r(c);\\n }, 1);\\n }\\n function S(a) {\\n if ('IE' == $ASTX2_CONST.BROWSER_TYPE || 'EG' == $ASTX2_CONST.BROWSER_TYPE) {\\n var c = b(a);\\n null != c &&\\n '' != c.value &&\\n setTimeout(function () {\\n if ('' == c.value) {\\n var a = e(c);\\n null != a && h('e2e_clear', a);\\n }\\n }, 1);\\n }\\n }\\n function T(a) {\\n var c = b(a);\\n null != c &&\\n ('number' == typeof c.selectionStart\\n ? (c.selectionStart < c.value.length || c.selectionEnd < c.value.length) &&\\n window.setTimeout(function () {\\n r(c);\\n }, 1)\\n : 'undefined' != typeof c.createTextRange &&\\n document.selection &&\\n ((a = document.selection.createRange()),\\n a.moveStart('character', -c.value.length),\\n a.text.length <= c.value.length &&\\n window.setTimeout(function () {\\n r(c);\\n }, 1)));\\n }\\n function Z(a) {}\\n function U(a) {\\n h('e2e_unload');\\n }\\n var k = 0,\\n E = [],\\n $ = 0,\\n B = !1,\\n w = 0,\\n n = -1,\\n I = 0,\\n t = 0,\\n J = 0,\\n K = 1,\\n v = !1,\\n u = [],\\n z = [],\\n D = !1,\\n F = '',\\n G = '';\\n this.setOption = function (a) {\\n k |= a;\\n };\\n this.setOptionStrings = function (a) {\\n E = a;\\n };\\n this.attach = function (a, b) {\\n null != a && (w = a);\\n k & $ASTX2_CONST.OPTION_AUTOSETTEXT && (u = []);\\n k & $ASTX2_CONST.OPTION_E2EFORM && C();\\n for (var c = document.getElementsByTagName('input'), d = 0; d < c.length; d++) {\\n var e = c[d];\\n null != e && this.addObject(e);\\n }\\n q(\\n 'e2e_init',\\n null,\\n null,\\n function (a) {\\n L();\\n $_astxu.addEvent(window, 'blur', Z);\\n $_astxu.addEvent(window, 'unload', U);\\n $_astxu.addEvent(window, 'beforeunload', U);\\n b && b(!0);\\n },\\n function () {\\n b && b(!1);\\n }\\n );\\n B = !0;\\n };\\n this.addObject = function (a) {\\n if (null != a) {\\n var b = a.getAttribute('e2e_inputid');\\n if (!(null != b && 0 < b)) {\\n var c = a.getAttribute('e2e_type');\\n if (null == c || 0 >= c)\\n if (((c = a.getAttribute('e2e')), 'true' == c || 'on' == c))\\n (c = $ASTX2_CONST.E2ETYPE_CERT1), a.setAttribute('e2e_type', c);\\n else {\\n c = $ASTX2_CONST.E2ETYPE_NONE;\\n try {\\n if (\\n ('function' === typeof $ASTX2_CUST.isE2EObject &&\\n 1 == $ASTX2_CUST.isE2EObject(a) &&\\n ((c = $ASTX2_CONST.E2ETYPE_CERT1), a.setAttribute('e2e_type', c)),\\n 'function' === typeof $ASTX2_CUST.getE2Etype)\\n ) {\\n var d = $ASTX2_CUST.getE2Etype(a);\\n d && ((c = d), a.setAttribute('e2e_type', c));\\n }\\n } catch (e) {}\\n if (c == $ASTX2_CONST.E2ETYPE_NONE) return;\\n }\\n b = ++$;\\n a.setAttribute('e2e_inputid', b);\\n d = !0;\\n k & $ASTX2_CONST.OPTION_AUTOSETTEXT && 0 < a.value.length && ((d = !1), u.push(a));\\n 1 == d && (a.value = '');\\n a.setAttribute('autocomplete', 'off');\\n g(a, !0);\\n z[b] = a.type;\\n $_astxu.addEvent(a, 'focus', M);\\n $_astxu.addEvent(a, 'blur', N);\\n $_astxu.addEvent(a, 'click', O);\\n $_astxu.addEvent(a, 'keyup', Q);\\n $_astxu.addEvent(a, 'keydown', P);\\n $_astxu.addEvent(a, 'select', T);\\n $_astxu.addEvent(a, 'mouseup', S);\\n $_astxu.addEvent(a, 'mousedown', R);\\n k & $ASTX2_CONST.OPTION_E2EFORM &&\\n (c == $ASTX2_CONST.E2ETYPE_CERT1 || c == $ASTX2_CONST.E2ETYPE_CERT2) &&\\n ((b = a.form),\\n null != b &&\\n ((a = m(a, c)),\\n (c = !1),\\n k & $ASTX2_CONST.OPTION_E2EFORM_ALLTRIP && (c = !0),\\n $_astxu.getCreatedFormValue(b, a, c)));\\n }\\n }\\n };\\n this.subObject = function (a) {\\n var b = e(a);\\n if (null != b) {\\n $_astxu.removeEvent(a, 'focus', M);\\n $_astxu.removeEvent(a, 'blur', N);\\n $_astxu.removeEvent(a, 'click', O);\\n $_astxu.removeEvent(a, 'keyup', Q);\\n $_astxu.removeEvent(a, 'keydown', P);\\n $_astxu.removeEvent(a, 'select', T);\\n $_astxu.removeEvent(a, 'mouseup', S);\\n $_astxu.removeEvent(a, 'mousedown', R);\\n try {\\n a == document.activeElement && h('e2e_blur', b);\\n } catch (c) {}\\n a.value = '';\\n a.setAttribute('e2e_inputid', -1);\\n a.setAttribute('e2e_type', -1);\\n g(a, !1);\\n }\\n };\\n this.getE2EHash = function (a, b) {\\n var c = e(a);\\n null == c\\n ? b(null, $ASTX2_CONST.ERROR_PARAM)\\n : h(\\n 'e2e_gethash',\\n c,\\n null,\\n function (a) {\\n var c = $_astxu.getnc(a ? a.result : '');\\n $_astxu.isACK(c)\\n ? b($_astxu.getnc(a.hash), $ASTX2_CONST.ERROR_SUCCESS)\\n : b(null, $ASTX2_CONST.ERROR_NCK);\\n },\\n function () {\\n b(null, $ASTX2_CONST.ERROR_FAILED);\\n }\\n );\\n };\\n this.getEncText = function (a, b, c) {\\n var d = e(a);\\n d.customcode = w;\\n d.random = b;\\n null == d\\n ? c(null, null, $ASTX2_CONST.ERROR_PARAM)\\n : h(\\n 'sdk_getenctext',\\n d,\\n null,\\n function (a) {\\n var b = $_astxu.getnc(a ? a.result : '');\\n $_astxu.isACK(b)\\n ? c(d.name, $_astxu.getnc(a.getenctext), $ASTX2_CONST.ERROR_SUCCESS)\\n : c(null, null, $ASTX2_CONST.ERROR_NCK);\\n },\\n function () {\\n c(null, null, $ASTX2_CONST.ERROR_FAILED);\\n }\\n );\\n };\\n this.getE2EText = function (a, b) {\\n var c = e(a);\\n null == c\\n ? b(null, null, $ASTX2_CONST.ERROR_PARAM)\\n : c.e2e_type != $ASTX2_CONST.E2ETYPE_PLAIN2 && c.e2e_type != $ASTX2_CONST.E2ETYPE_WIZVERA\\n ? b(null, null, $ASTX2_CONST.ERROR_PARAM)\\n : h(\\n 'e2e_gettext',\\n c,\\n null,\\n function (a) {\\n var d = $_astxu.getnc(a ? a.result : '');\\n $_astxu.isACK(d)\\n ? b(c.name, $_astxu.getnc(a.text), $ASTX2_CONST.ERROR_SUCCESS)\\n : b(null, null, $ASTX2_CONST.ERROR_NCK);\\n },\\n function () {\\n b(null, null, $ASTX2_CONST.ERROR_FAILED);\\n }\\n );\\n };\\n this.setE2EText = function (a, b) {\\n y(a, b);\\n };\\n this.clearE2EText = function (a, b) {\\n var c = e(a);\\n null != c &&\\n h(\\n 'e2e_clear',\\n c,\\n null,\\n function (d) {\\n d = $_astxu.getnc(d ? d.result : '');\\n if (0 == $_astxu.isACK(d)) b && b($ASTX2_CONST.ERROR_NCK);\\n else {\\n a.value = '';\\n if (k & $ASTX2_CONST.OPTION_E2EFORM) {\\n d = m(a, c.e2e_type);\\n var e = !1;\\n k & $ASTX2_CONST.OPTION_E2EFORM_ALLTRIP && (e = !0);\\n if ((d = $_astxu.getCreatedFormValue(a.form, d, e))) d.value = '';\\n }\\n b && b($ASTX2_CONST.ERROR_SUCCESS);\\n }\\n },\\n function () {\\n b && b($ASTX2_CONST.ERROR_FAILED);\\n }\\n );\\n };\\n this.dettach = function () {\\n h('e2e_uninit');\\n B = !1;\\n };\\n this.isAttached = function () {\\n return B;\\n };\\n this.isStarted = function () {\\n return 1 == n ? !0 : !1;\\n };\\n this.checkService = function (a) {\\n var b = {};\\n b.service = $ASTX2_CONST.SERVICE_AK;\\n b.result = $ASTX2_CONST.ERROR_SUCCESS;\\n if (0 >= n) {\\n var c = this;\\n window.setTimeout(function () {\\n c.checkService(a);\\n }, 300);\\n } else\\n 1 == n && 0 == K\\n ? (b.result = $ASTX2_CONST.ERROR_FAILED)\\n : 2 == n && (b.result = $ASTX2_CONST.ERROR_FAILED),\\n a(b);\\n };\\n this.getE2EelmsForm = function (a, b, c, d) {\\n for (var f = document.getElementsByTagName('input'), g = 0; g < f.length; g++) {\\n var h = f[g];\\n if (null != h && ((h = e(h)), null != h && h.e2e_type == d)) {\\n var k = !1;\\n null == a ? (k = !0) : $_astxu.getnc(a.name) == h.form && (k = !0);\\n 0 != k && (b.push(h.e2e_inputid), c.push(h.name));\\n }\\n }\\n };\\n this.getE2EelmsID = function (a, b, c, d) {\\n for (var f = document.getElementsByTagName('input'), g = 0; g < f.length; g++) {\\n var h = f[g];\\n if (null != h) {\\n var k = e(h);\\n if (null != k && k.e2e_type == d) {\\n for (var l = !1, h = $_astxu.getnc(h.id).toLowerCase(), m = 0; m < a.length; m++)\\n if (a[m].toLowerCase() == h) {\\n l = !0;\\n break;\\n }\\n 0 != l && (b.push(k.e2e_inputid), c.push(k.name));\\n }\\n }\\n }\\n };\\n this.resetE2Evalues = function (a, b) {\\n for (var c = document.getElementsByTagName('input'), d = 0; d < c.length; d++) {\\n var f = c[d];\\n if (null != f) {\\n var g = e(f);\\n null != g &&\\n g.form == a &&\\n g.e2e_type != $ASTX2_CONST.E2ETYPE_PLAIN1 &&\\n g.e2e_type != $ASTX2_CONST.E2ETYPE_PLAIN2 &&\\n (f.value = b);\\n }\\n }\\n };\\n this.getE2Eattribute = function (a) {\\n return e(a);\\n };\\n };\\n return {\\n getInstance: function (c) {\\n null === a && (a = new b(c));\\n return a;\\n }\\n };\\n })(),\\n $ASTX2 = {\\n mUseJQuery: !0,\\n mUseAjaxHello: !1,\\n mUseAutoStart: !0,\\n mOption: 0,\\n mOptionStrings: [],\\n mE2EInst: null,\\n mLastError: $ASTX2_CONST.ERROR_SUCCESS,\\n send_e2e_cmd: function (a, b, c, d, e, f) {\\n if ('object' == typeof $ASTX2_COMM && 0 != $ASTX2_COMM.isEnable()) {\\n var g = this;\\n null == f && (f = 1);\\n var h = !1;\\n if ('e2e_focus' == a || 'e2e_blur' == a || 'e2e_gettext' == a || 'e2e_settext' == a) h = !0;\\n $_astxu.sendJsonp({\\n url: $ASTX2_COMM.mLocalServerURL + '/' + a,\\n data: b,\\n timeout: c || 5e3,\\n async: !1,\\n seq: h,\\n onSuccess: function (a) {\\n d && d(a);\\n },\\n onFailure: function () {\\n 3 > f ? g.send_e2e_cmd(a, b, c, d, e, f + 1) : e && e();\\n }\\n });\\n }\\n },\\n _send_alive: function () {\\n var a = { pageid: $ASTX2_CONST.PAGEID, focus: $_astxu.hasFocused() ? 1 : 0 };\\n $_astxu.sendJsonp({ url: $ASTX2_COMM.mLocalServerURL + '/alive', data: a });\\n },\\n send_alive_run: function () {\\n if (!($ASTX2_COMM.getDegugFlags() & $ASTX2_CONST.DEBUG_NOALIVE)) {\\n var a = this;\\n setInterval(function () {\\n a._send_alive();\\n }, $ASTX2_CONST.INTERVAL_ALIVE);\\n }\\n },\\n _hello_local_server: function (a, b, c, d, e) {\\n var f = this;\\n if (d >= c.length)\\n f.setLastError($ASTX2_CONST.ERROR_NOTINST),\\n 1 == $_astxu.isWinOS() &&\\n 1 == f.mUseAutoStart &&\\n ((f.mUseAutoStart = !1),\\n 'IE' != $ASTX2_CONST.BROWSER_TYPE &&\\n 'EG' != $ASTX2_CONST.BROWSER_TYPE &&\\n (window.location.href = 'astx://start')),\\n b();\\n else {\\n var g = e[d],\\n h = c[d],\\n q = 'https://' + (1 == $_astxu.isMacOS() ? 'lx.astxsvc.com' : '127.0.0.1') + ':' + h + '/ASTX2',\\n h = '',\\n l = document.getElementsByTagName('script');\\n if (l) for (var m = 0; m < l.length; m++) l[m].src && 0 <= l[m].src.indexOf('astx2.min.js') && (h = l[m].src);\\n l = '$Revision: 32070 $';\\n l = l.substr(11, l.length - 13);\\n m = !1;\\n 0 == $ASTX2.mUseAjaxHello && 1 == d % 2 && (m = !0);\\n 'IE' == $ASTX2_CONST.BROWSER_TYPE &&\\n 'IE10' != $ASTX2_CONST.BROWSER_VER &&\\n 'IE11' != $ASTX2_CONST.BROWSER_VER &&\\n ((m = !0), 2e3 < g && (g = 2e3));\\n d++;\\n 1 == m\\n ? $_astxu.sendJsonp({\\n url: q + '/hello',\\n data: { url: h, version: l },\\n timeout: g,\\n onSuccess: function (c) {\\n var d = $_astxu.getnc(c ? c.result : '');\\n c = $_astxu.getnc(c ? c.client_public_key : '');\\n $_astxu.isACK(d)\\n ? (($ASTX2_COMM.mLocalServerURL = q), ($ASTX2_COMM.mClientPublicKey = c), a())\\n : (f.setLastError($ASTX2_CONST.ERROR_NOTINST), b());\\n },\\n onFailure: function () {\\n f._hello_local_server(a, b, c, d, e);\\n }\\n })\\n : $_astxu.sendAjax({\\n url: q + '/hello?',\\n type: 'POST',\\n data: { url: h, version: l },\\n timeout: g,\\n onSuccess: function (c) {\\n var d = $_astxu.jsonParse(c);\\n c = $_astxu.getnc(d ? d.result : '');\\n d = $_astxu.getnc(d ? d.client_public_key : '');\\n $_astxu.isACK(c)\\n ? (($ASTX2_COMM.mLocalServerURL = q), ($ASTX2_COMM.mClientPublicKey = d), a())\\n : (f.setLastError($ASTX2_CONST.ERROR_NOTINST), b());\\n },\\n onFailure: function () {\\n f._hello_local_server(a, b, c, d, e);\\n }\\n });\\n }\\n },\\n setOption: function (a) {\\n if (null != a) {\\n !0 === a.autofocus && (this.mOption |= $ASTX2_CONST.OPTION_AUTOFOCUS);\\n !0 === a.e2eform && (this.mOption |= $ASTX2_CONST.OPTION_E2EFORM);\\n !1 === a.e2eform_enc && (this.mOption |= $ASTX2_CONST.OPTION_E2EFORM_NOENC);\\n !0 === a.e2eform_alltrip && (this.mOption |= $ASTX2_CONST.OPTION_E2EFORM_ALLTRIP);\\n !0 === a.e2eform_only && (this.mOption |= $ASTX2_CONST.OPTION_E2EFORM_ONLY);\\n !0 === a.autosettext && (this.mOption |= $ASTX2_CONST.OPTION_AUTOSETTEXT);\\n !0 === a.nospt && (this.mOption |= $ASTX2_CONST.OPTION_NOSPTDUMMY);\\n !0 === a.fixedtype && (this.mOption |= $ASTX2_CONST.OPTION_FIXEDTYPE);\\n var b = $_astxu.getnc(a.e2eform_tagset);\\n 0 < b.length &&\\n ((this.mOption |= $ASTX2_CONST.OPTION_E2EFORM_TAGSET), (this.mOptionStrings.e2eform_tagset = b));\\n b = $_astxu.getint(a.none2e_alg);\\n 0 < b && ((this.mOption |= $ASTX2_CONST.OPTION_NONE2E_ALG), (this.mOptionStrings.none2e_alg = b));\\n }\\n },\\n _get_custom_value: function () {\\n 'undefined' !== typeof $ASTX2_CUST.mUseJQuery && ($ASTX2.mUseJQuery = $ASTX2_CUST.mUseJQuery);\\n 'undefined' !== typeof $ASTX2_CUST.mUseAjaxHello && ($ASTX2.mUseAjaxHello = $ASTX2_CUST.mUseAjaxHello);\\n 'undefined' !== typeof $ASTX2_CUST.mUseAutoStart &&\\n ($ASTX2.mUseAutoStart = 1 == $ASTX2.mUseAutoStart ? $ASTX2_CUST.mUseAutoStart : !1);\\n 'undefined' !== typeof $ASTX2_CUST.E2EFORM_TAIL && ($ASTX2_CONST.E2EFORM_TAIL = $ASTX2_CUST.E2EFORM_TAIL);\\n 'undefined' !== typeof $ASTX2_CUST.E2EFORM_INIT && ($ASTX2_CONST.E2EFORM_INIT = $ASTX2_CUST.E2EFORM_INIT);\\n 'undefined' !== typeof $ASTX2_CUST.E2EFORM_TAG1 && ($ASTX2_CONST.E2EFORM_TAG1 = $ASTX2_CUST.E2EFORM_TAG1);\\n 'undefined' !== typeof $ASTX2_CUST.E2EFORM_TAG2 && ($ASTX2_CONST.E2EFORM_TAG2 = $ASTX2_CUST.E2EFORM_TAG2);\\n 'undefined' !== typeof $ASTX2_CUST.E2EFORM_TAG1_PWD &&\\n ($ASTX2_CONST.E2EFORM_TAG1_PWD = $ASTX2_CUST.E2EFORM_TAG1_PWD);\\n 'undefined' !== typeof $ASTX2_CUST.E2EFORM_TAG2_PWD &&\\n ($ASTX2_CONST.E2EFORM_TAG2_PWD = $ASTX2_CUST.E2EFORM_TAG2_PWD);\\n },\\n init: function (a, b, c, d) {\\n function e() {\\n a();\\n if (1 == $_astxu.isMacLinuxOS()) {\\n f.send_alive_run();\\n try {\\n $ASTX2_MLi.init();\\n } catch (b) {}\\n }\\n }\\n this.setLastError($ASTX2_CONST.ERROR_SUCCESS);\\n if (1 == $ASTX2_COMM.isEnable()) a();\\n else {\\n this._get_custom_value();\\n null != d && ($ASTX2.mUseAutoStart = 1 == d ? $ASTX2.mUseAutoStart : !1);\\n 1 == $ASTX2.mUseJQuery && 'undefined' === typeof jQuery && ($ASTX2.mUseJQuery = !1);\\n var f = this;\\n this.mE2EInst = $ASTX2_E2E.getInstance(this);\\n this.mE2EInst.setOption(this.mOption);\\n this.mE2EInst.setOptionStrings(this.mOptionStrings);\\n var g = [],\\n h = [];\\n null != c\\n ? ((g = [55920, 55920, 55921, 55922]), (h = [c, c, c, c]))\\n : ((g = [55920, 55920, 55921, 55922]), (h = [1e4, 1500, 750, 250]));\\n setTimeout(function () {\\n f._hello_local_server(e, b, g, 0, h);\\n }, 200);\\n }\\n },\\n _check_local_server_chk_stamp: function (a, b, c, d) {\\n var e = this;\\n $_astxu.sendAuthAjax({\\n url: $ASTX2_CUST.getURL($ASTX2_CUST.URL_CHK_STAMP),\\n data: d,\\n onSuccess: function (c) {\\n c = $_astxu.jsonParse(c);\\n c = $_astxu.getnc(c ? c.result : '');\\n $_astxu.isACK(c) ? a() : (e.setLastError($ASTX2_CONST.ERROR_NCK), b());\\n },\\n onFailure: function (a) {\\n b();\\n }\\n });\\n },\\n _check_local_server: function (a, b, c, d) {\\n var e = this;\\n null == d && (d = 1);\\n 3 < d\\n ? (e.setLastError($ASTX2_CONST.ERROR_NOCONNECT), b())\\n : $_astxu.sendJsonp({\\n url: $ASTX2_COMM.mLocalServerURL + '/check',\\n data: { method: c, url: $ASTX2_CUST.getURL($ASTX2_CUST.URL_GET_STAMP), rnd: $_astxu.rnd() },\\n onSuccess: function (f) {\\n var g = $_astxu.getnc(f ? f.result : '');\\n $_astxu.isACK(g)\\n ? ((f.rnd = $_astxu.rnd()), e._check_local_server_chk_stamp(a, b, c, f))\\n : e._check_local_server(a, b, c, d + 1);\\n },\\n onFailure: function () {\\n e.setLastError($ASTX2_CONST.ERROR_FAILED);\\n e._check_local_server(a, b, c, d + 1);\\n }\\n });\\n },\\n checkServer: function (a, b, c) {\\n this.setLastError($ASTX2_CONST.ERROR_SUCCESS);\\n 0 == $ASTX2_COMM.isEnable()\\n ? (this.setLastError($ASTX2_CONST.ERROR_NOINIT), b())\\n : (0 == $_astxu.isWinOS() ? (c = 1) : null == c && (c = 1), this._check_local_server(a, b, c));\\n },\\n _e2e_enable: function () {\\n return 0 == $_astxu.isWinOS()\\n ? (this.setLastError($ASTX2_CONST.ERROR_NOTSUPPORTED), !1)\\n : 0 == $ASTX2_COMM.isEnable()\\n ? (this.setLastError($ASTX2_CONST.ERROR_NOINIT), !1)\\n : !0;\\n },\\n resetE2E: function (a, b) {\\n this.setLastError($ASTX2_CONST.ERROR_SUCCESS);\\n if (0 == this._e2e_enable()) return !1;\\n var c = this;\\n window.setTimeout(function () {\\n c.mE2EInst.attach(a, b);\\n }, 100);\\n return !0;\\n },\\n initE2E: function (a, b) {\\n this.mOption & $ASTX2_CONST.OPTION_AUTOFOCUS && $_astxu.setInputFocus();\\n return this.resetE2E(a, b);\\n },\\n resetNonE2E: function (a, b) {\\n return this.initNonE2E(a, b);\\n },\\n initNonE2E: function (a, b) {\\n this.mE2EInst.setOption($ASTX2_CONST.OPTION_NONE2E);\\n this.mOption & $ASTX2_CONST.OPTION_AUTOFOCUS && $_astxu.setInputFocus();\\n return this.resetE2E(a, b);\\n },\\n uninitE2E: function () {\\n 1 == $_astxu.isWinOS() && 1 == $ASTX2_COMM.isEnable() && this.mE2EInst.dettach();\\n },\\n uninitNonE2E: function () {\\n this.uninitE2E();\\n },\\n set_cert: function (a, b, c, d) {\\n null == d && (d = 1);\\n var e = new String($_astxu.getnc(c['cert' + d]));\\n if (0 == e.length) 0 < d ? a() : b();\\n else {\\n var f = this;\\n $_astxu.sendJsonp({\\n url: $ASTX2_COMM.mLocalServerURL + '/set_cert',\\n data: { step: d, cert: e, pageid: $ASTX2_CONST.PAGEID },\\n onSuccess: function (e) {\\n setTimeout(function () {\\n f.set_cert(a, b, c, d + 1);\\n }, 250);\\n },\\n onFailure: function () {\\n b();\\n }\\n });\\n }\\n },\\n _e2edata_get: function (a, b, c, d) {\\n var e = this;\\n a = {\\n ver: $_astxu.getint(d.ver),\\n alg: $_astxu.getint(d.alg),\\n svr: $_astxu.getnc(d.svr),\\n norsa: $_astxu.getint(d.norsa),\\n uniq: $_astxu.getnc(d.uniq),\\n utime: $_astxu.getint(d.utime),\\n ncert: $_astxu.getnc(d.ncert),\\n pageid: $ASTX2_CONST.PAGEID,\\n ids1: a.ids1,\\n names1: a.names1,\\n ids2: a.ids2,\\n names2: a.names2\\n };\\n $_astxu.sendJsonp({\\n url: $ASTX2_COMM.mLocalServerURL + '/get_data',\\n data: a,\\n timeout: 1e4,\\n onSuccess: function (a) {\\n var d = $_astxu.getnc(a ? a.result : '');\\n $_astxu.isACK(d) ? b(a) : (e.setLastError($ASTX2_CONST.ERROR_NCK), c());\\n },\\n onFailure: function () {\\n e.setLastError($ASTX2_CONST.ERROR_FAILED);\\n c();\\n }\\n });\\n },\\n _e2edata: function (a, b, c) {\\n var d = this;\\n $_astxu.sendAuthAjax({\\n url: $ASTX2_CUST.getURL($ASTX2_CUST.URL_GET_CERT),\\n onSuccess: function (e) {\\n var f = $_astxu.jsonParse(e);\\n e = $_astxu.getnc(f ? f.result : '');\\n 0 == $_astxu.isACK(e)\\n ? (d.setLastError($ASTX2_CONST.ERROR_NCK), c())\\n : d.set_cert(\\n function () {\\n d._e2edata_get(a, b, c, f);\\n },\\n function () {\\n d.setLastError($ASTX2_CONST.ERROR_NOCONNECT);\\n c();\\n },\\n f\\n );\\n },\\n onFailure: function (a) {\\n d.setLastError($ASTX2_CONST.ERROR_FAILED);\\n c();\\n }\\n });\\n },\\n getE2EData: function (a, b, c) {\\n this.setLastError($ASTX2_CONST.ERROR_SUCCESS);\\n if (0 == this._e2e_enable()) c();\\n else {\\n var d = [],\\n e = [],\\n f = [],\\n g = [];\\n this.mE2EInst.getE2EelmsForm(a, d, e, 1);\\n this.mE2EInst.getE2EelmsForm(a, f, g, 2);\\n a = { ids1: d.join(','), names1: e.join(','), ids2: f.join(','), names2: g.join(',') };\\n this._e2edata(a, b, c);\\n }\\n },\\n getE2EDataRetry: function (a, b, c, d, e) {\\n null == d && (d = 3);\\n null == e && (e = 1e3);\\n if (0 >= d) this.setLastError($ASTX2_CONST.ERROR_EXCESS), c();\\n else {\\n var f = this;\\n this.getE2EData(\\n a,\\n function (a) {\\n b(a);\\n },\\n function () {\\n f.getLastError() == $ASTX2_CONST.ERROR_NOINIT\\n ? window.setTimeout(function () {\\n f.getE2EDataRetry(a, b, c, d - 1, e);\\n }, e)\\n : c();\\n }\\n );\\n }\\n },\\n getE2EDataIDs: function (a, b, c) {\\n this.setLastError($ASTX2_CONST.ERROR_SUCCESS);\\n if (0 == this._e2e_enable()) c();\\n else {\\n null == a && (that.setLastError($ASTX2_CONST.ERROR_PARAM), c());\\n var d = [],\\n e = [],\\n f = [],\\n g = [];\\n this.mE2EInst.getE2EelmsID(a, d, e, 1);\\n this.mE2EInst.getE2EelmsID(a, f, g, 2);\\n a = { ids1: d.join(','), names1: e.join(','), ids2: f.join(','), names2: g.join(',') };\\n this._e2edata(a, b, c);\\n }\\n },\\n setE2EData: function (a, b, c, d) {\\n null == c && (c = !0);\\n null == d && (d = '');\\n var e = $_astxu.getnc(b.e2e_data1);\\n 0 < e.length && ($_astxu.getCreatedFormValue(a, 'e2e_data1').value = e);\\n b = $_astxu.getnc(b.e2e_data2);\\n 0 < b.length && ($_astxu.getCreatedFormValue(a, 'e2e_data2').value = b);\\n 1 == c && this.mE2EInst.resetE2Evalues($_astxu.getnc(a.name), d);\\n },\\n getE2EPageID: function () {\\n return $ASTX2_CONST.PAGEID;\\n },\\n getE2EInputID: function (a) {\\n a = this.mE2EInst.getE2Eattribute(a);\\n return null == a ? null : a.e2e_inputid;\\n },\\n getE2EHash: function (a, b) {\\n this.mE2EInst.getE2EHash(a, function (a, d) {\\n b(a, d);\\n });\\n },\\n getEncText: function (a, b, c) {\\n this.mE2EInst.getEncText(a, b, function (a, b, f) {\\n c(b, f);\\n });\\n },\\n getE2EText: function (a, b) {\\n this.mE2EInst.getE2EText(a, function (a, d, e) {\\n b(d, e);\\n });\\n },\\n getE2ETextS: function (a, b) {\\n for (var c = 0, d = 0, e = [], f = 0; f < a.length; f++) {\\n var g = a[f];\\n null != g && ((g = g.getAttribute('e2e_type')), null != g && g == $ASTX2_CONST.E2ETYPE_PLAIN2 && c++);\\n }\\n if (0 == c || c != a.length) b(e, $ASTX2_CONST.ERROR_PARAM);\\n else\\n for (f = 0; f < a.length; f++)\\n this.mE2EInst.getE2EText(a[f], function (a, f, g) {\\n d >= c || (0 == g ? (e[a] = f) : (d = c), ++d >= c && b(e, g));\\n });\\n },\\n setE2EText: function (a, b) {\\n this.mE2EInst.setE2EText(a, b);\\n },\\n clearE2EText: function (a, b) {\\n this.mE2EInst.clearE2EText(a, b);\\n },\\n clearE2EForm: function (a) {\\n for (var b = document.getElementsByTagName('input'), c = 0; c < b.length; c++) {\\n var d = b[c];\\n null != d &&\\n d.form.name == a &&\\n 0 != ('text' == d.type || 'password' == d.type) &&\\n null != d.getAttribute('e2e_type') &&\\n this.mE2EInst.clearE2EText(d);\\n }\\n },\\n addE2EObject: function (a, b) {\\n null == b && (b = $ASTX2_CONST.E2ETYPE_CERT1);\\n !a || ('text' != a.type && 'password' != a.type) || (a.setAttribute('e2e_type', b), this.mE2EInst.addObject(a));\\n },\\n subE2EObject: function (a) {\\n a && this.mE2EInst.subObject(a);\\n },\\n setE2EAllExceptInputs: function () {\\n for (var a = document.getElementsByTagName('input'), b = 0; b < a.length; b++) {\\n var c = a[b];\\n null != c &&\\n 0 != ('text' == c.type || 'password' == c.type) &&\\n null == c.getAttribute('e2e_type') &&\\n c.setAttribute('e2e_type', $ASTX2_CONST.E2ETYPE_NONE);\\n }\\n },\\n killFocusE2EAllInputs: function () {\\n for (var a = document.getElementsByTagName('input'), b = 0; b < a.length; b++) {\\n var c = a[b];\\n null != c && 0 != ('text' == c.type || 'password' == c.type) && 0 < c.getAttribute('e2e_type') && c.blur();\\n }\\n },\\n _pclogdata_get: function (a, b, c, d) {\\n var e = this;\\n c = {\\n ver: $_astxu.getint(c.ver),\\n alg: $_astxu.getint(c.alg),\\n svr: $_astxu.getnc(c.svr),\\n norsa: $_astxu.getint(c.norsa),\\n uniq: $_astxu.getnc(c.uniq),\\n utime: $_astxu.getint(c.utime),\\n nlog: $_astxu.getnc(c.nlog),\\n ipaddr: $_astxu.getnc(c.ipaddr),\\n s2c_alg: $_astxu.getnc(c.s2c_alg),\\n s2c_key: $_astxu.getnc(c.s2c_key),\\n s2c_salt: $_astxu.getnc(c.s2c_salt),\\n browser: $ASTX2_CONST.BROWSER_VER,\\n pageid: $ASTX2_CONST.PAGEID,\\n opt: d\\n };\\n $_astxu.sendJsonp({\\n url: $ASTX2_COMM.mLocalServerURL + '/get_pclog',\\n data: c,\\n timeout: 1e4,\\n onSuccess: function (c) {\\n var d = $_astxu.getnc(c ? c.result : '');\\n $_astxu.isACK(d) ? a(c) : (e.setLastError($ASTX2_CONST.ERROR_NCK), b());\\n },\\n onFailure: function () {\\n e.setLastError($ASTX2_CONST.ERROR_FAILED);\\n b();\\n }\\n });\\n },\\n _pclogdata: function (a, b, c) {\\n var d = this;\\n $_astxu.sendAuthAjax({\\n url: $ASTX2_CUST.getURL($ASTX2_CUST.URL_GET_CERT),\\n data: { pclog: 1, client_public_key: $ASTX2_COMM.mClientPublicKey },\\n onSuccess: function (e) {\\n var f = $_astxu.jsonParse(e);\\n e = $_astxu.getnc(f ? f.result : '');\\n 0 == $_astxu.isACK(e)\\n ? (d.setLastError($ASTX2_CONST.ERROR_NCK), b())\\n : d.set_cert(\\n function () {\\n d._pclogdata_get(a, b, f, c);\\n },\\n function () {\\n d.setLastError($ASTX2_CONST.ERROR_NOCONNECT);\\n b();\\n },\\n f\\n );\\n },\\n onFailure: function (a) {\\n d.setLastError($ASTX2_CONST.ERROR_FAILED);\\n b();\\n }\\n });\\n },\\n getPCLOGData: function (a, b, c, d) {\\n null == d && (d = '');\\n this.setLastError($ASTX2_CONST.ERROR_SUCCESS);\\n 0 == $ASTX2_COMM.isEnable() ? (this.setLastError($ASTX2_CONST.ERROR_NOINIT), c()) : this._pclogdata(b, c, d);\\n },\\n getPCLOGDataRetry: function (a, b, c, d, e) {\\n null == d && (d = 3);\\n null == e && (e = 1e3);\\n if (0 >= d) this.setLastError($ASTX2_CONST.ERROR_EXCESS), c();\\n else {\\n var f = this;\\n this.getPCLOGData(\\n a,\\n function (a) {\\n b(a);\\n },\\n function () {\\n f.getLastError() == $ASTX2_CONST.ERROR_NOINIT\\n ? window.setTimeout(function () {\\n f.getPCLOGDataRetry(a, b, c, d - 1, e);\\n }, e)\\n : c();\\n }\\n );\\n }\\n },\\n setPCLOGData: function (a, b) {\\n var c = $_astxu.getnc(b.pclog_data);\\n 0 < c.length && ($_astxu.getCreatedFormValue(a, 'pclog_data').value = c);\\n },\\n isVmEnv: function (a, b) {\\n 0 == $ASTX2_COMM.isEnable()\\n ? a(null, $ASTX2_CONST.ERROR_NOINIT)\\n : (null == b && (b = ''),\\n $_astxu.sendJsonp({\\n url: $ASTX2_COMM.mLocalServerURL + '/is_vm_env',\\n data: { opts: b },\\n onSuccess: function (b) {\\n var d = $_astxu.getnc(b ? b.result : '');\\n $_astxu.isACK(d) ? a(b.vm_env, $ASTX2_CONST.ERROR_SUCCESS) : a(null, $ASTX2_CONST.ERROR_NCK);\\n },\\n onFailure: function () {\\n a(null, $ASTX2_CONST.ERROR_FAILED);\\n }\\n }));\\n },\\n isRemoteEnv: function (a, b) {\\n 0 == $ASTX2_COMM.isEnable()\\n ? a(null, $ASTX2_CONST.ERROR_NOINIT)\\n : (null == b && (b = ''),\\n $_astxu.sendJsonp({\\n url: $ASTX2_COMM.mLocalServerURL + '/is_remote_env',\\n data: { opts: b },\\n onSuccess: function (b) {\\n var d = $_astxu.getnc(b ? b.result : '');\\n $_astxu.isACK(d) ? a(b.remote_env, $ASTX2_CONST.ERROR_SUCCESS) : a(null, $ASTX2_CONST.ERROR_NCK);\\n },\\n onFailure: function () {\\n a(null, $ASTX2_CONST.ERROR_FAILED);\\n }\\n }));\\n },\\n isVmRemoteEnv: function (a, b) {\\n 0 == $ASTX2_COMM.isEnable()\\n ? a(null, $ASTX2_CONST.ERROR_NOINIT)\\n : (null == b && (b = ''),\\n $_astxu.sendJsonp({\\n url: $ASTX2_COMM.mLocalServerURL + '/is_vm_remote_env',\\n data: { opts: b },\\n onSuccess: function (b) {\\n var d = $_astxu.getnc(b ? b.result : '');\\n $_astxu.isACK(d) ? a(b.vm_remote_env, $ASTX2_CONST.ERROR_SUCCESS) : a(null, $ASTX2_CONST.ERROR_NCK);\\n },\\n onFailure: function () {\\n a(null, $ASTX2_CONST.ERROR_FAILED);\\n }\\n }));\\n },\\n checkService: function (a, b) {\\n a == $ASTX2_CONST.SERVICE_AK && this.mE2EInst.checkService(b);\\n },\\n setProtect: function (a, b) {\\n if (0 == $ASTX2_COMM.isEnable()) b && b($ASTX2_CONST.ERROR_NOINIT);\\n else {\\n var c = {\\n customerid: $_astxu.getnc($ASTX2_CUST.mCustomerID),\\n ak: a & $ASTX2_CONST.PROTECT_AK ? 1 : -1,\\n fw: a & $ASTX2_CONST.PROTECT_FW ? 1 : -1,\\n pb: a & $ASTX2_CONST.PROTECT_PB ? 1 : -1,\\n pcs: a & $ASTX2_CONST.PROTECT_PCS ? 1 : -1\\n };\\n $_astxu.sendJsonp({\\n url: $ASTX2_COMM.mLocalServerURL + '/set_protect',\\n data: c,\\n onSuccess: function (a) {\\n a = $_astxu.getnc(a ? a.result : '');\\n $_astxu.isACK(a) ? b && b($ASTX2_CONST.ERROR_SUCCESS) : b && b($ASTX2_CONST.ERROR_NCK);\\n },\\n onFailure: function () {\\n b && b($ASTX2_CONST.ERROR_FAILED);\\n }\\n });\\n }\\n },\\n isNotSupportOS: function (a, b) {\\n 0 == $ASTX2_COMM.isEnable()\\n ? b && b(null, $ASTX2_CONST.ERROR_NOINIT)\\n : $_astxu.sendJsonp({\\n url: $ASTX2_COMM.mLocalServerURL + '/is_not_support_os',\\n data: {\\n ak: a & $ASTX2_CONST.PROTECT_AK ? 1 : 0,\\n fw: a & $ASTX2_CONST.PROTECT_FW ? 1 : 0,\\n pb: a & $ASTX2_CONST.PROTECT_PB ? 1 : 0,\\n pcs: a & $ASTX2_CONST.PROTECT_PCS ? 1 : 0\\n },\\n onSuccess: function (a) {\\n var d = $_astxu.getnc(a ? a.result : '');\\n $_astxu.isACK(d) ? b && b(a, $ASTX2_CONST.ERROR_SUCCESS) : b && b(null, $ASTX2_CONST.ERROR_NCK);\\n },\\n onFailure: function () {\\n b && b(null, $ASTX2_CONST.ERROR_FAILED);\\n }\\n });\\n },\\n isAccessible: function (a, b, c, d, e) {\\n null == e && (e = 750);\\n if (a == $ASTX2_CONST.REQUEST_JSONP)\\n $_astxu.sendJsonp({\\n url: b,\\n nocallback: !0,\\n timeout: e,\\n onSuccess: function () {\\n c && c(b);\\n },\\n onFailure: function () {\\n d && d(b);\\n }\\n });\\n else {\\n if (\\n 0 != b.indexOf(window.location.protocol + '//' + window.location.host) &&\\n 'IE' == $ASTX2_CONST.BROWSER_TYPE\\n ) {\\n if ('IE10' != $ASTX2_CONST.BROWSER_VER && 'IE11' != $ASTX2_CONST.BROWSER_VER) {\\n d && d(b, 'CORS, not allowed browser');\\n return;\\n }\\n if (0 != b.indexOf('http:') && 0 != b.indexOf('https:')) {\\n d && d(b, 'CORS, not allowed protocol');\\n return;\\n }\\n }\\n $_astxu.sendAjax({\\n url: b,\\n type: 'GET',\\n timeout: e,\\n onSuccess: function (a) {\\n c && c(b);\\n },\\n onFailure: function (a) {\\n d && d(b, a);\\n }\\n });\\n }\\n },\\n uninit: function () {\\n this.uninitE2E();\\n $ASTX2_COMM.uninit();\\n },\\n setLastError: function (a) {\\n this.mLastError = a;\\n },\\n getLastError: function () {\\n return this.mLastError;\\n }\\n };\\n$ASTX2_MLi = {\\n init: function () {\\n setTimeout(function () {\\n var a = { pageid: $ASTX2_CONST.PAGEID, focus: $_astxu.hasFocused() ? 1 : 0 };\\n $_astxu.sendJsonp({ url: $ASTX2_COMM.mLocalServerURL + '/initForML', timeout: 1e3, data: a });\\n }, 200);\\n }\\n};\\n\\nwindow.$ASTX2 = {\\n ...$ASTX2,\\n $ASTX2_COMM,\\n $_astxu,\\n $ASTX2_E2E,\\n $ASTX2_MLi\\n};\\n\\n/* ASTx 1.3 | (C) Copyright AhnLab, Inc. | $Revision: 30833 $ */\\nconst getSubdomain = (hostname) => {\\n if (!hostname || hostname === 'localhost' || hostname === '127.0.0.1') {\\n return '';\\n }\\n\\n const parts = hostname.split('.');\\n\\n // \\uCD5C\\uC18C 3\\uAC1C \\uBD80\\uBD84\\uC774 \\uC788\\uC5B4\\uC57C \\uC11C\\uBE0C\\uB3C4\\uBA54\\uC778 \\uC874\\uC7AC (subdomain.domain.com)\\n if (parts.length < 3) {\\n return '';\\n }\\n\\n // \\uCCAB \\uBC88\\uC9F8 \\uBD80\\uBD84\\uC774 \\uC11C\\uBE0C\\uB3C4\\uBA54\\uC778\\n return parts[0] ?? '';\\n};\\n\\n/**\\n * \\uD638\\uC2A4\\uD2B8\\uBA85\\uC744 \\uAE30\\uBC18\\uC73C\\uB85C \\uD658\\uACBD\\uC744 \\uD310\\uB2E8\\uD569\\uB2C8\\uB2E4.\\n * @param hostname \\uD638\\uC2A4\\uD2B8\\uBA85\\n * @returns \\uD658\\uACBD \\uAD6C\\uBD84 \\uBB38\\uC790\\uC5F4 ('local' | 'dev' | 'stg' | 'prd')\\n */\\nconst getEnvironmentFromHostname = (hostname) => {\\n const subDomain = getSubdomain(hostname);\\n\\n // localhost \\uD310\\uB2E8\\n if (hostname === 'localhost' || hostname === '127.0.0.1' || hostname.startsWith('localhost:')) {\\n return 'local';\\n }\\n\\n // dev \\uD658\\uACBD \\uD310\\uB2E8\\n if (subDomain.includes(`dev`)) {\\n return 'dev';\\n }\\n\\n // stg \\uD658\\uACBD \\uD310\\uB2E8\\n if (subDomain.includes('stg')) {\\n return 'stg';\\n }\\n\\n // \\uAE30\\uBCF8 \\uC6B4\\uC601\\n return 'prd';\\n};\\n\\nconst getServicePath = () => {\\n if (typeof window.isStorybookEnv === 'boolean') {\\n return '';\\n } else {\\n return `/${location.pathname.split('/')[1]}`;\\n }\\n};\\n\";\n\n// src/utils/astx2/astx2_custom.js\nvar astx2_custom_default = \"/* ASTx 1.3 | (C) Copyright AhnLab, Inc. | $Revision: 30833 $ */\\r\\n/* eslint-disable */\\r\\n\\r\\nlet $ASTX2_CUST = {\\r\\n // Customer option\\r\\n /*\\r\\n\tmUseJQuery: false, \t// Whether to use JQuery.\t\\r\\n\tmUseAjaxHello: false,\\r\\n\tmUseAutoStart: false, \\r\\n\tE2EFORM_TAIL: true,\\r\\n\tE2EFORM_INIT: '_e2e_forminit',\\r\\n\tE2EFORM_TAG1: '_e2e_1__',\\r\\n\tE2EFORM_TAG2: '_e2e_2__',\\r\\n\tE2EFORM_TAG1_PWD: '_e2e_1_pwd__',\\r\\n\tE2EFORM_TAG2_PWD: '_e2e_2_pwd__',\\r\\n\t*/\\r\\n\\r\\n mCustomerID: null, // Customer ID for setProtect.\\r\\n\\r\\n // ASTX2_CUST defined values\\r\\n URL_GET_INIT: 101,\\r\\n URL_GET_CERT: 102,\\r\\n URL_GET_STAMP: 103,\\r\\n URL_CHK_STAMP: 104,\\r\\n\\r\\n setCustomerID(customerID) {\\r\\n if (customerID !== null && customerID !== 'undefined') {\\r\\n this.mCustomerID = customerID;\\r\\n }\\r\\n },\\r\\n\\r\\n getURL(type) {\\r\\n let result = '';\\r\\n const timestamp = new Date().getTime();\\r\\n\\r\\n switch (type) {\\r\\n case this.URL_GET_INIT:\\r\\n result = `${getServicePath()}/api/dea/sltn/astx2/init/get`;\\r\\n break;\\r\\n case this.URL_GET_CERT:\\r\\n result = `${getServicePath()}/api/dea/sltn/astx2/cert/get?v=${timestamp}`; // WAF \\uCC28\\uB2E8 \\uBC29\\uC9C0 (post \\uC694\\uCCAD \\uC2DC \\uAC12\\uC774 \\uC5C6\\uB294 \\uACBD\\uC6B0 \\uCC28\\uB2E8)\\r\\n break;\\r\\n case this.URL_GET_STAMP:\\r\\n result = `${getServicePath()}/api/dea/sltn/astx2/stamp/get`;\\r\\n break;\\r\\n case this.URL_CHK_STAMP:\\r\\n result = `${getServicePath()}/api/dea/sltn/astx2/stamp-chk/post`;\\r\\n break;\\r\\n } // end of switch\\r\\n\\r\\n return result;\\r\\n },\\r\\n\\r\\n isE2EObject(obj) {\\r\\n return false;\\r\\n },\\r\\n\\r\\n getE2Etype(obj) {\\r\\n return null;\\r\\n },\\r\\n\\r\\n onCreatedFormValue(obj, obj_name) {},\\r\\n\\r\\n onHandlerPreFocus(obj, event) {},\\r\\n\\r\\n onHandlerKeyDown(obj, event) {\\r\\n return true;\\r\\n },\\r\\n\\r\\n getErrorMessage(errno) {\\r\\n let message = '[ASTx] ';\\r\\n\\r\\n switch (errno) {\\r\\n case $ASTX2_CONST.ERROR_FAILED:\\r\\n message += '\\uB0B4\\uBD80 \\uC624\\uB958\\uAC00 \\uBC1C\\uC0DD\\uD558\\uC600\\uC2B5\\uB2C8\\uB2E4.';\\r\\n break;\\r\\n case $ASTX2_CONST.ERROR_NOINIT:\\r\\n message += '\\uCD08\\uAE30\\uD654\\uAC00 \\uD544\\uC694\\uD569\\uB2C8\\uB2E4.';\\r\\n break;\\r\\n case $ASTX2_CONST.ERROR_NOTINST:\\r\\n message += '\\uC124\\uCE58\\uB418\\uC5B4 \\uC788\\uC9C0 \\uC54A\\uC2B5\\uB2C8\\uB2E4.';\\r\\n break;\\r\\n case $ASTX2_CONST.ERROR_NOTSUPPORTED:\\r\\n message += '\\uC9C0\\uC6D0\\uD558\\uC9C0 \\uC54A\\uB294 OS\\uC785\\uB2C8\\uB2E4.';\\r\\n break;\\r\\n case $ASTX2_CONST.ERROR_NOCONNECT:\\r\\n message += '\\uC11C\\uBC84(Web) \\uD1B5\\uC2E0 \\uC2E4\\uD328\\uC785\\uB2C8\\uB2E4.';\\r\\n break;\\r\\n case $ASTX2_CONST.ERROR_NCK:\\r\\n message += '\\uC11C\\uBC84(Local) \\uC751\\uB2F5 \\uC2E4\\uD328\\uC785\\uB2C8\\uB2E4.';\\r\\n break;\\r\\n case $ASTX2_CONST.ERROR_ERR:\\r\\n message += '\\uC11C\\uBC84(Local) \\uB0B4\\uBD80 \\uC624\\uB958\\uC785\\uB2C8\\uB2E4.';\\r\\n break;\\r\\n case $ASTX2_CONST.ERROR_NSP:\\r\\n message += '\\uC9C0\\uC6D0\\uD558\\uC9C0 \\uB418\\uC9C0 \\uC54A\\uB294 \\uD658\\uACBD\\uC785\\uB2C8\\uB2E4.';\\r\\n break;\\r\\n case $ASTX2_CONST.ERROR_PARAM:\\r\\n message += '\\uC798\\uBABB\\uB41C \\uC778\\uC790\\uC785\\uB2C8\\uB2E4.';\\r\\n break;\\r\\n case $ASTX2_CONST.ERROR_EXCESS:\\r\\n message += '\\uC7AC\\uC2DC\\uB3C4 \\uD68C\\uC218\\uB97C \\uCD08\\uACFC \\uD558\\uC600\\uC2B5\\uB2C8\\uB2E4.';\\r\\n break;\\r\\n case $ASTX2_CONST.ERROR_NEEDUPDATE:\\r\\n message += '\\uC81C\\uD488 \\uC5C5\\uB370\\uC774\\uD2B8\\uAC00 \\uD544\\uC694\\uD569\\uB2C8\\uB2E4.';\\r\\n break;\\r\\n default:\\r\\n message += `errno=${errno}`;\\r\\n break;\\r\\n } // end of switch\\r\\n\\r\\n return message;\\r\\n },\\r\\n\\r\\n errorAbort(errno) {\\r\\n alert(this.getErrorMessage(errno));\\r\\n }\\r\\n};\\r\\n\";\n\n// src/utils/astx2-utils.ts\nfunction addE2EObject(el, e2e_type) {\n if (window.$ASTX2) {\n window.$ASTX2.addE2EObject(el, e2e_type);\n window.$ASTX2.resetE2E();\n }\n}\nfunction hasAstx2() {\n return !!window.$ASTX2;\n}\nvar loadScript = (callback) => {\n if (!window.$ASTX2) {\n console.log(\"dynamic load\");\n const script = document.createElement(\"script\");\n script.innerHTML = `\n ${astx2_min_default} \n ${astx2_custom_default}\n `;\n document.head.appendChild(script);\n script.onload = () => {\n callback && callback();\n };\n }\n};\nvar init = ({\n initSuccess = () => {\n },\n initFailure = () => {\n },\n checkServerSuccess = () => {\n },\n checkServerFailure = () => {\n }\n} = {}) => {\n window.$ASTX2.init(\n () => {\n window.$ASTX2.initE2E();\n window.$ASTX2.checkServer(\n () => {\n checkServerSuccess();\n },\n () => {\n checkServerFailure();\n console.error(`ASTX.checkServer() onFailure: errno=${window.$ASTX2.getLastError()}`);\n }\n );\n initSuccess();\n },\n () => {\n initFailure();\n if (window.$ASTX2.getLastError() === 103) {\n console.error(\"AhnLab Safe Transaction \\uD074\\uB77C\\uC774\\uC5B8\\uD2B8\\uAC00 \\uC124\\uCE58\\uB418\\uC9C0 \\uC54A\\uC558\\uC2B5\\uB2C8\\uB2E4.\");\n } else {\n console.error(`$ASTX2.init() onFailure: errno=${window.$ASTX2.getLastError()}`);\n }\n }\n );\n};\nvar initASTX2 = ({\n initSuccess = () => {\n },\n initFailure = () => {\n },\n checkServerSuccess = () => {\n },\n checkServerFailure = () => {\n }\n} = {}) => {\n if (window.$ASTX2) {\n init({\n initSuccess,\n initFailure,\n checkServerSuccess,\n checkServerFailure\n });\n }\n};\nfunction getE2EDataIDs(ids, onSuccess, onFailure = () => {\n}) {\n if (window.$ASTX2) {\n window.$ASTX2.getE2EDataIDs(\n ids,\n async (astx_data) => {\n onSuccess(astx_data);\n },\n () => {\n onFailure();\n console.log(`ASTX.getE2EData() onFailure: errno=${window.$ASTX2.getLastError()}`);\n }\n );\n }\n}\ndayjs.locale(\"ko\");\ndayjs.extend(customParseFormat);\nfunction getLastDay(year, month) {\n switch (month) {\n case 2:\n return year % 4 === 0 ? 29 : 28;\n case 4:\n case 6:\n case 9:\n case 11:\n return 30;\n default:\n return 31;\n }\n}\nvar getOneMonthLater = (value, format) => {\n const str = value ? value.split(\".\").join(\"\") : \"\";\n const date = value ? new Date(Number(str.substring(0, 4)), Number(str.substring(4, 6)) - 1, Number(str.substring(6, 8))) : /* @__PURE__ */ new Date();\n try {\n return dayjs(new Date(date.setMonth(date.getMonth() + 1))).format(format || \"YYYY.MM.DD\");\n } catch (err) {\n console.warn(err);\n return \"\";\n }\n};\nvar getDateDiff = (date1, date2) => {\n const diff1 = dayjs(date1);\n const diff2 = dayjs(date2);\n return diff1.diff(diff2, \"day\");\n};\nvar validateBirthdate = (front, back) => {\n const year = parseInt(front.slice(0, 2));\n const month = parseInt(front.slice(2, 4));\n const day = parseInt(front.slice(4, 6));\n let birthYear = 0;\n switch (back) {\n case \"1\":\n case \"2\":\n case \"5\":\n case \"6\":\n birthYear = 1900 + year;\n break;\n case \"3\":\n case \"4\":\n case \"7\":\n case \"8\":\n birthYear = 2e3 + year;\n break;\n case \"9\":\n case \"0\":\n return false;\n default:\n return false;\n }\n const birthdate = new Date(birthYear, month - 1, day);\n const currdate = /* @__PURE__ */ new Date();\n return birthdate < currdate;\n};\nfunction isDateAfter(targetDate, compareDate) {\n const targetDateTime = new Date(convertDateFormat(targetDate, \"YYYY-MM-DD\")).getTime();\n const compareDateTime = new Date(convertDateFormat(compareDate, \"YYYY-MM-DD\")).getTime();\n return targetDateTime > compareDateTime;\n}\nvar convertDateFormat = (value, format) => {\n if (!value) {\n return \"\";\n }\n return dayjs(value).format(format || \"YYYY.MM.DD\");\n};\nvar isFutureDate = (dateString, format) => {\n if (!dateString) {\n return false;\n }\n const today = dayjs().startOf(\"day\");\n const date = dayjs(dateString, format || \"YYYYMMDD\", true);\n return date.isValid() && date.isAfter(today);\n};\nvar convertDateString = ({ dateString, fromFormat, toFormat }) => {\n return dayjs(dateString, fromFormat).format(toFormat);\n};\nvar isDate = (value) => {\n return value instanceof Date && !isNaN(+value);\n};\nvar isValidDate = (dateString, format) => {\n if (!dateString) {\n return false;\n }\n const date = dayjs(dateString, format || \"YYYYMMDD\", true);\n return date.isValid();\n};\nvar getPeriodDate = (periodType) => {\n const lastMonth = dayjs().subtract(1, \"M\");\n const today = /* @__PURE__ */ new Date();\n today.setHours(0, 0, 0, 0);\n const endDate = new Date(today);\n let startDate;\n switch (periodType) {\n case \"today\":\n startDate = new Date(today);\n return { startDate, endDate };\n case \"week\":\n startDate = new Date(today);\n startDate.setDate(startDate.getDate() - 6);\n return { startDate, endDate };\n case \"month\":\n startDate = new Date(today);\n startDate.setDate(startDate.getDate() - 29);\n return { startDate, endDate };\n case \"thisWeek\":\n return { startDate: dayjs().day(0).toDate(), endDate: dayjs().day(6).toDate() };\n case \"lastWeek\":\n return {\n startDate: dayjs().subtract(1, \"w\").day(0).toDate(),\n endDate: dayjs().subtract(1, \"w\").day(6).toDate()\n };\n case \"last7Days\":\n return { startDate: dayjs().subtract(7, \"d\").toDate(), endDate: dayjs().toDate() };\n case \"thisMonth\":\n return {\n startDate: dayjs().date(1).toDate(),\n endDate: dayjs().date(dayjs().daysInMonth()).toDate()\n };\n case \"lastMonth\":\n return {\n startDate: lastMonth.date(1).toDate(),\n endDate: lastMonth.date(lastMonth.daysInMonth()).toDate()\n };\n case \"last365Days\":\n return { startDate: dayjs().subtract(365, \"d\").toDate(), endDate: dayjs().toDate() };\n default:\n return null;\n }\n};\n\n// src/utils/ga/ga.js\nvar ga_default = \"(function (w, d, s, l, i) {\\n w[l] = w[l] || [];\\n w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' });\\n let f = d.getElementsByTagName(s)[0],\\n j = d.createElement(s),\\n dl = l !== 'dataLayer' ? `&l=${l}` : '';\\n j.async = true;\\n j.src = `https://www.googletagmanager.com/gtm.js?id=${i}${dl}`;\\n f.parentNode.insertBefore(j, f);\\n})(window, document, 'script', 'dataLayer', 'GTM-PPT3LJ56');\\n\";\n\n// src/utils/ga/index.ts\nvar loadGaScript = () => {\n if (isClient()) {\n if (document.querySelector('script[src*=\"googletagmanager.com/gtm.js\"]')) {\n return;\n }\n console.log(\"ga script load dynamic\");\n const script = document.createElement(\"script\");\n script.innerHTML = `\n ${ga_default}\n `;\n document.head.appendChild(script);\n }\n};\n\nexport { MessageEventManager, addE2EObject, base64ToBlob, base64ToFile, blobToFile, checkUserAgentDspApp, convertDateFormat, convertDateString, convertTextToImg, debounce, deleteCookie, downloadBlob, drawImageResizeCentered, fileToBase64, getApiHostNameFromEnvironment, getBrowserName, getBrowserVersion, getBusinessWorkDivisionCode, getCdnHostNameFromEnvironment, getCookie, getCurrentBrowserName, getCurrentBrowserVersion, getCurrentOSName, getCurrentOSVersion, getDateDiff, getDeviceModel, getDspApiBasePathFromEnvironment, getDspExecutionEnvironment, getDudApiBasePathFromEnvironment, getE2EDataIDs, getEnvironmentFromHostname, getExt, getFormFactorFromUserAgent, getLastDay, getNlcHostFromEnvironment, getOSName, getOSVersion, getOneMonthLater, getOrCreateDeviceId, getPeriodDate, getServicePath, getSubdomain, hasAstx2, imageUrlToFile, imageUrlToFileFetch, imageUrlToFileWithCanvas, imageUrlToFileWithXMLHttpRequest, initASTX2, isAndroidDevice, isAndroidWebView, isClient, isDate, isDateAfter, isDspApp, isFpPlannerApp, isFutureDate, isIosDevice, isIosWebView, isPc, isPhone, isProductionApp, isSalesPortal, isStorybookEnv, isTablet, isValidDate, loadGaScript, loadScript, objectUrlToBase64, objectUrlToBlob, setCookie, throttle, validateBirthdate };\n//# sourceMappingURL=index.js.map\n//# sourceMappingURL=index.js.map","/* eslint-disable react-hooks/exhaustive-deps */\nimport React from 'react';\n\nimport { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { DatePicker, type DatePickerSingleHtmlProps } from 'sales-frontend-design-system';\nimport { isDate } from 'sales-frontend-utils';\n\nexport const FormDatePicker = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n defaultValue,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled' | 'defaultValue'> &\n DatePickerSingleHtmlProps) => {\n const { field, fieldState } = useController({ name, control, disabled, defaultValue });\n const [selected, setSelected] = React.useState<Date | undefined>();\n\n React.useEffect(() => {\n if (isDate(field.value) && field.value !== selected) {\n setSelected(field.value);\n }\n }, [field.value]);\n\n return (\n <DatePicker\n tabIndex={0}\n {...{\n ...props,\n ...field,\n id: field.name,\n\n defaultValue: selected,\n error: fieldState.invalid,\n onValueChange: field.onChange\n }}\n />\n );\n};\n","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue.call(this, arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn this && this[arg] || arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(this, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, this && this[key] || key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import { JSX } from 'react';\n\nexport const highlightOnSearchKeyword = (originalText: string, targetString: string) => {\n if (!targetString || !originalText?.includes(targetString)) {\n return originalText;\n }\n const replacedText: (string | JSX.Element)[] = [];\n const splitText = originalText.split(targetString);\n\n for (let i = 0; i < splitText.length; i++) {\n replacedText.push(splitText[i] || '');\n if (i < splitText.length - 1) {\n replacedText.push(\n <span key={`search-keyword-highlight-${i}-${Math.random()}`} className=\"text-primary\">\n {targetString}\n </span>\n );\n }\n }\n\n return replacedText;\n};\n\nexport const getGenderName = (genderCode?: string) => {\n switch (genderCode) {\n case '1':\n case '3':\n return '남성';\n case '2':\n case '4':\n return '여성';\n default:\n return '';\n }\n};\n","import React from 'react';\n\nimport classNames from 'classnames/bind';\nimport { AddressResponseDto } from 'sales-frontend-api/method';\nimport { IconMainUiSearch } from 'sales-frontend-assets';\nimport { Button, FormCore, Modal, RadioGroup, FormField, Radio } from 'sales-frontend-design-system';\n\nimport { highlightOnSearchKeyword } from '../../common';\n\nimport { AddressComponentType, AddressSearchDetailInputProps, AddressSearchResultProps } from './address.types';\nimport styles from './select-address.module.scss';\nimport { useSearchAddress } from './use-search-address';\n\nconst cx = classNames.bind(styles);\n\nconst { InputBox, Input } = FormCore;\n\nexport const AddressSearchInitialText = () => {\n return (\n <div className={cx('search-result-list')}>\n <p className={cx('guide-title')}>이렇게 검색해 보세요.</p>\n <ul className={cx('guide')}>\n <li>도로명/지명과 건물번호를 함께 입력해주세요</li>\n <li>예) 63로 50, 여의도동 60</li>\n <li>지명은 동/읍/면/리로 입력해주세요</li>\n <li>예) 여의도동, 역삼동</li>\n <li>우편번호 다섯자리를 모두 입력해주세요</li>\n <li>예) 07345, 06232</li>\n </ul>\n </div>\n );\n};\n\nexport const AddressSearchResult = ({\n addressSearchList,\n onChange,\n searchKeyword,\n selectedAddress\n}: AddressSearchResultProps) => {\n return (\n <div className={cx('search-result-list')}>\n <p className={cx('guide-title')}>\n 총 <span className=\"text-primary\">{addressSearchList.length}</span>건의 검색결과\n </p>\n\n {addressSearchList.length > 0 && (\n <RadioGroup\n items={addressSearchList.map((item: AddressResponseDto) => {\n return {\n value: JSON.stringify(item),\n select:\n item.roadNameBaseAddress === selectedAddress?.roadNameBaseAddress &&\n item.roadNameDetailAddress === selectedAddress?.roadNameDetailAddress &&\n item.mainBuildingName === selectedAddress?.mainBuildingName,\n label: (\n <div className={cx('search-result')}>\n <div className={cx('zipcode')}>\n {highlightOnSearchKeyword(`${item.firstPostalCode}${item.secondPostalCode}`, searchKeyword)}\n </div>\n <div className={cx('divider')}></div>\n <div className={cx('address-info')}>\n <span className={cx('address')}>\n {highlightOnSearchKeyword(\n `${item.roadNameBaseAddress} ${item.roadNameDetailAddress} ${item.mainBuildingName}`,\n searchKeyword\n )}\n </span>\n <span className={cx('old-address')}>\n {highlightOnSearchKeyword(\n `${item.landNumberBaseAddress} ${item.landNumberDetailAddress}`,\n searchKeyword\n )}\n </span>\n </div>\n </div>\n ),\n id: JSON.stringify(item)\n };\n })}\n className={cx('radio-group')}\n name=\"address-search\"\n size=\"medium\"\n defaultValue={''}\n onChange={onChange}\n />\n )}\n\n {addressSearchList.length === 0 && (\n <>\n `<span className=\"text-primary\">{searchKeyword}</span>`에 대한 검색결과가 없습니다.\n </>\n )}\n </div>\n );\n};\n\nexport const AddressSearchDetailInput = ({\n selectedStandardizationAddress,\n onDetailChange,\n step,\n onStandardizationChange,\n detailAddressInput\n}: AddressSearchDetailInputProps) => {\n const { land, road } = selectedStandardizationAddress;\n\n return (\n <div className={cx('search-result-list')}>\n <Radio.Root\n name=\"address-search-standardization\"\n size=\"medium\"\n defaultValue={JSON.stringify(selectedStandardizationAddress)}\n >\n <Radio.Item\n className={cx('radio-group')}\n value={JSON.stringify(selectedStandardizationAddress)}\n onChange={onStandardizationChange}\n >\n <div className={cx('search-result')}>\n <div\n className={cx('zipcode')}\n >{`${selectedStandardizationAddress.land?.firstPostalCode}${land?.secondPostalCode}`}</div>\n <div className={cx('divider')}></div>\n <div className={cx('address-info')}>\n <span className={cx('address')}>{`${road?.baseAddress} ${road?.detailAddress}`}</span>\n <span className={cx('old-address')}>{`${land?.baseAddress} ${land?.detailAddress}`}</span>\n </div>\n </div>\n </Radio.Item>\n </Radio.Root>\n <div className=\"d-flex gap-medium items-center\">\n <FormField.Label id=\"detail\" style={{ width: '90px' }}>\n 상세주소\n </FormField.Label>\n <FormField.TextField\n rootProps={{\n style: {\n display: 'flex',\n flex: 1\n }\n }}\n placeholder=\"상세주소 입력\"\n onChange={onDetailChange}\n size=\"small\"\n value={detailAddressInput}\n {...(step === 'detail-input' && { autoFocus: true })}\n />\n </div>\n </div>\n );\n};\n\n\n\nexport function AddressComponent({ isOpen, onClose, setValue }: AddressComponentType) {\n const {\n onAddressSearchClear,\n addressSearchKeyword,\n addressSearchStep,\n onAddressSearchNext,\n nextButtonDisabled,\n detailAddressInput,\n addressSearchList,\n onSearch,\n onKeyUp,\n onSelectChange,\n setDetail,\n search,\n searchInput,\n selectedAddress,\n onStandardizationChange,\n selectedStandardizationAddress,\n isLoading\n } = useSearchAddress({\n setValue,\n onClose,\n isOpen\n });\n\n return (\n <>\n <Modal.Root isOpen={isOpen} onClose={onClose} modalSize=\"full-screen\">\n <Modal.Overlay />\n <Modal.Content>\n <Modal.Header headerTitle=\"주소 검색\" showCloseButton />\n <Modal.Body>\n <InputBox clearable endElement={<IconMainUiSearch onClick={search} />} onClear={onAddressSearchClear}>\n <Input\n {...(addressSearchStep !== 'detail-input' && { autoFocus: true })}\n onChange={onSearch}\n onKeyUp={onKeyUp}\n value={searchInput}\n placeholder=\"지번, 도로명, 건물명, 우편번호 입력\"\n size=\"large\"\n />\n </InputBox>\n {addressSearchStep === 'initial' && <AddressSearchInitialText />}\n {!isLoading && addressSearchStep === 'search-result' && (\n <AddressSearchResult\n onChange={onSelectChange}\n addressSearchList={addressSearchList}\n searchKeyword={addressSearchKeyword}\n selectedAddress={selectedAddress}\n />\n )}\n {!isLoading &&\n addressSearchStep === 'detail-input' &&\n selectedAddress &&\n selectedStandardizationAddress && (\n <AddressSearchDetailInput\n selectedStandardizationAddress={selectedStandardizationAddress}\n onStandardizationChange={onStandardizationChange}\n onDetailChange={setDetail}\n step={addressSearchStep}\n detailAddressInput={detailAddressInput}\n />\n )}\n </Modal.Body>\n <Modal.Footer>\n {addressSearchStep !== 'initial' && (\n <Button\n onClick={onAddressSearchNext}\n variant=\"primary\"\n size=\"medium\"\n appearance=\"filled\"\n width=\"full\"\n // disabled={nextButtonDisabled}\n >\n {addressSearchStep === 'search-result' && '다음(1/2)'}\n {addressSearchStep === 'detail-input' && '확인(2/2)'}\n </Button>\n )}\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n </>\n );\n}\n","import React, { useState, useEffect, useCallback } from 'react';\n\nimport {\n AddressResponseDto,\n AddressStandardizationListRequestDto,\n AddressStandardizationResponseDto,\n useSearchAddressQuery,\n useSearchAddressStandardizationQuery,\n useSearchPostalCodeQuery\n} from 'sales-frontend-api/method';\nimport { ModalUtils, useModalState } from 'sales-frontend-design-system';\n\nimport { AddressComponent } from './address-search-modal';\nimport { AddressComponentProps, AddressComponentType, AddressStandardization, Step } from './address.types';\n\n\nexport function useSearchAddress({ setValue, onClose, isOpen }: AddressComponentType) {\n const [searchKeyword, setSearchKeyword] = useState<string>('');\n const [step, setStep] = useState<Step>('initial');\n const [selectedAddress, setSelectedAddress] = useState<AddressResponseDto>();\n const [selectedStandardizationAddress, setSelectedStandardizationAddress] = useState<AddressStandardization>();\n const [searchInput, setSearchInput] = useState<string>('');\n const [detailAddressInput, setDetailAddressInput] = useState<string>('');\n const [displayList, setDisplayList] = useState<AddressResponseDto[]>([]);\n const [searchType, setSearchType] = useState<'address' | 'postalcode'>('address');\n\n const [standardizationParams, setStandardizationParams] = useState<AddressStandardizationListRequestDto>({\n firstPostalCode: '',\n secondPostalCode: '',\n thirdPostalCode: '',\n baseAddress: '',\n detailAddress: '',\n roadNameYn: 'Y'\n });\n\n const { data: addressData, isLoading: isLoadingAddress } = useSearchAddressQuery(\n { searchKeyWord: searchKeyword },\n { enabled: !!searchKeyword && searchType === 'address' }\n );\n\n const { data: postalData, isLoading: isLoadingPostalCode } = useSearchPostalCodeQuery(\n { searchWordName: searchKeyword },\n { enabled: !!searchKeyword && searchType === 'postalcode' }\n );\n\n const { data: standardizedData } = useSearchAddressStandardizationQuery(standardizationParams, {\n enabled: !!standardizationParams?.baseAddress\n });\n\n const [nextButtonDisabled, setNextButtonDisabled] = useState<boolean>(false);\n const onNext = () => {\n if (step === 'search-result' && nextButtonDisabled) {\n ModalUtils.alert(\n '주소를 선택하지 않으면 다음 단계로 이동할 수 없습니다.\\n주소를 선택한 후 다시 시도해주세요.',\n '선택 주소 없음',\n { modalId: 'search-modal-address-no-selected' }\n );\n\n return;\n }\n\n if (step === 'search-result') {\n setStep('detail-input');\n setNextButtonDisabled(true);\n if (selectedAddress) {\n setStandardizationParams({\n firstPostalCode: selectedAddress.firstPostalCode,\n secondPostalCode: selectedAddress.secondPostalCode,\n thirdPostalCode: selectedAddress.thirdPostalCode,\n baseAddress: selectedAddress.roadNameBaseAddress,\n detailAddress: selectedAddress.roadNameDetailAddress,\n roadNameYn: 'Y'\n });\n }\n } else {\n if (selectedStandardizationAddress) {\n setValue({\n ...selectedStandardizationAddress,\n detailAddressInput\n });\n\n }\n onClose();\n\n\n }\n };\n\n /**\n * 검색어 입력창 onChange\n */\n const onSearch = (e: React.ChangeEvent<HTMLInputElement>) => {\n const typeStr = e.target.value;\n setSearchInput(typeStr);\n };\n\n /**\n * 검색\n */\n const search = () => {\n if (searchInput === '') {\n onClear();\n\n return;\n }\n if (searchInput && searchInput.length > 1) {\n const isNumeric = /^[0-9]+$/.test(searchInput);\n setSearchType(isNumeric ? 'postalcode' : 'address');\n setSearchKeyword(searchInput);\n setStep('search-result');\n setSelectedAddress(undefined);\n setDetailAddressInput('');\n setNextButtonDisabled(true);\n }\n };\n\n /**\n * 검색어 입력창 onKeyup\n */\n const onKeyUp = (e: React.KeyboardEvent<HTMLInputElement>) => {\n /**\n * 엔터키 입력시 검색\n */\n if (e.key === 'Enter') {\n search();\n }\n };\n\n /**\n * 검색결과 Radio 버튼 선택시, onChange\n */\n const onSelectChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const selected = e.target.value;\n if (selected) {\n // const adr = displayList?.find((item) => {\n // return JSON.stringify(item) === selected;\n // });\n // setSelectedAddress(adr);\n setSelectedAddress(JSON.parse(selected));\n setNextButtonDisabled(false);\n }\n };\n\n /**\n * 표준화 검색결과 Radio 버튼 선택시,\n */\n const onStandardizationChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const selected = e.target.value;\n if (selected) {\n setSelectedStandardizationAddress(JSON.parse(selected));\n setNextButtonDisabled(false);\n }\n };\n\n /**\n * 검색어입력창 초기화\n */\n const onClear = useCallback(() => {\n setSearchKeyword('');\n setSearchInput('');\n setSelectedAddress(undefined);\n setDetailAddressInput('');\n setStep('initial');\n }, []);\n\n /**\n * 상세주소 저장\n */\n const setDetail = (e: React.ChangeEvent<HTMLInputElement>) => {\n const detail = e.target.value;\n setDetailAddressInput(detail);\n if (detail) {\n setNextButtonDisabled(false);\n } else {\n setNextButtonDisabled(true);\n }\n };\n\n useEffect(() => {\n if (searchType === 'address' && addressData?.data?.addressList) {\n setDisplayList(addressData.data.addressList);\n } else if (searchType === 'postalcode' && postalData?.data?.postalCodeList) {\n console.log('transformedList', postalData.data.postalCodeList);\n const transformedList: AddressResponseDto[] = postalData.data.postalCodeList.map((p) => ({\n firstPostalCode: p.originalNumber1PostalCode,\n secondPostalCode: p.originalNumber2PostalCode,\n thirdPostalCode: p.originalNumber3PostalCode,\n roadNameBaseAddress: p.roadNameBaseAddress,\n roadNameDetailAddress: p.roadNameDetailAddress,\n landNumberBaseAddress: p.landNumberBaseAddress,\n landNumberDetailAddress: p.landNumberDetailAddress,\n mainBuildingName: p.mainBuildingName\n }));\n setDisplayList(transformedList);\n }\n }, [addressData, postalData, searchType]);\n\n useEffect(() => {\n /**\n * 모달 오픈시, 상태 초기화\n */\n if (isOpen) {\n setSelectedAddress(undefined);\n setDetailAddressInput('');\n\n setStep('initial');\n setSearchKeyword('');\n }\n }, [isOpen]);\n\n useEffect(() => {\n const road = standardizedData?.data?.addressStandardizationList[1];\n const land = standardizedData?.data?.addressStandardizationList[2];\n\n if (road && land) {\n setSelectedStandardizationAddress({\n land,\n road\n });\n }\n }, [standardizedData]);\n\n return {\n selectedStandardizationAddress,\n onStandardizationChange,\n onAddressSearchClear: onClear,\n onAddressSearchNext: onNext,\n addressSearchKeyword: searchKeyword,\n addressSearchList: displayList,\n addressSearchStep: step,\n selectedAddress,\n addressSearchOnValueChange: onSelectChange,\n nextButtonDisabled,\n detailAddressInput,\n onSearch,\n onKeyUp,\n onSelectChange,\n setDetail,\n search,\n searchInput,\n isLoading: isLoadingAddress || isLoadingPostalCode\n };\n}\n\nexport const useAddressComponent = () => {\n const [fullAddress, setFullAddress] = useState<AddressComponentProps>();\n\n const { isOpen, closeModal, openModal } = useModalState();\n\n const AddressSearchComponent = () => (\n <AddressComponent isOpen={isOpen} onClose={closeModal} setValue={setFullAddress} />\n );\n\n return {\n fullAddress,\n openModal,\n AddressSearchComponent\n };\n};\n","import {\n IconGraphicsBankABNAMRO,\n IconGraphicsBankBusan,\n IconGraphicsBankDaegu,\n IconGraphicsBankGwangju,\n IconGraphicsBankGyeongnam,\n IconGraphicsBankHankookCity,\n IconGraphicsBankHsbc,\n IconGraphicsBankJangGiSinYong,\n IconGraphicsBankJeju,\n IconGraphicsBankJeochuk,\n IconGraphicsBankJeonbuk,\n IconGraphicsBankJiyeokNonghyeop,\n IconGraphicsBankKBank,\n IconGraphicsBankKakaoBank,\n IconGraphicsBankKebHana,\n IconGraphicsBankKiup,\n IconGraphicsBankKukmin,\n IconGraphicsBankNhNonghyeop,\n IconGraphicsBankPost,\n IconGraphicsBankSaemaulGeumgo,\n IconGraphicsBankSaneop,\n IconGraphicsBankSanlim,\n IconGraphicsBankScJeil,\n IconGraphicsBankSinhan,\n IconGraphicsBankSinhyeop,\n IconGraphicsBankSuhyeop,\n IconGraphicsBankTossBank,\n IconGraphicsBankWoori,\n IconGraphicsStockBugukJeungkwon,\n IconGraphicsStockDaesinJeungkwon,\n IconGraphicsStockDbGeumyungTujajeungkwon,\n IconGraphicsStockGyoboJeungkwon,\n IconGraphicsStockHanaGeumyungTujajeungkwon,\n IconGraphicsStockHankookTujajeungkwon,\n IconGraphicsStockHanwhaTujajeungkwon,\n IconGraphicsStockHiTujajeungkwon,\n IconGraphicsStockHochulEopsum,\n IconGraphicsStockHyundaiChaJeungkwon,\n IconGraphicsStockKakaoPayJeungkwon,\n IconGraphicsStockKbJeungkwon,\n IconGraphicsStockKiwoomJeungkwon,\n IconGraphicsStockMeritzJeungkwon,\n IconGraphicsStockMiraeAssetJeungkwon,\n IconGraphicsStockNhTujajeungkwon,\n IconGraphicsStockNhWooriTujajeungkwon,\n IconGraphicsStockSamsungJeungkwon,\n IconGraphicsStockSinhanTujajeungkwon,\n IconGraphicsStockSinyeongJeungkwon,\n IconGraphicsStockSkJeungkwon,\n IconGraphicsStockYuantaJeungkwon,\n IconGraphicsStockYujinTujajeungkwon\n} from 'sales-frontend-assets';\nexport const BANK_STOCK_SEARCH_MODAL_TABS = [\n {\n value: 'bank',\n label: '은행'\n },\n {\n value: 'stock',\n label: '증권사'\n }\n];\n\nexport const BANK_STOCK_ICON_LIST = [\n {\n codeVal: '002',\n codeName: '산업은행',\n replaceName: '산업',\n icon: <IconGraphicsBankSaneop />\n },\n {\n codeVal: '003',\n codeName: '기업은행',\n replaceName: '기업',\n icon: <IconGraphicsBankKiup />\n },\n {\n codeVal: '004',\n codeName: '국민은행',\n replaceName: '국민',\n icon: <IconGraphicsBankKukmin />\n },\n {\n codeVal: '007',\n codeName: '수협은행',\n replaceName: '수협',\n icon: <IconGraphicsBankSuhyeop />\n },\n {\n codeVal: '009',\n codeName: '장기신용은행',\n replaceName: '장기신용',\n icon: <IconGraphicsBankJangGiSinYong />\n },\n {\n codeVal: '011',\n codeName: '농협은행',\n replaceName: 'NH농협',\n icon: <IconGraphicsBankNhNonghyeop />\n },\n {\n codeVal: '012',\n codeName: '농조',\n replaceName: '지역농협',\n icon: <IconGraphicsBankJiyeokNonghyeop />\n },\n {\n codeVal: '020',\n codeName: '우리은행',\n replaceName: '우리',\n icon: <IconGraphicsBankWoori />\n },\n {\n codeVal: '023',\n codeName: '스탠다드차타드',\n replaceName: 'SC제일',\n icon: <IconGraphicsBankScJeil />\n },\n {\n codeVal: '026',\n codeName: '(구)신한은행',\n replaceName: '신한',\n icon: <IconGraphicsBankSinhan />\n },\n {\n codeVal: '027',\n codeName: '한국씨티은행',\n replaceName: '한국씨티',\n icon: <IconGraphicsBankHankookCity />\n },\n {\n codeVal: '031',\n codeName: 'iM(대구)뱅크',\n replaceName: '대구',\n icon: <IconGraphicsBankDaegu />\n },\n {\n codeVal: '032',\n codeName: '부산은행',\n replaceName: '부산',\n icon: <IconGraphicsBankBusan />\n },\n {\n codeVal: '034',\n codeName: '광주은행',\n replaceName: '광주',\n icon: <IconGraphicsBankGwangju />\n },\n {\n codeVal: '035',\n codeName: '제주은행',\n replaceName: '제주',\n icon: <IconGraphicsBankJeju />\n },\n {\n codeVal: '037',\n codeName: '전북은행',\n replaceName: '전북',\n icon: <IconGraphicsBankJeonbuk />\n },\n {\n codeVal: '039',\n codeName: '경남은행',\n replaceName: '경남',\n icon: <IconGraphicsBankGyeongnam />\n },\n {\n codeVal: '045',\n codeName: '새마을금고중앙회',\n replaceName: '새마을금고',\n icon: <IconGraphicsBankSaemaulGeumgo />\n },\n {\n codeVal: '048',\n codeName: '신협',\n replaceName: '신협',\n icon: <IconGraphicsBankSinhyeop />\n },\n {\n codeVal: '050',\n codeName: '저축은행',\n replaceName: '저축',\n icon: <IconGraphicsBankJeochuk />\n },\n {\n codeVal: '054',\n codeName: 'HSBC은행',\n replaceName: 'HSBC',\n icon: <IconGraphicsBankHsbc />\n },\n {\n codeVal: '056',\n codeName: '에이비엔암로은행',\n replaceName: '에이비엔암로',\n icon: <IconGraphicsBankABNAMRO />\n },\n {\n codeVal: '064',\n codeName: '산림조합중앙회',\n replaceName: '산림조합',\n icon: <IconGraphicsBankSanlim />\n },\n {\n codeVal: '071',\n codeName: '우체국',\n replaceName: '우체국',\n icon: <IconGraphicsBankPost />\n },\n {\n codeVal: '081',\n codeName: 'KEB하나은행',\n replaceName: 'KEB하나',\n icon: <IconGraphicsBankKebHana />\n },\n {\n codeVal: '088',\n codeName: '신한은행',\n replaceName: '신한',\n icon: <IconGraphicsBankSinhan />\n },\n {\n codeVal: '089',\n codeName: '케이뱅크',\n replaceName: '케이뱅크',\n icon: <IconGraphicsBankKBank />\n },\n {\n codeVal: '090',\n codeName: '카카오뱅크',\n replaceName: '카카오뱅크',\n icon: <IconGraphicsBankKakaoBank />\n },\n {\n codeVal: '092',\n codeName: '토스뱅크',\n replaceName: '토스뱅크',\n icon: <IconGraphicsBankTossBank />\n },\n {\n codeVal: '209',\n codeName: '유안타증권',\n replaceName: '유안타증권',\n icon: <IconGraphicsStockYuantaJeungkwon />\n },\n {\n codeVal: '218',\n codeName: 'KB증권',\n replaceName: 'KB증권',\n icon: <IconGraphicsStockKbJeungkwon />\n },\n {\n codeVal: '230',\n codeName: '미래에셋증권',\n replaceName: '미래에셋증권',\n icon: <IconGraphicsStockMiraeAssetJeungkwon />\n },\n {\n codeVal: '238',\n codeName: '대우증권',\n replaceName: '대우증권',\n icon: <IconGraphicsStockMiraeAssetJeungkwon />\n },\n {\n codeVal: '240',\n codeName: '삼성증권',\n replaceName: '삼성증권',\n icon: <IconGraphicsStockSamsungJeungkwon />\n },\n {\n codeVal: '243',\n codeName: '한국투자증권',\n replaceName: '한국투자증권',\n icon: <IconGraphicsStockHankookTujajeungkwon />\n },\n {\n codeVal: '247',\n codeName: '우리투자증권',\n replaceName: 'NH(우리)투자증권',\n icon: <IconGraphicsStockNhWooriTujajeungkwon />\n },\n {\n codeVal: '261',\n codeName: '교보증권',\n replaceName: '교보증권',\n icon: <IconGraphicsStockGyoboJeungkwon />\n },\n {\n codeVal: '262',\n codeName: '하이투자증권',\n replaceName: '하이투자증권',\n icon: <IconGraphicsStockHiTujajeungkwon />\n },\n {\n codeVal: '263',\n codeName: '현대차투자증권',\n replaceName: '현대차증권',\n icon: <IconGraphicsStockHyundaiChaJeungkwon />\n },\n {\n codeVal: '264',\n codeName: '키움증권',\n replaceName: '키움증권',\n icon: <IconGraphicsStockKiwoomJeungkwon />\n },\n {\n codeVal: '266',\n codeName: 'SK증권',\n replaceName: 'SK증권',\n icon: <IconGraphicsStockSkJeungkwon />\n },\n {\n codeVal: '267',\n codeName: '대신증권',\n replaceName: '대신증권',\n icon: <IconGraphicsStockDaesinJeungkwon />\n },\n {\n codeVal: '269',\n codeName: '한화증권',\n replaceName: '한화투자증권',\n icon: <IconGraphicsStockHanwhaTujajeungkwon />\n },\n {\n codeVal: '270',\n codeName: '하나대투증권',\n replaceName: '하나금융투자증권',\n icon: <IconGraphicsStockHanaGeumyungTujajeungkwon />\n },\n {\n codeVal: '278',\n codeName: '신한금융투자',\n replaceName: '신한금융투자증권',\n icon: <IconGraphicsStockSinhanTujajeungkwon />\n },\n {\n codeVal: '279',\n codeName: '동부증권',\n replaceName: 'DB금융투자증권',\n icon: <IconGraphicsStockDbGeumyungTujajeungkwon />\n },\n {\n codeVal: '280',\n codeName: '유진투자증권',\n replaceName: '유진투자증권',\n icon: <IconGraphicsStockYujinTujajeungkwon />\n },\n {\n codeVal: '287',\n codeName: '메리츠증권',\n replaceName: '메리츠증권',\n icon: <IconGraphicsStockMeritzJeungkwon />\n },\n {\n codeVal: '288',\n codeName: '카카오페이증권',\n replaceName: '카카오페이증권',\n icon: <IconGraphicsStockKakaoPayJeungkwon />\n },\n {\n codeVal: '289',\n codeName: 'NH투자증권',\n replaceName: 'NH투자증권',\n icon: <IconGraphicsStockNhTujajeungkwon />\n },\n {\n codeVal: '290',\n codeName: '부국증권',\n replaceName: '부국증권',\n icon: <IconGraphicsStockBugukJeungkwon />\n },\n {\n codeVal: '291',\n codeName: '신영증권',\n replaceName: '신영증권',\n icon: <IconGraphicsStockSinyeongJeungkwon />\n }\n];\n","import { CodeDto, useSearchCommonCodeQuery } from 'sales-frontend-api/method';\n\nexport function useBankStockSearch({ onSelect }: { onSelect: (item: CodeDto) => void }) {\n const { data } = useSearchCommonCodeQuery({ commonCodeId: 'BANK_ORGN_DVSN_CODE' });\n const bankStockList = data?.data?.commonCodeList?.[0]?.codeList;\n\n const handleSelect = (item: CodeDto) => {\n onSelect(item);\n };\n\n const bankList = bankStockList?.filter((bank) => bank.codeVal?.startsWith('0'));\n\n const stockList = bankStockList?.filter((stock) => stock.codeVal?.startsWith('2'));\n\n return {\n bankList,\n stockList,\n handleSelect\n };\n}\n","import { IconGraphicsStockHochulEopsum } from 'sales-frontend-assets';\nimport { Modal } from 'sales-frontend-design-system';\n\nimport styles from './bank-stock-search-modal.module.scss';\nimport { BANK_STOCK_ICON_LIST } from './constants';\nimport { useBankStockSearch } from './use-bank-stock-search';\n\nimport type { BankStockSearchModalProps } from './types';\nimport type { CodeDto } from 'sales-frontend-api/method';\n\nfunction chunk<T>(array: T[], size: number): T[][] {\n return Array.from({ length: Math.ceil(array.length / size) }, (v, i) => array.slice(i * size, i * size + size));\n}\n\nexport function BankStockSearchModal({ open, onClose, onSelect }: BankStockSearchModalProps) {\n const { bankList, stockList, handleSelect } = useBankStockSearch({\n onSelect\n });\n\n const renderItems = (list: CodeDto[]) => {\n const chunkedList = chunk(list, 5);\n\n return (\n <div className={styles['list-container']}>\n {chunkedList.map((chunk, chunkIndex) => (\n <div key={chunkIndex} className={styles.row}>\n {chunk.map((item) => {\n const findItem = BANK_STOCK_ICON_LIST.find((icon) => icon.codeVal === item.codeVal);\n\n /**\n * 서버에서 받은 목록중 icon과 치환이름이 없는 케이스 처리\n * 기본 아이콘, 기본 이름 노출\n */\n const convertedItem = findItem\n ? findItem\n : {\n icon: <IconGraphicsStockHochulEopsum />,\n replaceName: item.codeName\n };\n\n return (\n <div key={`${item.codeVal}-${chunkIndex}`} className={styles.item} onClick={() => handleSelect(item)}>\n <div className={styles['icon-wrapper']}>{convertedItem?.icon}</div>\n <span> {convertedItem?.replaceName}</span>\n </div>\n );\n })}\n {chunk.length < 5 &&\n Array.from({ length: 5 - chunk.length }).map((_, i) => (\n <div key={`placeholder-${chunkIndex}-${i}`} className={styles.item} style={{ visibility: 'hidden' }} />\n ))}\n </div>\n ))}\n </div>\n );\n };\n\n return (\n <Modal.Root isOpen={open} onClose={onClose} modalSize=\"full-screen\">\n <Modal.Overlay />\n <Modal.Content>\n <Modal.Header headerTitle=\"은행/증권사 선택\" showCloseButton />\n <Modal.Body>\n <div className={styles.container}>\n <div className={styles.section}>\n <p className={styles['section-title']}>은행사</p>\n {renderItems(bankList || [])}\n </div>\n <div className={styles.section}>\n <p className={styles['section-title']}>증권사</p>\n {renderItems(stockList || [])}\n </div>\n </div>\n </Modal.Body>\n </Modal.Content>\n </Modal.Root>\n );\n}\n","import { JSX, useEffect, useState } from 'react';\n\nimport { useSearchCustomerListQuery, type CustomerDto } from 'sales-frontend-api/method';\nimport { DropDownProps, useDropDown } from 'sales-frontend-design-system';\n\n// const mockCustomers: CustomerDto[] = [\n// { customerId: '1', customerName: '김한화', birthDate: '1999.01.01', genderCode: '남성' },\n// {\n// customerId: '2',\n// customerName: '김한화생명',\n// birthDate: '1989.01.01',\n// genderCode: '여성',\n// baseAddress: '서울시 마포구'\n// },\n// {\n// customerId: '3',\n// customerName: '김한화손해보험',\n// birthDate: '1999.01.01',\n// genderCode: '남성',\n// baseAddress: '서울시 마포구'\n// }\n// ]; \n\ninterface UseCustomerSearchReturn {\n triggerRef: ReturnType<typeof useDropDown>['triggerRef'];\n isOpen: ReturnType<typeof useDropDown>['isOpen'];\n setIsOpen: ReturnType<typeof useDropDown>['setIsOpen'];\n DropDown: ReturnType<typeof useDropDown>['DropDown'];\n searchInput: string;\n customerList: CustomerDto[];\n searchKeyword: string;\n onSearchInputChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onKeyUp: (e: React.KeyboardEvent<HTMLInputElement>) => void;\n search: () => void;\n onClear: () => void;\n handleSelectItem: (customer: CustomerDto) => void;\n selectedCustomer: CustomerDto | null;\n setSearchInput: (searchInput: string) => void;\n setCustomerList: (customerList: CustomerDto[]) => void;\n setSearchKeyword: (searchKeyword: string) => void;\n}\n\nexport const useCustomerSearch = (onSelect?: (customer: CustomerDto) => void): UseCustomerSearchReturn => {\n const { triggerRef, isOpen, setIsOpen, DropDown } = useDropDown();\n const [searchKeyword, setSearchKeyword] = useState('');\n const [searchInput, setSearchInput] = useState('');\n const [customerList, setCustomerList] = useState<CustomerDto[]>([]);\n const [selectedCustomer, setSelectedCustomer] = useState<CustomerDto | null>(null);\n\n const { data } = useSearchCustomerListQuery({ customerName: searchKeyword });\n\n const search = () => {\n if (searchInput.length >= 2) {\n setSearchKeyword(searchInput);\n setIsOpen(true);\n } else {\n setCustomerList([]);\n setSearchKeyword('');\n setIsOpen(false);\n }\n };\n\n const onKeyUp = (e: React.KeyboardEvent<HTMLInputElement>) => {\n /**\n * 2음절 완성시 검색\n */\n const currentValue = (e.target as HTMLInputElement).value;\n if (currentValue.length === 0 || (currentValue.slice(-1).normalize('NFD').length > 1) && currentValue.length > 1) {\n search();\n }\n\n };\n\n const onSearchInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setSearchInput(e.target.value);\n };\n\n const onClear = () => {\n setSearchInput('');\n setSearchKeyword('');\n setCustomerList([]);\n setSelectedCustomer(null);\n setIsOpen(false);\n };\n\n const handleSelectItem = (customer: CustomerDto) => {\n setSelectedCustomer(customer);\n setSearchInput(customer.customerName || '');\n setCustomerList([]);\n setIsOpen(false);\n if (onSelect) {\n onSelect(customer);\n }\n };\n\n useEffect(() => {\n const filtered = data?.data?.custList?.filter((c) =>\n c.customerName?.toLowerCase().includes(searchInput.toLowerCase())\n );\n setCustomerList(filtered || []);\n }, [data, searchInput]);\n\n return {\n triggerRef,\n isOpen,\n DropDown,\n searchInput,\n customerList,\n searchKeyword,\n onSearchInputChange,\n onKeyUp,\n search,\n onClear,\n handleSelectItem,\n selectedCustomer,\n setSearchInput,\n setCustomerList,\n setSearchKeyword,\n setIsOpen\n };\n};\n","import classNames from 'classnames/bind';\nimport { IconMainUiSearch } from 'sales-frontend-assets';\nimport { FormCore, List, ListItem } from 'sales-frontend-design-system';\nimport { convertDateString } from 'sales-frontend-utils';\n\nimport { getGenderName, highlightOnSearchKeyword } from '../../common';\n\nimport styles from './customer-search.module.scss';\nimport { useCustomerSearch } from './use-customer-search';\n\nimport type { CustomerSearchProps } from 'sales-frontend-api/method';\n\nconst cx = classNames.bind(styles);\n\nconst { InputBox, Input } = FormCore;\nexport const CustomerSearch = ({\n onSelectCustomer,\n onSearchClear,\n placeholder,\n rootProps,\n size = 'large',\n ...props\n}: CustomerSearchProps) => {\n const {\n triggerRef,\n isOpen,\n DropDown,\n searchInput,\n customerList,\n searchKeyword,\n onSearchInputChange,\n onKeyUp,\n search,\n onClear,\n handleSelectItem\n } = useCustomerSearch(onSelectCustomer);\n\n const handleClear = () => {\n onClear();\n onSearchClear?.();\n };\n\n return (\n <div className={cx('container')}>\n <div className={cx('search-bar')}>\n <InputBox\n {...rootProps}\n endElement={<IconMainUiSearch Click={search} style={{ width: '20px', height: '20px' }} />}\n onClear={handleClear}\n clearable\n >\n <Input\n {...props}\n onChange={onSearchInputChange}\n onKeyUp={onKeyUp}\n value={searchInput}\n placeholder={placeholder || '고객명을 두 글자 이상 입력해주세요.'}\n size={size}\n ref={triggerRef}\n />\n </InputBox>\n </div>\n {isOpen && customerList.length > 0 && (\n <DropDown>\n <div className={cx('result-container')}>\n <List>\n {customerList.map((customer, index) => (\n <ListItem\n key={`cust-item-${customer.customerId}-${index}`}\n onClick={() => handleSelectItem(customer)}\n selectable\n >\n <div className={cx('customer-item')}>\n <div className={cx('name')}>\n {highlightOnSearchKeyword(customer.customerName || '', searchKeyword)}\n </div>\n <div className={cx('details')}>\n <span>\n {customer.birthDate &&\n convertDateString({\n dateString: customer.birthDate,\n fromFormat: 'YYYYMMDD',\n toFormat: 'YYYY.MM.DD'\n })}\n </span>\n <span className={cx('separator')}>|</span>\n <span>{getGenderName(customer.genderCode)}</span>\n {customer.baseAddress && (\n <>\n <span className={cx('separator')}>|</span>\n <span>{customer.baseAddress}</span>\n </>\n )}\n </div>\n </div>\n </ListItem>\n ))}\n </List>\n </div>\n </DropDown>\n )}\n </div>\n );\n};\n","import classNames from 'classnames/bind';\nimport { IconMainUiSearch } from 'sales-frontend-assets';\nimport { FormCore, List, ListItem, Modal } from 'sales-frontend-design-system';\nimport { convertDateString } from 'sales-frontend-utils';\n\nimport { getGenderName, highlightOnSearchKeyword } from '../../common';\n\nimport styles from './customer-search.module.scss';\nimport { useCustomerSearch } from './use-customer-search';\n\nimport type { CustomerDto } from 'sales-frontend-api/method';\nconst cx = classNames.bind(styles);\n\nconst { InputBox, Input } = FormCore;\ninterface Props {\n isOpen: boolean;\n closeModal: () => void;\n onSelect?: (customer: CustomerDto) => void;\n onSearchClear?: () => void;\n}\nexport function CustomerSearchModal({ isOpen, closeModal, onSelect, onSearchClear }: Props) {\n const {\n triggerRef,\n searchInput,\n customerList,\n searchKeyword,\n onSearchInputChange,\n setSearchKeyword,\n setSearchInput,\n setCustomerList,\n onKeyUp,\n search,\n onClear,\n handleSelectItem\n } = useCustomerSearch(onSelect);\n\n const handleClear = () => {\n onClear();\n onSearchClear?.();\n };\n\n return (\n <Modal.Root isOpen={isOpen} onClose={closeModal} modalSize=\"full-screen\">\n <Modal.Overlay />\n <Modal.Content>\n <Modal.Header headerTitle=\"고객 검색\" showCloseButton />\n <Modal.Body>\n <InputBox endElement={<IconMainUiSearch onClick={search} />} onClear={handleClear} clearable>\n <Input\n onChange={onSearchInputChange}\n onKeyUp={onKeyUp}\n value={searchInput}\n placeholder=\"고객명을 두 글자 이상 입력해주세요.\"\n size=\"large\"\n ref={triggerRef}\n />\n </InputBox>\n {searchKeyword && (\n <p className={cx('result-count')}>\n 총 <span className=\"text-primary\">{customerList.length}</span>건의 검색결과\n </p>\n )}\n {searchKeyword && customerList.length === 0 && (\n <div className={cx('search-result')}>\n `<span className=\"text-primary\">{searchKeyword}</span>`에 대한 검색결과가 없습니다.\n </div>\n )}\n {searchKeyword && customerList.length > 0 && (\n <div>\n {customerList.length > 0 && (\n <List rootProps={{ style: { width: '100%' } }}>\n {customerList.map((customer, index) => (\n <ListItem\n key={`cust-item-${customer.customerId}-${index}`}\n onClick={() => {\n handleSelectItem(customer);\n setSearchKeyword('');\n setSearchInput('');\n setCustomerList([]);\n closeModal();\n }}\n selectable\n >\n <div className={cx('customer-item', 'modal')}>\n <div className={cx('name')}>\n {highlightOnSearchKeyword(customer.customerName || '', searchKeyword)}\n </div>\n <div className={cx('details', 'modal')}>\n <span>\n {customer.birthDate &&\n convertDateString({\n dateString: customer.birthDate,\n fromFormat: 'YYYYMMDD',\n toFormat: 'YYYY.MM.DD'\n })}\n </span>\n <span className={cx('separator')}>|</span>\n <span>{getGenderName(customer.genderCode)}</span>\n {customer.baseAddress && (\n <>\n <span className={cx('separator')}>|</span>\n <span>{customer.baseAddress}</span>\n </>\n )}\n </div>\n </div>\n </ListItem>\n ))}\n </List>\n )}\n </div>\n )}\n </Modal.Body>\n </Modal.Content>\n </Modal.Root>\n );\n}\n","import React, { useEffect, useState } from 'react';\n\nimport classNames from 'classnames/bind';\nimport { NationalityResponseDto } from 'sales-frontend-api/method';\nimport { IconMainUiSearch } from 'sales-frontend-assets';\nimport { FormCore, Modal, ModalBaseProps } from 'sales-frontend-design-system';\n\nimport { highlightOnSearchKeyword } from '../../common';\n\nimport { NationalitySearchResultProps } from './nationality.types';\nimport styles from './select-nationality.module.scss';\nimport { useSearchNationality } from './use-search-nationality';\n\nconst cx = classNames.bind(styles);\n\nconst { InputBox, Input } = FormCore;\n\ninterface NationalitySearchInitialTextProps {\n setSearchKeyword: (keyword: string) => void;\n setSearchInput: (keyword: string) => void;\n}\n\n/**\n * 자주 찾는 국적 목록\n * 대한민국, 중국, 베트남, 미국, 러시아\n */\nconst favoriteList: NationalityResponseDto[] = [\n {\n nationalityCode: 'KR',\n nationalityCodeName: '대한민국',\n isoNumberNationalityCode: '410',\n nationalityEnglishAbbreviationName: 'KOR'\n },\n {\n nationalityCode: 'CN',\n nationalityCodeName: '중국',\n isoNumberNationalityCode: '156',\n nationalityEnglishAbbreviationName: 'CHN'\n },\n {\n nationalityCode: 'VN',\n nationalityCodeName: '베트남',\n isoNumberNationalityCode: '704',\n nationalityEnglishAbbreviationName: 'VNM'\n },\n {\n nationalityCode: 'US',\n nationalityCodeName: '미국',\n isoNumberNationalityCode: '840',\n nationalityEnglishAbbreviationName: 'USA'\n },\n {\n nationalityCode: 'RU',\n nationalityCodeName: '러시아',\n isoNumberNationalityCode: '643',\n nationalityEnglishAbbreviationName: 'RUS'\n }\n];\n\nexport const NationalitySearchInitialText = ({\n setSearchInput,\n setSearchKeyword\n}: NationalitySearchInitialTextProps) => {\n const set = (keyword: string) => {\n setSearchInput(keyword);\n setSearchKeyword(keyword);\n };\n\n return (\n <div className={cx('favorite-container')}>\n <p className={cx('favorite-title')}>많이 찾는 국적</p>\n <ul className={cx('favorite')}>\n {favoriteList.map((item, index) => (\n <li key={`${item.nationalityCode}-${index}`} onClick={() => set(item.nationalityCodeName)}>\n <button>{item.nationalityCodeName}</button>\n </li>\n ))}\n </ul>\n </div>\n );\n};\n\nexport const NationalitySearchResult = ({ nationalityList, searchKeyWord, onSelect, onConfirm }: NationalitySearchResultProps) => {\n const [filterList, setFilterList] = useState<NationalityResponseDto[]>([]);\n\n useEffect(() => {\n const filterList = nationalityList.filter((item) => item.nationalityCodeName.includes(searchKeyWord)) || [];\n setFilterList(filterList);\n }, [nationalityList, searchKeyWord]);\n\n return (\n <div className=\"mt-4\">\n <p className={cx('favorite-title')}>\n 총 <span className=\"text-primary\">{filterList.length}</span>건의 검색결과\n </p>\n <ul className={cx('favorite')}>\n {filterList.length > 0 &&\n filterList.map((item, index) => {\n return (\n <li key={`${index}-${item.nationalityCode}`} onClick={() => {\n onSelect(item.nationalityCodeName);\n onConfirm();\n }}>\n <button>{highlightOnSearchKeyword(item.nationalityCodeName, searchKeyWord)}</button>\n </li>\n );\n })}\n </ul>\n {filterList.length === 0 && (\n <div className={cx('search-result')}>\n `<span className=\"text-primary\">{searchKeyWord}</span>`에 대한 검색결과가 없습니다.\n </div>\n )}\n </div>\n );\n};\n\nexport interface NationalitySearchModalProps extends ModalBaseProps {\n onClose: () => void;\n isOpen: boolean;\n searchKeyword: string;\n nationalityList: string[];\n filterList: string[];\n onClear: () => void;\n onSearch: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onKeyUp: (e: React.KeyboardEvent<HTMLInputElement>) => void;\n setSelectedNationality: (nationality: string) => void;\n}\n\ninterface Props {\n setValue: (nationality: NationalityResponseDto) => void;\n onClose: () => void;\n isOpen: boolean;\n onConfirm: () => void;\n}\n\nexport function NationalityComponent({ isOpen, onClose, setValue, onConfirm }: Props) {\n const {\n search,\n onClear,\n searchKeyWord,\n onKeyUp,\n onSearch,\n searchList,\n searchInput,\n onSelect,\n setSearchInput,\n setSearchKeyword\n } = useSearchNationality({\n setValue,\n onClose,\n isOpen\n });\n\n return (\n <>\n <Modal.Root isOpen={isOpen} onClose={onClose} modalSize=\"full-screen\">\n <Modal.Overlay />\n <Modal.Content>\n <Modal.Header headerTitle=\"국적 검색\" showCloseButton />\n <Modal.Body>\n <InputBox\n clearable\n endElement={\n <button>\n <IconMainUiSearch onClick={search} />\n </button>\n }\n onClear={onClear}\n className={cx('search-input')}\n >\n <Input\n onChange={onSearch}\n onKeyUp={onKeyUp}\n placeholder=\"국적 입력\"\n size=\"large\"\n value={searchInput}\n />\n </InputBox>\n {!searchKeyWord && (\n <NationalitySearchInitialText setSearchInput={setSearchInput} setSearchKeyword={setSearchKeyword} />\n )}\n {searchKeyWord && (\n <NationalitySearchResult nationalityList={searchList} searchKeyWord={searchKeyWord} onSelect={onSelect} onConfirm={onConfirm} />\n )}\n </Modal.Body>\n </Modal.Content>\n </Modal.Root>\n </>\n );\n}\n","import React, { useState, useEffect, useCallback } from 'react';\n\nimport { NationalityResponseDto, useSearchNationalityQuery } from 'sales-frontend-api/method';\nimport { useModalState } from 'sales-frontend-design-system';\n\nimport { NationalityComponent } from './nationality-search-modal';\ninterface Props {\n setValue: (nationality: NationalityResponseDto) => void;\n onClose: () => void;\n isOpen: boolean;\n}\n\nexport function useSearchNationality({ setValue, onClose, isOpen }: Props) {\n const [searchKeyWord, setSearchKeyword] = useState<string>('');\n const [selectedNationality, setSelectedNationality] = useState<string>();\n const [searchInput, setSearchInput] = useState<string>('');\n\n const { data } = useSearchNationalityQuery({ searchKeyWord });\n const searchList = data?.data.nationalityList || [];\n\n /**\n * 검색어 입력창 onChange\n */\n const onSearch = (e: React.ChangeEvent<HTMLInputElement>) => {\n const typeStr = e.target.value;\n setSearchInput(typeStr);\n };\n\n /**\n * 검색\n */\n const search = () => {\n if (searchInput === '') {\n onClear();\n\n return;\n }\n if (searchInput && searchInput.length > 0) {\n setSearchKeyword(searchInput);\n setSelectedNationality('');\n }\n };\n\n /**\n * 검색어 입력창 onKeyup\n */\n const onKeyUp = (e: React.KeyboardEvent<HTMLInputElement>) => {\n const currentValue = (e.target as HTMLInputElement).value;\n\n /**\n * 음절 완성시마다 검색\n */\n if (currentValue.length === 0 || currentValue.slice(-1).normalize('NFD').length > 1) {\n search();\n }\n\n // /**\n // * 엔터키 입력시 검색\n // */\n // if (e.key === 'Enter') {\n // search();\n // }\n };\n\n /**\n * 검색어입력창 초기화\n */\n const onClear = useCallback(() => {\n setSearchKeyword('');\n setSearchInput('');\n setSelectedNationality('');\n }, []);\n\n const onSelect = (nationality: string) => {\n setSelectedNationality(nationality);\n const value = searchList.find((item) => item.nationalityCodeName === nationality);\n value && setValue(value);\n onClose();\n };\n\n useEffect(() => {\n /**\n * 모달 오픈시, 상태 초기화\n */\n if (isOpen) {\n setSelectedNationality('');\n setSearchKeyword('');\n }\n }, [isOpen]);\n\n return {\n onClear,\n searchKeyWord,\n searchList,\n selectedNationality,\n onSearch,\n onKeyUp,\n search,\n searchInput,\n onSelect,\n setSearchKeyword,\n setSearchInput\n };\n}\n\nexport const useNationalityComponent = () => {\n const [nationality, setNationality] = useState<NationalityResponseDto>();\n\n const { isOpen, closeModal, openModal } = useModalState();\n const [isConfirmed, setIsConfirmed] = useState<boolean>(false);\n\n const onConfirm = () => {\n setIsConfirmed(true);\n };\n\n const openInitModal = () => {\n setIsConfirmed(false);\n openModal();\n };\n\n const NationalitySearchComponent = () => (\n <NationalityComponent isOpen={isOpen} onClose={closeModal} setValue={setNationality} onConfirm={onConfirm} />\n );\n\n return {\n isOpen,\n closeModal,\n setNationality,\n nationality,\n openModal: openInitModal,\n NationalitySearchComponent,\n isConfirmed,\n setIsConfirmed\n };\n};\n","'use client';\n\n/**\n * @todo 추후 실제 넥스트랩 모듈로 교체필요\n */\nimport { useEffect, useState } from 'react';\n\nimport { Modal, useModalState } from 'sales-frontend-design-system';\nimport { type NxlOneProps, type NxlOneResponse, useNxlOne } from 'sales-frontend-solution';\nimport { getEnvironmentFromHostname } from 'sales-frontend-utils';\n\nexport type Step =\n | 'appInit'\n | 'tabletEformInit'\n | 'tabletEformRe'\n | 'tabletEformSubInfo'\n | 'smartphoneEformSubInfo'\n | 'smartphoneEformAlimtalkInit'\n | 'smartphoneEformAlimtalkRe'\n | 'tabletNewCustomer'\n | 'tabletNewCustomerLegalRep'\n | 'tabletCustomerInfoPlanAgreement'\n | 'tabletCustomerInfoProductAgreement';\n\nexport interface CodeSet {\n dev: {\n bizCode: string;\n tmplCode: string;\n };\n stg: {\n bizCode: string;\n tmplCode: string;\n };\n}\n\n/**\n * 본인인증 템플릿코드, 비즈코드 참조객체\n */\nexport const CODES: Record<Step, CodeSet> = {\n appInit: {\n dev: {\n tmplCode: 'HST',\n bizCode: 'DPS'\n },\n stg: {\n tmplCode: 'R7Y',\n bizCode: 'DPS'\n }\n },\n\n tabletEformInit: {\n dev: {\n tmplCode: '4X2',\n bizCode: 'DET'\n },\n stg: {\n tmplCode: 'NO7',\n bizCode: 'DET'\n }\n },\n\n tabletEformRe: {\n dev: {\n tmplCode: 'WJ1',\n bizCode: 'DET'\n },\n stg: {\n tmplCode: 'WQF',\n bizCode: 'DET'\n }\n },\n\n tabletEformSubInfo: {\n dev: {\n tmplCode: 'GJB',\n bizCode: 'DET'\n },\n stg: {\n tmplCode: 'C1D',\n bizCode: 'DET'\n }\n },\n\n smartphoneEformSubInfo: {\n dev: {\n tmplCode: 'YOQ',\n bizCode: 'DES'\n },\n stg: {\n tmplCode: 'FLL',\n bizCode: 'DES'\n }\n },\n\n smartphoneEformAlimtalkInit: {\n dev: {\n tmplCode: '8YA',\n bizCode: 'DES'\n },\n stg: {\n tmplCode: 'T9L',\n bizCode: 'DES'\n }\n },\n\n smartphoneEformAlimtalkRe: {\n dev: {\n tmplCode: 'NPK',\n bizCode: 'DES'\n },\n stg: {\n tmplCode: 'YMV',\n bizCode: 'DES'\n }\n },\n\n tabletNewCustomer: {\n dev: {\n tmplCode: '948',\n bizCode: 'DIS'\n },\n stg: {\n tmplCode: 'YQM',\n bizCode: 'DIS'\n }\n },\n\n tabletNewCustomerLegalRep: {\n dev: {\n tmplCode: 'SBI',\n bizCode: 'DIS'\n },\n stg: {\n tmplCode: 'FB3',\n bizCode: 'DIS'\n }\n },\n\n tabletCustomerInfoPlanAgreement: {\n dev: {\n tmplCode: 'QCA',\n bizCode: 'DIS'\n },\n stg: {\n tmplCode: 'AST',\n bizCode: 'DIS'\n }\n },\n\n tabletCustomerInfoProductAgreement: {\n dev: {\n tmplCode: 'I7K',\n bizCode: 'DIS'\n },\n stg: {\n tmplCode: 'XG6',\n bizCode: 'DIS'\n }\n }\n};\n\ninterface Props {\n onSuccess?: (result: NxlOneResponse) => void;\n onError?: (result: NxlOneResponse) => void;\n onClose?: (result: NxlOneResponse) => void;\n modalSize?: 'small' | 'medium' | 'large' | 'full-screen';\n env: 'stg' | 'dev';\n /**\n * @property 'appInit'\n * 업무명 : 영업지원 앱 로그인,\n * 상세업무명 : 앱 초기 설정 본인인증 (2차인증)\n *\n *\n * @property 'tabletEformInit'\n * 업무명 : [태블릿] 전자청약(최초 진입),\n * 상세업무명 : 고객정보 본인인증(계약관계자 모두 진행)\n *\n *\n * @property 'tabletEformRe'\n * 업무명 : [태블릿] 전자청약(재진입),\n * 상세업무명 : 고객정보 본인인증(계약관계자 모두 진행)\n *\n *\n * @property 'tabletEformSubInfo'\n * 업무명 : [태블릿] 전자청약 [청약 부속정보 확인] 단계,\n * 상세업무명 : 지정대리청구서비스 특약신청 시 실명확인\n *\n *\n * @property 'smartphoneEformSubInfo'\n * 업무명 : [스마트폰] 전자청약 [청약 부속정보 확인] 단계,\n * 상세업무명 : 지정대리청구서비스 특약신청 시 실명확인\n *\n *\n * @property 'smartphoneEformAlimtalkInit'\n * 업무명 : [스마트폰] 전자청약 알림톡(최초 진입),\n * 상세업무명 : 고객정보 본인인증(계약관계자 개별 진행)\n *\n *\n * @property 'smartphoneEformAlimtalkRe'\n * 업무명 : [스마트폰] 전자청약 알림톡(재진입),\n * 상세업무명 : 고객정보 본인인증(계약관계자 개별 진행)\n *\n *\n * @property 'tabletNewCustomer'\n * 업무명 : [태블릿] 신규고객등록,\n * 상세업무명 : 고객정보 본인인증\n *\n *\n * @property 'tabletNewCustomerLegalRep'\n * 업무명 : [태블릿] 신규고객등록,\n * 상세업무명 : 법정대리인 본인인증(친권자1,2 개별 진행)\n *\n *\n * @property 'tabletCustomerInfoPlanAgreement'\n * 업무명 : [태블릿] 고객정보조회,\n * 상세업무명 : 가입설계동의갱신 인증\n *\n *\n * @property 'tabletCustomerInfoProductAgreement'\n * 업무명 : [태블릿] 고객정보조회,\n * 상세업무명 : 상품소개동의갱신 인증\n */\n step: Step;\n nxlOneProps?: Partial<NxlOneProps>;\n}\n\n/**\n * onSuccess, onError, onClose 이벤트 핸들러 구현 필요\n * onSuccess: 인증 성공 시 호출, 결과 데이터를 부모 창으로 전달\n * onError: 인증 실패 시 호출, 에러 정보를 부모 창으로 전달\n * onClose: 인증 창이 닫힐 때 호출, 필요에 따라 추가 작업 수행\n * modalSize: 모달 크기 설정 (예: 'small', 'medium', 'large', 'full-screen')\n * bizCode 및 tmplCode: NXL ONE 서비스에서 제공하는 비즈니스 코드 및 템플릿 코드\n */\nexport function useNxlOneModal({\n onSuccess = (result) => {\n console.log('on success', JSON.stringify(result));\n },\n onError = (result) => {\n console.log('on error', JSON.stringify(result));\n },\n onClose = (result) => {\n console.log('on close', JSON.stringify(result));\n },\n modalSize = 'medium',\n step = 'appInit',\n env = 'stg',\n nxlOneProps = {}\n}: Props) {\n const { isOpen, openModal, closeModal } = useModalState();\n const [nxlOnePropsState, setNxlOnePropsState] = useState<Partial<NxlOneProps>>(nxlOneProps);\n const { bizCode, tmplCode } = CODES[step][env];\n\n const { Iframe, open } = useNxlOne({\n ...nxlOnePropsState,\n bizCode: nxlOnePropsState.bizCode || bizCode,\n tmplCode: nxlOnePropsState.tmplCode || tmplCode\n });\n\n const openNxlOneModal = () => {\n const stage = getEnvironmentFromHostname(location.hostname);\n if (stage === 'local') {\n open({ popupWidth: 500, popupHeight: 500 }).then((result) => {\n onSuccess(result);\n });\n } else {\n openModal();\n }\n };\n\n useEffect(() => {\n if (nxlOnePropsState.nlcCtfnId) {\n openNxlOneModal();\n }\n }, [nxlOnePropsState]);\n\n return {\n openNxlOneModal: (nxlOnePropsState?: Partial<NxlOneProps>) => {\n if (nxlOnePropsState) {\n //nxlOneProps의 변경이 있는 경우 반영된 후, useEffect실행\n setNxlOnePropsState(nxlOnePropsState);\n } else {\n //nxlOneProps의 변경이 없는 경우, init 파라미터 기준으로 바로 실행\n openNxlOneModal();\n }\n },\n openNxlOnePopup: open,\n closeNxlOneModal: closeModal,\n isNxlOneModalOpen: isOpen,\n NxlModalComponent: (\n <Modal.Root isOpen={isOpen} onClose={closeModal} modalSize={modalSize}>\n <Modal.Overlay />\n <Modal.Content>\n <Modal.Body raw>\n <Iframe\n onSuccess={onSuccess}\n onError={onError}\n onClose={(result) => {\n onClose(result);\n closeModal();\n }}\n />\n </Modal.Body>\n </Modal.Content>\n </Modal.Root>\n )\n };\n}\n","import React, { useEffect, useState } from 'react';\n\nimport classNames from 'classnames/bind';\nimport { VisaStatusResponseDto } from 'sales-frontend-api/method';\nimport { IconMainUiSearch } from 'sales-frontend-assets';\nimport { FormCore, Modal, ModalBaseProps } from 'sales-frontend-design-system';\n\nimport { highlightOnSearchKeyword } from '../../common';\n\nimport styles from './select-visa.module.scss';\nimport { useSearchVisa } from './use-search-visa';\nimport { VisaSearchResultProps } from './visa.types';\n\nconst cx = classNames.bind(styles);\n\nconst { InputBox, Input } = FormCore;\ninterface VisaSearchInitialTextProps {\n visaList: VisaStatusResponseDto[];\n onSelect: (visa: VisaStatusResponseDto) => void;\n onConfirm: () => void;\n}\nexport const VisaSearchInitialText = ({ visaList, onSelect, onConfirm }: VisaSearchInitialTextProps) => {\n return (\n <div className={cx('favorite-container')}>\n <ul className={cx('favorite')}>\n {visaList.map((item, index) => {\n return (\n <li key={`${index}-${item.integrationCodeValueName}`} onClick={() => {\n onSelect(item);\n onConfirm();\n }}>\n <button>{item.integrationCodeValueName}</button>\n </li>\n );\n })}\n </ul>\n </div>\n );\n};\n\nexport const VisaSearchResult = ({ visaList, searchKeyword, onSelect, onConfirm }: VisaSearchResultProps) => {\n const [filterList, setFilterList] = useState<VisaStatusResponseDto[]>([]);\n\n useEffect(() => {\n const filterList = visaList.filter((item) => item.integrationCodeValueName?.includes(searchKeyword)) || [];\n setFilterList(filterList);\n }, [visaList, searchKeyword]);\n\n return (\n <div className=\"mt-4\">\n <p className={cx('favorite-title')}>\n 총 <span className=\"text-primary\">{filterList.length}</span>건의 검색결과\n </p>\n <ul className={cx('favorite')}>\n {filterList.length > 0 &&\n filterList.map((item, index) => {\n return (\n <li key={`${index}-${item.integrationCodeValueName}`} onClick={() => {\n onSelect(item);\n onConfirm();\n }}>\n <button>{highlightOnSearchKeyword(`${item.integrationCodeValueName}`, searchKeyword)}</button>\n </li>\n );\n })}\n </ul>\n {filterList.length === 0 && (\n <div className={cx('search-result')}>\n `<span className=\"text-primary\">{searchKeyword}</span>`에 대한 검색결과가 없습니다.\n </div>\n )}\n </div>\n );\n};\n\nexport interface VisaSearchModalProps extends ModalBaseProps {\n onClose: () => void;\n isOpen: boolean;\n searchKeyword: string;\n visaList: string[];\n filterList: string[];\n onClear: () => void;\n onSearch: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onKeyUp: (e: React.KeyboardEvent<HTMLInputElement>) => void;\n setSelectedVisa: (visa: string) => void;\n}\n\ninterface Props {\n setValue: (visa: VisaStatusResponseDto) => void;\n onClose: () => void;\n isOpen: boolean;\n onConfirm: () => void;\n}\n\nexport function VisaComponent({ isOpen, onClose, setValue, onConfirm }: Props) {\n const { search, onClear, searchKeyword, onKeyUp, onSearch, searchList, searchInput, onSelect } = useSearchVisa({\n setValue,\n onClose,\n isOpen\n });\n\n return (\n <>\n <Modal.Root isOpen={isOpen} onClose={onClose} modalSize=\"full-screen\">\n <Modal.Overlay />\n <Modal.Content>\n <Modal.Header headerTitle=\"체류자격 검색\" showCloseButton />\n <Modal.Body>\n <InputBox\n clearable\n endElement={\n <button>\n <IconMainUiSearch onClick={search} />\n </button>\n }\n onClear={onClear}\n className={cx('search-input')}\n >\n <Input\n onChange={onSearch}\n onKeyUp={onKeyUp}\n placeholder=\"코드, 자격명 입력\"\n size=\"large\"\n value={searchInput}\n />\n </InputBox>\n {!searchKeyword && <VisaSearchInitialText visaList={searchList} onSelect={onSelect} onConfirm={onConfirm} />}\n {searchKeyword && (\n <VisaSearchResult visaList={searchList} searchKeyword={searchKeyword} onSelect={onSelect} onConfirm={onConfirm} />\n )}\n </Modal.Body>\n </Modal.Content>\n </Modal.Root>\n </>\n );\n}\n","import React, { useState, useEffect, useCallback } from 'react';\n\nimport { useSearchVisaQuery, VisaStatusResponseDto } from 'sales-frontend-api/method';\nimport { useModalState } from 'sales-frontend-design-system';\n\nimport { VisaComponent } from './visa-search-modal';\ninterface Props {\n setValue: (visa: VisaStatusResponseDto) => void;\n onClose: () => void;\n isOpen: boolean;\n}\nexport function useSearchVisa({ setValue, onClose, isOpen }: Props) {\n const [searchKeyword, setSearchKeyword] = useState<string>('');\n const [selectedVisa, setSelectedVisa] = useState<VisaStatusResponseDto>();\n const [searchInput, setSearchInput] = useState<string>('');\n\n const { data: visaList } = useSearchVisaQuery({\n staleTime: Infinity,\n gcTime: Infinity\n });\n const searchList: VisaStatusResponseDto[] = visaList?.data?.visaStatusList || [];\n\n /**\n * 검색어 입력창 onChange\n */\n const onSearch = (e: React.ChangeEvent<HTMLInputElement>) => {\n const typeStr = e.target.value;\n setSearchInput(typeStr);\n };\n\n /**\n * 검색\n */\n const search = () => {\n if (searchInput === '') {\n onClear();\n\n return;\n }\n if (searchInput && searchInput.length > 0) {\n setSearchKeyword(searchInput);\n setSelectedVisa(undefined);\n }\n };\n\n /**\n * 검색어 입력창 onKeyup\n */\n const onKeyUp = (e: React.KeyboardEvent<HTMLInputElement>) => {\n /**\n * 엔터키 입력시 검색\n */\n if (e.key === 'Enter') {\n search();\n }\n };\n\n /**\n * 검색어입력창 초기화\n */\n const onClear = useCallback(() => {\n setSearchKeyword('');\n setSearchInput('');\n setSelectedVisa(undefined);\n }, []);\n\n const onSelect = (visa: VisaStatusResponseDto) => {\n setSelectedVisa(visa);\n setValue(visa);\n onClose();\n };\n\n useEffect(() => {\n /**\n * 모달 오픈시, 상태 초기화\n */\n if (isOpen) {\n setSelectedVisa(undefined);\n setSearchKeyword('');\n }\n }, [isOpen]);\n\n return {\n onClear,\n searchKeyword,\n searchList,\n selectedVisa,\n onSearch,\n onKeyUp,\n search,\n searchInput,\n onSelect,\n setSearchKeyword,\n setSearchInput\n };\n}\n\nexport const useVisaComponent = () => {\n const [visa, setVisa] = useState<VisaStatusResponseDto>();\n const [isConfirmed, setIsConfirmed] = useState<boolean>(false);\n const { isOpen, closeModal, openModal } = useModalState();\n\n const onConfirm = () => {\n setIsConfirmed(true);\n };\n\n const openInitModal = () => {\n setIsConfirmed(false);\n openModal();\n }\n\n const VisaSearchComponent = () => <VisaComponent isOpen={isOpen} onClose={closeModal} setValue={setVisa} onConfirm={onConfirm} />;\n\n return {\n visa,\n openModal: openInitModal,\n VisaSearchComponent,\n isOpen,\n closeModal,\n setVisa,\n isConfirmed,\n setIsConfirmed\n };\n};\n","import classNames from 'classnames/bind';\nimport { PersonalCustomerProfileResponseDto } from 'sales-frontend-api/method';\nimport { IconGraphicsFeedbackEmpty } from 'sales-frontend-assets';\nimport { Table } from 'sales-frontend-design-system';\n\nimport styles from './dea-customer-search-modal.module.scss';\n\ninterface DeaCustomerSearchResultProps {\n customerList: PersonalCustomerProfileResponseDto[];\n onCustomerSelect: (customer: PersonalCustomerProfileResponseDto) => void;\n selectedCustomer: PersonalCustomerProfileResponseDto | null;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function DeaCustomerSearchResult({\n customerList,\n onCustomerSelect,\n selectedCustomer\n}: DeaCustomerSearchResultProps) {\n return (\n <div className={cx('result-section')}>\n <p className={cx('result-title')}>\n 총 <span className=\"text-primary\">{customerList.length}</span>건의 검색결과\n </p>\n <Table variant=\"horizontal\">\n <thead>\n <tr>\n <th className={cx('th-padding')}>선택</th>\n <th className={cx('th-padding')}>고객ID</th>\n <th className={cx('th-padding')}>고객명</th>\n <th className={cx('th-padding')}>주민등록번호</th>\n <th className={cx('th-padding')}>직종업종명</th>\n <th className={cx('th-padding')}>전화번호</th>\n <th className={cx('th-padding')}>주소</th>\n </tr>\n </thead>\n <tbody>\n {customerList.length > 0 ? (\n customerList.map((customer, index) => (\n <tr key={`cust-item-${customer.customerId}-${index}}`}>\n <td>\n <input\n type=\"radio\"\n name=\"customer\"\n value={customer.customerId || ''}\n checked={selectedCustomer?.customerId === customer.customerId}\n onChange={() => onCustomerSelect(customer)}\n />\n </td>\n <td>{customer.customerId}</td>\n <td>{customer.customerName}</td>\n <td>{customer.residentNumber}</td>\n <td>{customer.occupationKindName}</td>\n <td>{customer.mobilePhoneNumber}</td>\n <td>{customer.address}</td>\n </tr>\n ))\n ) : (\n <tr>\n <td colSpan={7}>\n <div className={cx('no-result')}>\n <IconGraphicsFeedbackEmpty />\n <p>조회 결과가 없습니다.</p>\n <p>입력한 정보를 다시 확인해주세요.</p>\n </div>\n </td>\n </tr>\n )}\n </tbody>\n </Table>\n </div>\n );\n}\n","/* eslint-disable react/no-unknown-property */\nimport React, { useEffect, useState } from 'react';\n\nimport classNames from 'classnames/bind';\nimport { PersonalCustomerProfileRequestDto, PersonalCustomerProfileResponseDto } from 'sales-frontend-api/method';\nimport { Button, FormField, Select } from 'sales-frontend-design-system';\nimport { addE2EObject, getE2EDataIDs } from 'sales-frontend-utils';\n\nimport styles from './dea-customer-search-modal.module.scss';\nimport { DeaCustomerSearchResult } from './dea-customer-search-result';\n\nconst { TextField } = FormField;\n\n// ASTx2 is loaded from an external script, declare it here to inform TypeScript.\ndeclare const $ASTX2: any;\n\ninterface DeaCustomerSearchProps {\n setSearchParams: (params?: PersonalCustomerProfileRequestDto) => void;\n customerList: PersonalCustomerProfileResponseDto[];\n onCustomerSelect: (customer: PersonalCustomerProfileResponseDto) => void;\n selectedCustomer: PersonalCustomerProfileResponseDto | null;\n isLoading: boolean;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function DeaCustomerSearch({\n setSearchParams,\n customerList,\n onCustomerSelect,\n selectedCustomer\n}: DeaCustomerSearchProps) {\n const [residentNumberFront, setResidentNumberFront] = useState('');\n const [residentNumberBack, setResidentNumberBack] = useState('');\n\n const handleSearch = () => {\n getE2EDataIDs(['residentNumberBack'], (e2edata: any) => {\n setSearchParams({\n residentNumberFront,\n residentNumberBack,\n e2edata: e2edata.e2e_data1\n });\n });\n };\n\n const handleReset = () => {\n setResidentNumberFront('');\n setResidentNumberBack('');\n setSearchParams();\n };\n\n const onKeyUp = (e: React.KeyboardEvent<HTMLInputElement>) => {\n e.key === 'Enter' && handleSearch();\n };\n\n const onKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n //입력값이 숫자나 백스페이스가 아니면 false\n if (!(e.key === 'Backspace' || !isNaN(parseInt(e.key)))) {\n e.preventDefault();\n }\n };\n\n useEffect(() => {\n const el = document.getElementById('residentNumberBack') as HTMLInputElement;\n addE2EObject(el);\n });\n\n return (\n <>\n <div className={cx('search-section')}>\n <div className={cx('search-filters')}>\n <div className={cx('search-filter-section')}>\n <FormField.Label className=\"subtitle3 text-body-1\">고객 구분</FormField.Label>\n <Select value=\"personal\" placeholder=\"개인\" disabled style={{ width: '100px' }}>\n <Select.Option value=\"personal\">개인</Select.Option>\n </Select>\n <FormField.Label className=\"subtitle3 text-body-1\">주민등록번호</FormField.Label>\n <TextField\n name=\"residentNumberFront\"\n value={residentNumberFront}\n maxLength={6}\n placeholder=\"앞 6자리 입력\"\n onChange={(e) => setResidentNumberFront(e.target.value)}\n size=\"medium\"\n onKeyUp={onKeyUp}\n onKeyDown={onKeyDown}\n rootProps={{\n className: cx('search-input'),\n onClear: () => {\n setResidentNumberFront('');\n }\n }}\n />\n -\n <TextField\n type=\"password\"\n id=\"residentNumberBack\"\n name=\"residentNumberBack\"\n value={residentNumberBack}\n maxLength={7}\n placeholder=\"뒤 7자리 입력\"\n /** ASTx2 e2e 설정 */\n //@ts-ignore\n // e2e_type=\"1\"\n /** 숫자타입만 입력받는 설정 */\n // e2e_inputtype=\"1\"\n onChange={(e) => setResidentNumberBack(e.target.value)}\n size=\"medium\"\n onKeyDown={onKeyDown}\n onKeyUp={onKeyUp}\n rootProps={{\n className: cx('search-input'),\n onClear: () => {\n setResidentNumberBack('');\n }\n }}\n />\n </div>\n <div className={cx('search-buttons')}>\n <Button appearance=\"outline\" size=\"medium\" variant=\"secondary\" onClick={handleReset}>\n 초기화\n </Button>\n <Button appearance=\"filled\" size=\"medium\" variant=\"primary\" onClick={handleSearch}>\n 조회\n </Button>\n </div>\n </div>\n </div>\n <div className={cx('divider')}></div>\n <DeaCustomerSearchResult\n customerList={customerList}\n onCustomerSelect={onCustomerSelect}\n selectedCustomer={selectedCustomer}\n />\n </>\n );\n}\n","import React, { useState, useEffect } from 'react';\n\nimport { useQuery } from '@tanstack/react-query';\nimport {\n getDspCustomerListMethod,\n PersonalCustomerProfileRequestDto,\n PersonalCustomerProfileResponseDto\n} from 'sales-frontend-api/method';\nimport { Button, Modal } from 'sales-frontend-design-system';\nimport { initASTX2, loadScript } from 'sales-frontend-utils';\n\nimport { DeaCustomerSearch } from './dea-customer-search';\n\ninterface DeaCustomerSearchModalProps {\n isOpen: boolean;\n onClose: () => void;\n onSave: (customer: PersonalCustomerProfileResponseDto) => void;\n}\n\nexport const DeaCustomerSearchModal: React.FC<DeaCustomerSearchModalProps> = ({ isOpen, onClose, onSave }) => {\n const [selectedCustomer, setSelectedCustomer] = useState<PersonalCustomerProfileResponseDto | null>(null);\n const [searchParams, setSearchParams] = useState<PersonalCustomerProfileRequestDto>();\n\n const { data, isFetching } = useQuery({\n queryKey: ['deaCustomerSearch', searchParams],\n queryFn: () => getDspCustomerListMethod(searchParams!),\n enabled: !!searchParams,\n retry: false\n });\n\n const [customerList, setCustomerList] = useState<PersonalCustomerProfileResponseDto[]>([]);\n loadScript();\n\n useEffect(() => {\n if (data?.data) {\n setCustomerList(data.data);\n } else {\n setCustomerList([]);\n }\n }, [data]);\n\n useEffect(() => {\n setSelectedCustomer(null);\n }, [customerList]);\n\n useEffect(() => {\n initASTX2();\n }, []);\n\n const handleCustomerSelect = (customer: PersonalCustomerProfileResponseDto) => {\n setSelectedCustomer(customer);\n };\n\n const handleSave = () => {\n if (selectedCustomer) {\n onSave(selectedCustomer);\n onClose();\n }\n };\n\n return (\n <Modal.Root isOpen={isOpen} onClose={onClose} modalSize=\"xlarge\">\n <Modal.Overlay />\n <Modal.Content style={{ height: '697px' }}>\n <Modal.Header headerTitle=\"고객 검색\" showCloseButton />\n <Modal.Body>\n <DeaCustomerSearch\n setSearchParams={setSearchParams}\n customerList={customerList}\n onCustomerSelect={handleCustomerSelect}\n selectedCustomer={selectedCustomer}\n isLoading={isFetching}\n />\n </Modal.Body>\n <Modal.Footer>\n <Button\n variant=\"primary\"\n size=\"medium\"\n appearance=\"filled\"\n width=\"full\"\n onClick={handleSave}\n disabled={!selectedCustomer}\n >\n 저장하기\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n );\n};\n","import { EmployeeDivisionCodeType } from 'sales-frontend-api/method';\n\nexport const EMPLOYEE_SEARCH_TABS: { label: string; value: EmployeeDivisionCodeType }[] = [\n { value: 'WHOL', label: '전체' },\n { value: 'FP', label: 'FP' },\n { value: 'WKIS', label: '내근' }\n];\n","import classNames from 'classnames/bind';\nimport { EmployeeProfileResponseDto } from 'sales-frontend-api/method';\nimport { IconGraphicsFeedbackEmpty } from 'sales-frontend-assets';\nimport { Checkbox, CheckboxButton, Radio, RadioGroup, Table } from 'sales-frontend-design-system';\n\nimport styles from './employee-search-modal.module.scss';\n\ninterface EmployeeSearchResultProps {\n filteredEmployees: EmployeeProfileResponseDto[];\n onEmployeeSelect: (employee: EmployeeProfileResponseDto) => void;\n searchTerm: string;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function EmployeeSearchResult({ filteredEmployees, onEmployeeSelect }: EmployeeSearchResultProps) {\n return (\n <div className={cx('result-section')}>\n <p className={cx('result-title')}>\n 총 <span className=\"text-primary\">{filteredEmployees.length}</span>건의 검색결과\n </p>\n {filteredEmployees.length > 0 ? (\n <Table variant=\"horizontal\">\n <thead>\n <tr>\n <th className={cx('th-padding')}>선택</th>\n <th className={cx('th-padding')}>사원번호</th>\n <th className={cx('th-padding')}>사원명</th>\n <th className={cx('th-padding')}>소속기관명</th>\n <th className={cx('th-padding')}>사원구분</th>\n </tr>\n </thead>\n <tbody>\n {filteredEmployees.map((employee) => {\n return (\n <>\n <tr>\n <td>\n <input\n type=\"radio\"\n name=\"employee\"\n value={employee.employeeNumber || ''}\n onChange={(e) => {\n /**\n * @todo Radio.Item 라디오 선택시, 현재라디오를 checked 상태로 만들수가 없다....\n */\n onEmployeeSelect(employee);\n }}\n ></input>\n </td>\n <td>{employee.employeeNumber}</td>\n <td>{employee.employeeName}</td>\n <td>{employee.organizationName}</td>\n <td>{employee.employeeDivisionCodeName}</td>\n </tr>\n </>\n );\n })}\n </tbody>\n </Table>\n ) : (\n <Table variant=\"horizontal\">\n <thead>\n <tr>\n <th className={cx('th-padding')}>선택</th>\n <th className={cx('th-padding')}>사원번호</th>\n <th className={cx('th-padding')}>사원명</th>\n <th className={cx('th-padding')}>소속기관명</th>\n <th className={cx('th-padding')}>사원구분</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td colSpan={5}>\n <div className={cx('no-result')}>\n <IconGraphicsFeedbackEmpty />\n <p>조회 결과가 없습니다.</p>\n <p>입력한 정보를 다시 확인해주세요.</p>\n </div>\n </td>\n </tr>\n </tbody>\n </Table>\n )}\n </div>\n );\n}\n","import React from 'react';\n\nimport classNames from 'classnames/bind';\nimport { EmployeeDivisionCodeType, EmployeeProfileResponseDto } from 'sales-frontend-api/method';\nimport { Button, FormField, Select } from 'sales-frontend-design-system';\n\nimport { EMPLOYEE_SEARCH_TABS } from './constants';\nimport styles from './employee-search-modal.module.scss';\nimport { EmployeeSearchResult } from './employee-search-result';\n\nconst { TextField } = FormField;\n\ninterface EmployeeSearchProps {\n activeTab: EmployeeDivisionCodeType;\n onTabChange: (value: EmployeeDivisionCodeType) => void;\n searchTerm: string;\n setSearchTerm: (value: string) => void;\n searchInput: string;\n setSearchInput: (value: string) => void;\n employeeList: EmployeeProfileResponseDto[];\n onEmployeeSelect: (employee: EmployeeProfileResponseDto) => void;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function EmployeeSearch({\n activeTab,\n onTabChange,\n searchTerm,\n setSearchTerm,\n searchInput,\n setSearchInput,\n employeeList,\n onEmployeeSelect\n}: EmployeeSearchProps) {\n const handleSearch = () => {\n setSearchTerm(searchInput);\n };\n\n const handleReset = () => {\n setSearchTerm('');\n setSearchInput('');\n };\n\n return (\n <>\n <div className={cx('search-section')}>\n <div className={cx('search-filters')}>\n <div className={cx('search-filter-section')}>\n <FormField.Label className=\"subtitle3 text-body-1\">성명/사번</FormField.Label>\n <TextField\n value={searchInput}\n onChange={(e) => setSearchInput(e.target.value)}\n className={styles.searchInput}\n size=\"medium\"\n onKeyUp={(e) => e.key === 'Enter' && handleSearch()}\n rootProps={{\n onClear: handleReset,\n clearable: true\n }}\n />\n </div>\n <div className={cx('search-filter-section')}>\n <FormField.Label className=\"subtitle3 text-body-1\">사원 구분</FormField.Label>\n <Select\n value={activeTab}\n onChange={(value) => onTabChange(value as EmployeeDivisionCodeType)}\n className={styles.select}\n size=\"medium\"\n >\n {EMPLOYEE_SEARCH_TABS.map((option, index) => (\n <Select.Option key={`${option.value}-${index}`} value={option.value}>\n {option.label}\n </Select.Option>\n ))}\n </Select>\n </div>\n <div className={cx('search-buttons')}>\n <Button appearance=\"outline\" size=\"medium\" variant=\"secondary\" onClick={handleReset}>\n 초기화\n </Button>\n <Button appearance=\"filled\" size=\"medium\" variant=\"primary\" onClick={handleSearch}>\n 조회\n </Button>\n </div>\n </div>\n </div>\n <div className={cx('divider')}></div>\n {searchTerm && (\n <EmployeeSearchResult\n filteredEmployees={employeeList}\n onEmployeeSelect={onEmployeeSelect}\n searchTerm={searchTerm}\n />\n )}\n </>\n );\n}\n","import React, { useState, useEffect } from 'react';\n\nimport {\n EmployeeDivisionCodeType,\n EmployeeProfileResponseDto,\n useSearchEmployeeProfileQuery\n} from 'sales-frontend-api/method';\nimport { Button, Modal } from 'sales-frontend-design-system';\n\nimport { EmployeeSearch } from './employee-search';\n\ninterface EmployeeSearchModalProps {\n isOpen: boolean;\n onClose: () => void;\n onSelect: (employee: EmployeeProfileResponseDto) => void;\n}\n\nexport const EmployeeSearchModal: React.FC<EmployeeSearchModalProps> = ({ isOpen, onClose, onSelect }) => {\n const [activeTab, setActiveTab] = useState<EmployeeDivisionCodeType>('WHOL');\n const [selectedEmployee, setSelectedEmployee] = useState<EmployeeProfileResponseDto | null>(null);\n const [searchTerm, setSearchTerm] = useState<string>('');\n const [searchInput, setSearchInput] = useState<string>('');\n\n const { data } = useSearchEmployeeProfileQuery({\n searchWord: searchTerm,\n employeeDivisionCode: activeTab\n });\n\n const [employeeList, setEmployeeList] = useState<EmployeeProfileResponseDto[]>([]);\n\n useEffect(() => {\n if (data?.data) {\n setEmployeeList(data.data);\n } else {\n setEmployeeList([]);\n }\n }, [data]);\n\n const handleEmployeeSelect = (employee: EmployeeProfileResponseDto) => {\n setSelectedEmployee(employee);\n };\n\n const handleSelect = () => {\n if (selectedEmployee) {\n onSelect(selectedEmployee);\n onClose();\n }\n };\n\n const onTabChange = (value: EmployeeDivisionCodeType) => {\n setSearchTerm('');\n setSearchInput('');\n setActiveTab(value);\n };\n\n return (\n <Modal.Root isOpen={isOpen} onClose={onClose} modalSize=\"xlarge\">\n <Modal.Overlay />\n <Modal.Content style={{ height: '697px' }}>\n <Modal.Header headerTitle=\"사원 검색\" showCloseButton />\n <Modal.Body>\n <EmployeeSearch\n activeTab={activeTab}\n onTabChange={onTabChange}\n searchTerm={searchTerm}\n setSearchTerm={setSearchTerm}\n searchInput={searchInput}\n setSearchInput={setSearchInput}\n employeeList={employeeList}\n onEmployeeSelect={handleEmployeeSelect}\n />\n </Modal.Body>\n <Modal.Footer>\n <Button\n variant=\"primary\"\n size=\"medium\"\n appearance=\"filled\"\n width=\"full\"\n onClick={handleSelect}\n disabled={!selectedEmployee}\n >\n 저장하기\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n );\n};\n","export const JOB_SEARCH_TABS = [\n { value: 'jobName', label: '직종명 검색' },\n { value: 'jobCode', label: '분류로 검색' }\n];\n","import { useSearchOccupationDetailQuery } from 'sales-frontend-api/method';\nimport { Table } from 'sales-frontend-design-system';\n\ninterface Props {\n occupationTypeCode: string;\n occupationIndustryCode: string;\n}\n\nexport function JobSearchDetail({ occupationTypeCode, occupationIndustryCode }: Props) {\n const { data: detail } = useSearchOccupationDetailQuery({\n occupationIndustryCode,\n occupationIndustryTypeCode: occupationTypeCode || '1'\n });\n\n if (!detail || !detail.data) {\n return null;\n }\n const {\n /** @description 직종해설내용 */\n occupationExplanationContent,\n /** @description 직업예시명 */\n occupationExampleName,\n /** @description 위험등급명 */\n riskGradeName,\n /** @description 위험등급코드 */\n riskGradeCode,\n /** @description 상해위험등급코드명 */\n injuryRiskGradeCodeName,\n /** @description 상해위험등급코드 */\n injuryRiskGradeCode,\n /** @description 입원등급코드명 */\n hospitalizationGradeCodeName,\n /** @description 입원등급코드 */\n hospitalizationGradeCode,\n /** @description 상해직종코드 */\n injuryOccupationCode\n } = detail.data;\n\n return (\n <>\n <Table variant=\"horizontal\">\n <tbody>\n <tr>\n <th className=\"px-small\">직종 해설</th>\n <td className=\"px-small\">{occupationExplanationContent}</td>\n </tr>\n <tr>\n <th className=\"px-small\">직종 예시</th>\n <td className=\"px-small\">{occupationExampleName}</td>\n </tr>\n <tr>\n <th className=\"px-small\">위험 등급</th>\n <td className=\"px-small\">\n {riskGradeName}({riskGradeCode})\n </td>\n </tr>\n <tr>\n <th className=\"px-small\">입원 등급</th>\n <td className=\"px-small\">\n {hospitalizationGradeCodeName}({hospitalizationGradeCode})\n </td>\n </tr>\n <tr>\n <th className=\"px-small\">상해 등급</th>\n <td className=\"px-small\">\n {injuryRiskGradeCodeName}({injuryRiskGradeCode})\n </td>\n </tr>\n </tbody>\n </Table>\n </>\n );\n}\n","import classNames from 'classnames/bind';\nimport { OccupationResponseDto } from 'sales-frontend-api/method';\nimport { Accordion, Button, Radio, Table } from 'sales-frontend-design-system';\n\nimport { highlightOnSearchKeyword } from '../../common';\n\nimport { JobSearchDetail } from './job-search-detail';\nimport styles from './job-search-modal.module.scss';\ninterface JobSearchFavoriteProps {\n filteredJobs: OccupationResponseDto[];\n onJobSelect: (job: OccupationResponseDto) => void;\n searchTerm: string;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function JobSearchCategory({ filteredJobs, onJobSelect, searchTerm }: JobSearchFavoriteProps) {\n return (\n <>\n <div className={cx('category-section')}>\n <p className={cx('result-title')}>\n 총 <span className=\"text-primary\">{filteredJobs.length}</span>건의 검색결과\n </p>\n <Accordion.Root>\n <Radio.Root name=\"job-selection\" size=\"small\" className={cx('job-radio-root')} onToggle={() => {}}>\n {filteredJobs.map((job, index) => (\n <Accordion.Item\n id={`item-${job.occupationIndustryCode}-${index}-accordion`}\n key={`item-${job.occupationIndustryCode}-${index}`}\n >\n <Accordion.HeaderDiv>\n <div style={{ flex: 1 }}>\n <Radio.Item size=\"small\" value={job.occupationIndustryCode} onChange={() => onJobSelect(job)}>\n {highlightOnSearchKeyword(job.occupationIndustryName, searchTerm)}({job.occupationIndustryCode})\n </Radio.Item>\n </div>\n </Accordion.HeaderDiv>\n <Accordion.Content variant=\"text\">\n <JobSearchDetail\n occupationTypeCode={job.occupationTypeCode || ''}\n occupationIndustryCode={job.occupationIndustryCode}\n />\n </Accordion.Content>\n </Accordion.Item>\n ))}\n </Radio.Root>\n </Accordion.Root>\n {filteredJobs.length === 0 && (\n <>\n `<span className=\"text-primary\">{searchTerm}</span>`에 대한 검색결과가 없습니다.\n </>\n )}\n </div>\n </>\n );\n}\n","import classNames from 'classnames/bind';\nimport { OccupationResponseDto } from 'sales-frontend-api/method';\nimport { Accordion, Radio, Table } from 'sales-frontend-design-system';\n\nimport { JobSearchDetail } from './job-search-detail';\nimport styles from './job-search-modal.module.scss';\ninterface JobSearchFavoriteProps {\n filteredJobs: OccupationResponseDto[];\n onJobSelect: (job: OccupationResponseDto) => void;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function JobSearchFavorite({ filteredJobs, onJobSelect }: JobSearchFavoriteProps) {\n return (\n <>\n <div className={cx('popular-jobs')}>\n <p>많이 찾는 직종</p>\n <Accordion.Root>\n <Radio.Root name=\"job-selection\" size=\"small\" className={cx('job-radio-root')}>\n {filteredJobs.map((job, index) => (\n <Accordion.Item\n key={`item-${job.occupationIndustryCode}-${index}`}\n id={`item-${job.occupationIndustryCode}-${index}`}\n className={cx('accordion-item')}\n >\n <Accordion.HeaderDiv className={cx('accordion-header-item')}>\n <Radio.Item\n size=\"small\"\n value={job.occupationIndustryCode}\n onChange={() => onJobSelect(job)}\n className={cx('radio-item')}\n >\n {job.occupationIndustryName}({job.occupationIndustryCode})\n </Radio.Item>\n </Accordion.HeaderDiv>\n <Accordion.Content variant=\"text\">\n <JobSearchDetail\n occupationTypeCode={job.occupationTypeCode || ''}\n occupationIndustryCode={job.occupationIndustryCode}\n />\n </Accordion.Content>\n </Accordion.Item>\n ))}\n </Radio.Root>\n </Accordion.Root>\n </div>\n </>\n );\n}\n","import classNames from 'classnames/bind';\nimport { OccupationResponseDto } from 'sales-frontend-api/method';\nimport { Accordion, Radio } from 'sales-frontend-design-system';\n\nimport { highlightOnSearchKeyword } from '../../common';\n\nimport { JobSearchDetail } from './job-search-detail';\nimport styles from './job-search-modal.module.scss';\ninterface JobSearchFavoriteProps {\n filteredJobs: OccupationResponseDto[];\n onJobSelect: (job: OccupationResponseDto) => void;\n searchTerm: string;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function JobSearchResult({ filteredJobs, onJobSelect, searchTerm }: JobSearchFavoriteProps) {\n return (\n <>\n <div className={cx('popular-jobs')}>\n <p className={cx('result-title')}>\n 총 <span className=\"text-primary\">{filteredJobs.length}</span>건의 검색결과\n </p>\n <Accordion.Root>\n <Radio.Root name=\"job-selection\" size=\"small\" className={cx('job-radio-root')}>\n {filteredJobs.map((job, index) => (\n <Accordion.Item\n id={`item-${job.occupationIndustryCode}`}\n key={`item-${job.occupationIndustryCode}-${index}}`}\n // onClick={() => accordion.toggleItem(`item-${job.code}`)}\n >\n <Accordion.HeaderDiv>\n <div style={{ flex: 1 }}>\n <Radio.Item\n id={`item-${job.occupationIndustryCode}`}\n size=\"small\"\n value={job.occupationIndustryCode}\n onChange={() => {\n onJobSelect(job);\n }}\n >\n {highlightOnSearchKeyword(job.occupationIndustryName, searchTerm)}\n </Radio.Item>\n </div>\n </Accordion.HeaderDiv>\n <Accordion.Content variant=\"text\">\n <JobSearchDetail\n occupationTypeCode={job.occupationTypeCode || ''}\n occupationIndustryCode={job.occupationIndustryCode}\n />\n </Accordion.Content>\n </Accordion.Item>\n ))}\n </Radio.Root>\n </Accordion.Root>\n {filteredJobs.length === 0 && (\n <>\n `<span className=\"text-primary\">{searchTerm}</span>`에 대한 검색결과가 없습니다.\n </>\n )}\n </div>\n </>\n );\n}\n","import { Dispatch, SetStateAction } from 'react';\n\nimport classNames from 'classnames/bind';\nimport { OccupationResponseDto } from 'sales-frontend-api/method';\nimport { IconMainUiSearch } from 'sales-frontend-assets';\nimport { Tab, FormField, Select } from 'sales-frontend-design-system';\n\nimport { JOB_SEARCH_TABS } from './constants';\nimport { JobSearchCategory } from './job-search-category';\nimport { JobSearchFavorite } from './job-search-favorite';\nimport styles from './job-search-modal.module.scss';\nimport { JobSearchResult } from './job-search-result';\n\nconst { TextField } = FormField;\ninterface JobSearchProps {\n activeTab: string;\n onTabChange: (value: string) => void;\n searchTerm: string;\n setSearchInput: (value: string) => void;\n filteredJobs: OccupationResponseDto[];\n onJobSelect: (job: OccupationResponseDto) => void;\n searchInput: string;\n setSearchTerm: (value: string) => void;\n firstCategory: string;\n setFirstCategory: Dispatch<SetStateAction<string>>;\n secondCategory: string;\n setSecondCategory: Dispatch<SetStateAction<string>>;\n firstCategoryList: OccupationResponseDto[];\n secondCategoryList: OccupationResponseDto[];\n jobList?: OccupationResponseDto[];\n isLoading: boolean;\n}\nconst cx = classNames.bind(styles);\nconst { Option } = Select;\nexport function JobSearch({\n activeTab,\n onTabChange,\n searchTerm,\n setSearchInput,\n filteredJobs,\n onJobSelect,\n setSearchTerm,\n searchInput,\n firstCategory,\n setFirstCategory,\n secondCategory,\n setSecondCategory,\n firstCategoryList,\n secondCategoryList,\n isLoading\n}: JobSearchProps) {\n /**\n * 검색어 입력창 onKeyup\n */\n const onKeyUp = (e: React.KeyboardEvent<HTMLInputElement>) => {\n /**\n * 엔터키 입력시 검색\n */\n if (e.key === 'Enter') {\n setSearchTerm(searchInput);\n }\n };\n\n return (\n <>\n <Tab.Root\n defaultValue={activeTab}\n onValueChange={onTabChange}\n scroll=\"fixed\"\n size=\"small\"\n variant=\"sub\"\n style={{ gap: 0, overflow: 'visible' }}\n >\n {JOB_SEARCH_TABS.map((tab, index) => (\n <Tab.Item key={`${tab.value}-${index}`} value={tab.value}>\n {tab.label}\n </Tab.Item>\n ))}\n </Tab.Root>\n <div>\n {activeTab === 'jobName' && (\n <div className={cx('favorite-jobs-section')}>\n <TextField\n placeholder=\"직종명 검색\"\n value={searchInput}\n onKeyUp={onKeyUp}\n onChange={(e) => setSearchInput(e.target.value)}\n className={styles.searchInput}\n size=\"medium\"\n rootProps={{\n endElement: <IconMainUiSearch onClick={() => setSearchTerm(searchInput)} />,\n onClear: () => {\n setSearchTerm('');\n setSearchInput('');\n }\n }}\n />\n {!searchTerm && <JobSearchFavorite filteredJobs={filteredJobs} onJobSelect={onJobSelect} />}\n {searchTerm && !isLoading && (\n <JobSearchResult filteredJobs={filteredJobs} onJobSelect={onJobSelect} searchTerm={searchTerm} />\n )}\n </div>\n )}\n {activeTab === 'jobCode' && (\n <div className={cx('select-jobs-section')}>\n <div className={cx('category-section')}>\n <Select\n name=\"first_category\"\n onChange={(value) => {\n setFirstCategory(value);\n setSecondCategory('');\n }}\n placeholder=\"대분류 선택\"\n rootProps={{\n style: {\n // width: '300px'\n }\n }}\n size=\"large\"\n value={firstCategory}\n >\n {firstCategoryList.map((option, index) => (\n <Option key={`${index}-${option.occupationIndustryCode}`} value={option.occupationIndustryCode}>\n {option.occupationIndustryName}\n </Option>\n ))}\n </Select>\n <Select\n name=\"second_category\"\n onChange={setSecondCategory}\n placeholder=\"중분류 선택\"\n rootProps={{\n style: {\n // width: '300px'\n }\n }}\n size=\"large\"\n value={secondCategory}\n disabled={!firstCategory}\n >\n {secondCategoryList.map((option, index) => (\n <Option key={`${index}-${option.occupationIndustryCode}`} value={option.occupationIndustryCode}>\n {option.occupationIndustryName}\n </Option>\n ))}\n </Select>\n </div>\n\n {firstCategory && secondCategory && !isLoading && (\n <JobSearchCategory filteredJobs={filteredJobs} onJobSelect={onJobSelect} searchTerm={searchTerm} />\n )}\n </div>\n )}\n </div>\n </>\n );\n}\n","import { useEffect, useState } from 'react';\n\nimport {\n OccupationDetailResponseDto,\n OccupationResponseDto,\n useSearchOccupationDetailQuery,\n useSearchOccupationQuery\n} from 'sales-frontend-api/method';\nimport { Button, Modal, ModalUtils, useModalState } from 'sales-frontend-design-system';\n\nimport { JOB_SEARCH_TABS } from './constants';\nimport { JobSearch } from './job-search';\n\n/**\n * 초기값(많이 찾는 직종)\n * 회사 사무직 종사자\n * 경영지원 사무직 종사자\n * 주부\n * 주방장 및 조리사\n * 보험설계사(당사)\n */\nconst initData: OccupationResponseDto[] = [\n {\n occupationIndustryCode: '430101',\n occupationIndustryName: '회사 사무직 종사자',\n occupationTypeCode: null,\n historySequence: 0\n },\n {\n occupationIndustryCode: '400301',\n occupationIndustryName: '경영지원 사무직 관리자',\n occupationTypeCode: null,\n historySequence: 0\n },\n {\n occupationIndustryCode: '510201',\n occupationIndustryName: '전업주부',\n occupationTypeCode: null,\n historySequence: 0\n },\n {\n occupationIndustryCode: '442501',\n occupationIndustryName: '주방장 및 조리사(선박 조리사 제외)',\n occupationTypeCode: null,\n historySequence: 0\n },\n {\n occupationIndustryCode: '450303',\n occupationIndustryName: '보험설계사(당사)',\n occupationTypeCode: null,\n historySequence: 0\n }\n];\n\nconst useJobSearch = () => {\n const [activeTab, setActiveTab] = useState<string>(JOB_SEARCH_TABS[0]?.value ?? '');\n const [selectedJob, setSelectedJob] = useState<OccupationResponseDto | null>(null);\n // const [selectedJobDetail, setSelectedJobDetail] = useState<OccupationDetailResponseDto | null>(null);\n const [searchTerm, setSearchTerm] = useState<string>('');\n const [searchInput, setSearchInput] = useState<string>('');\n const handleJobSelect = (job: OccupationResponseDto) => {\n setSelectedJob(job);\n };\n const [firstCategory, setFirstCategory] = useState<string>('');\n const [secondCategory, setSecondCategory] = useState<string>('');\n const [jobList, setJobList] = useState<OccupationResponseDto[]>(initData);\n const [firstCategoryList, setFirstCategoryList] = useState<OccupationResponseDto[]>([]);\n const [secondCategoryList, setSecondCategoryList] = useState<OccupationResponseDto[]>([]);\n\n const { data: detail } = useSearchOccupationDetailQuery({\n occupationIndustryCode: selectedJob?.occupationIndustryCode || '',\n occupationIndustryTypeCode: '1'\n });\n\n const selectedJobDetail: OccupationDetailResponseDto | undefined = detail?.data;\n\n const { data, isLoading } = useSearchOccupationQuery({\n occupationMajorCategoryCode: firstCategory,\n occupationSearchTypeCode: searchTerm ? '4' : '3',\n occupationSubCategoryCode: secondCategory,\n searchOccupationIndustryName: searchTerm\n });\n const { data: firstCategoryData } = useSearchOccupationQuery({\n occupationMajorCategoryCode: '',\n occupationSearchTypeCode: '1',\n occupationSubCategoryCode: '',\n searchOccupationIndustryName: ''\n });\n const { data: secondCategoryData } = useSearchOccupationQuery({\n occupationMajorCategoryCode: firstCategory,\n occupationSearchTypeCode: '2',\n occupationSubCategoryCode: '',\n searchOccupationIndustryName: ''\n });\n\n const reset = () => {\n setSearchInput('');\n setSearchTerm('');\n setFirstCategory('');\n setSecondCategory('');\n };\n useEffect(() => {\n reset();\n }, [activeTab]);\n\n useEffect(() => {\n setSelectedJob(null);\n\n if (data && searchTerm && activeTab === 'jobName') {\n /** 검색어가 있고, 검색된 데이터가 있는 경우 */\n const filteredJobs = data.data.occupationList.filter((job) => job.occupationIndustryName.includes(searchTerm));\n setJobList(filteredJobs);\n } else if (!data && searchTerm && activeTab === 'jobName') {\n /** 검색어가 있고, 검색된 데이터가 없는 경우 */\n setJobList([]);\n } else if (!searchTerm && activeTab === 'jobName') {\n /** 검색어가 없고, 검색된 데이터가 없는 경우 , 많이 찾는 직종 노출 */\n setJobList(initData);\n } else if (activeTab === 'jobCode' && firstCategory && secondCategory) {\n /** 대분류, 중분류 선택된 경우 */\n setJobList(data?.data.occupationList || []);\n }\n }, [searchTerm, data, firstCategory, secondCategory, secondCategoryData, activeTab]);\n\n useEffect(() => {\n if (firstCategoryData) {\n setFirstCategoryList(firstCategoryData.data.occupationList);\n }\n }, [firstCategoryData]);\n\n useEffect(() => {\n if (secondCategoryData) {\n setSecondCategoryList(secondCategoryData.data.occupationList);\n }\n }, [secondCategoryData]);\n\n return {\n activeTab,\n setActiveTab,\n selectedJob,\n setSelectedJob,\n searchTerm,\n setSearchTerm,\n handleJobSelect,\n filteredJobs: jobList,\n searchInput,\n setSearchInput,\n firstCategory,\n setFirstCategory,\n secondCategory,\n setSecondCategory,\n secondCategoryList,\n firstCategoryList,\n reset,\n isLoading,\n selectedJobDetail\n };\n};\n\nexport function useJobSearchModal() {\n const {\n activeTab,\n setActiveTab,\n searchTerm,\n setSearchTerm,\n filteredJobs,\n handleJobSelect,\n selectedJob,\n searchInput,\n setSearchInput,\n firstCategory,\n setFirstCategory,\n secondCategory,\n setSecondCategory,\n firstCategoryList,\n secondCategoryList,\n setSelectedJob,\n selectedJobDetail,\n reset,\n isLoading\n } = useJobSearch();\n\n const { isOpen, openModal, closeModal } = useModalState();\n const [isConfirmed, setIsConfirmed] = useState<boolean>(false);\n const onTabChange = (value: string) => {\n reset();\n setActiveTab(value);\n };\n\n const openInitModal = () => {\n reset();\n setSelectedJob(null);\n setActiveTab('jobName');\n setIsConfirmed(false);\n openModal();\n };\n\n const closeModalWithCheck = () => {\n setIsConfirmed(true);\n if (!selectedJob) {\n ModalUtils.alert('직종을 선택하지 않았습니다. 직종 선택 후 다시 시도해주세요.', '직종을 선택해주세요.', {\n modalId: 'job-search-alert-no-selected'\n });\n\n return;\n }\n closeModal();\n };\n\n return {\n JobSearchModal: (\n <Modal.Root isOpen={isOpen} onClose={closeModal} modalSize=\"xlarge\">\n <Modal.Overlay />\n <Modal.Content style={{ height: '697px' }}>\n <Modal.Header headerTitle=\"직종 검색\" showCloseButton />\n <Modal.Body raw>\n <JobSearch\n firstCategory={firstCategory}\n firstCategoryList={firstCategoryList}\n secondCategoryList={secondCategoryList}\n setFirstCategory={setFirstCategory}\n secondCategory={secondCategory}\n activeTab={activeTab}\n onTabChange={onTabChange}\n searchTerm={searchTerm}\n setSearchInput={setSearchInput}\n filteredJobs={filteredJobs || []}\n onJobSelect={handleJobSelect}\n searchInput={searchInput}\n setSearchTerm={setSearchTerm}\n setSecondCategory={setSecondCategory}\n isLoading={isLoading}\n />\n </Modal.Body>\n <Modal.Footer>\n <Button\n variant=\"primary\"\n size=\"medium\"\n appearance=\"filled\"\n width=\"full\"\n onClick={closeModalWithCheck}\n // disabled={!selectedJob}\n >\n 확인\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n ),\n JobSearchComponent: (\n <JobSearch\n firstCategoryList={firstCategoryList}\n secondCategoryList={secondCategoryList}\n firstCategory={firstCategory}\n setFirstCategory={setFirstCategory}\n secondCategory={secondCategory}\n setSecondCategory={setSecondCategory}\n activeTab={activeTab}\n onTabChange={onTabChange}\n searchTerm={searchTerm}\n setSearchInput={setSearchInput}\n filteredJobs={filteredJobs || []}\n onJobSelect={handleJobSelect}\n searchInput={searchInput}\n setSearchTerm={setSearchTerm}\n isLoading={isLoading}\n />\n ),\n isJobSearchOpen: isOpen,\n isConfirmed,\n setIsConfirmed,\n openJobSearchModal: openInitModal,\n closeJobSearchModal: closeModal,\n selectedJob,\n selectedJobDetail,\n resetJobSearch: reset,\n setSelectedJob\n };\n}\n","import React from 'react';\n\nimport classNames from 'classnames/bind';\nimport { IconIllustGrade } from 'sales-frontend-assets';\n\nimport styles from './job-vehicle-search-modal.module.scss';\nconst cx = classNames.bind(styles);\n\ninterface JobVehicleSearchGradeProps {\n riskGrade?: string | number;\n hospitalizationGrade?: string | number;\n}\n\nexport const JobVehicleSearchGrade = ({ riskGrade, hospitalizationGrade }: JobVehicleSearchGradeProps) => {\n return (\n <div className={cx('grade-section')}>\n <div className={cx('icon-title')}>\n <IconIllustGrade />\n <span className=\"typo-title5 text-body\">등급</span>\n </div>\n <p className=\"typo-body2 text-body_3\">직종, 운전 여부 선택시 자동으로 산정됩니다.</p>\n\n <div className={cx('grade-list')}>\n <div className={cx('grade')}>\n <span>위험등급</span>\n <span className=\"text-primary typo-subtitle3\">{riskGrade || '-'}</span>\n </div>\n <div className={cx('grade')}>\n <span>입원등급</span>\n <span className=\"text-primary typo-subtitle3\">{hospitalizationGrade || '-'}</span>\n </div>\n </div>\n </div>\n );\n};\n","import classNames from 'classnames/bind';\nimport { VehicleTypeResponseDto } from 'sales-frontend-api/method';\nimport { Radio } from 'sales-frontend-design-system';\n\nimport styles from './vehicle-search-modal.module.scss';\nconst cx = classNames.bind(styles);\ninterface VehicleSearchProps {\n vehicles: VehicleTypeResponseDto[];\n onVehicleSelect: (vehicle: VehicleTypeResponseDto) => void;\n selectedVehicle?: VehicleTypeResponseDto;\n}\n\nexport function VehicleSearch({ vehicles, onVehicleSelect, selectedVehicle }: VehicleSearchProps) {\n return (\n <div className={cx('vehicle-search-section')}>\n <p>운전 차종</p>\n <Radio.Root\n name=\"vehicle-selection\"\n size=\"small\"\n className={cx('vehicle-radio-root')}\n defaultValue={selectedVehicle?.integrationCodeValue || ''}\n >\n {vehicles.map((vehicle, index) => (\n <Radio.Item\n key={`item-${vehicle.integrationCodeValue}-${index}`}\n id={`item-${vehicle.integrationCodeValue}`}\n size=\"small\"\n value={vehicle.integrationCodeValue || ''}\n onChange={(e) => {\n const { value } = e.target;\n const selected = vehicles.find((v) => v.integrationCodeValue === value);\n if (selected) {\n onVehicleSelect(selected);\n }\n }}\n className={cx('item')}\n >\n {vehicle.integrationCodeValueName}({vehicle.integrationCodeValue})\n </Radio.Item>\n ))}\n </Radio.Root>\n </div>\n );\n}\n","import { useState } from 'react';\n\nimport { useSearchVehicleQuery, VehicleTypeResponseDto } from 'sales-frontend-api/method';\n\nimport { VehicleSearch } from './vehicle-search';\n\nexport const useVehicleSearch = () => {\n const [selectedVehicle, setSelectedVehicle] = useState<VehicleTypeResponseDto>();\n const { data } = useSearchVehicleQuery();\n\n // useSearchVehicleQuery\n return {\n VehicleSearchComponent: (\n <VehicleSearch\n vehicles={data?.data?.vehicleTypeList || []}\n onVehicleSelect={setSelectedVehicle}\n selectedVehicle={selectedVehicle}\n />\n ),\n selectedVehicle,\n setSelectedVehicle,\n vehicleList: data\n };\n};\n","import { useEffect, useState } from 'react';\n\nimport { useSearchRiskGradeQuery } from 'sales-frontend-api/method';\n\nimport { useJobSearchModal } from '../job-search-modal/use-job-search';\nimport { useVehicleSearch } from '../vehicle-search-modal/use-vehicle-search';\n\nexport const useJobVehicleSearch = () => {\n const [rightPanelView, setRightPanelView] = useState('jobSearch'); // 'jobSearch' or 'vehicleSelection'\n const [riskGrade, setRiskGrade] = useState<string>('');\n const [hospitalizationGrade, setHospitalizationGrade] = useState<string>('');\n const { selectedJob, JobSearchComponent, selectedJobDetail, resetJobSearch, setSelectedJob } = useJobSearchModal();\n\n const { selectedVehicle, VehicleSearchComponent, setSelectedVehicle } = useVehicleSearch();\n const { data: riskGradeData } = useSearchRiskGradeQuery(\n {\n occupationIndustryCode: selectedJob?.occupationIndustryCode || '',\n vehicleTypeCode: selectedVehicle?.integrationCodeValue || ''\n },\n {\n enabled: !!selectedJob && !!selectedVehicle\n }\n );\n\n const reset = () => {\n setSelectedJob(null);\n resetJobSearch();\n setSelectedVehicle(undefined);\n setRiskGrade('');\n setHospitalizationGrade('');\n };\n\n useEffect(() => {\n if (selectedJob && selectedVehicle && riskGradeData) {\n const { riskGradeCode, riskGradeName } = riskGradeData.data;\n /**\n * 직종,차종이 모두 선택된 경우 등급 계산 API 호출\n * @todo 입원등급 조회 불가한 상태라 고정값으로 일단 노출합니다.\n * RiskGradeResponseDto\n riskGradeCode?: string;\n riskGradeName?: string;\n */\n\n setRiskGrade(`${riskGradeName}(${riskGradeCode})`);\n setHospitalizationGrade(\n `${selectedJobDetail?.hospitalizationGradeCodeName}(${selectedJobDetail?.hospitalizationGradeCode})`\n );\n }\n }, [selectedJob, selectedVehicle, riskGradeData, selectedJobDetail]);\n\n return {\n selectedVehicle,\n rightPanelView,\n setRightPanelView,\n selectedJob,\n selectedJobDetail,\n JobSearch: JobSearchComponent,\n VehicleSearch: VehicleSearchComponent,\n riskGrade,\n riskGradeCode: riskGradeData?.data?.riskGradeCode,\n hospitalizationGrade,\n resetJobVehicleSearch: reset\n };\n};\n","import { useState } from 'react';\n\nimport classNames from 'classnames/bind';\nimport { IconIllustJob, IconIllustVehicle, IconSubUiArrowRight } from 'sales-frontend-assets';\nimport { ModalUtils, useModalState } from 'sales-frontend-design-system';\nimport { Button, Modal } from 'sales-frontend-design-system';\n\nimport { JobVehicleSearchGrade } from './job-vehicle-search-grade';\nconst cx = classNames.bind(styles);\nimport styles from './job-vehicle-search-modal.module.scss';\nimport { useJobVehicleSearch } from './use-job-vehicle-search';\n\n\n\nexport function useJobVehicleSearchModal() {\n const {\n selectedVehicle,\n rightPanelView,\n setRightPanelView,\n selectedJob,\n JobSearch,\n VehicleSearch,\n riskGrade,\n riskGradeCode,\n hospitalizationGrade,\n resetJobVehicleSearch,\n selectedJobDetail\n } = useJobVehicleSearch();\n const { isOpen, openModal, closeModal } = useModalState();\n const [isConfirmed, setIsConfirmed] = useState<boolean>(false);\n const validate = () => {\n if (!selectedJob && !selectedVehicle) {\n return ModalUtils.alert(\n '직종과 운전 여부·차종을 모두 선택해야 등급 산정이 가능합니다.',\n '직종과 운전 여부·차종을 선택해주세요',\n {\n modalSize: 'small'\n }\n );\n }\n if (!selectedJob) {\n return ModalUtils.alert('직종을 선택해야 등급 산정이 가능합니다.', '직종을 선택해주세요', {\n modalSize: 'small'\n });\n }\n if (!selectedVehicle) {\n return ModalUtils.alert('운전 여부·차종을 선택해야 등급 산정이 가능합니다.', '운전 여부·차종을 선택해주세요', {\n modalSize: 'small'\n });\n }\n closeModal();\n };\n\n const openInitModal = () => {\n resetJobVehicleSearch();\n setIsConfirmed(false);\n openModal();\n };\n\n return {\n selectedJob,\n selectedJobDetail,\n selectedVehicle,\n riskGrade,\n riskGradeCode,\n hospitalizationGrade,\n isOpenJobVehicleModal: isOpen,\n isConfirmed,\n setIsConfirmed,\n openJobVehicleModal: openInitModal,\n closeJobVehicleModal: closeModal,\n JobVehicleSearchModalComponent: (\n <Modal.Root isOpen={isOpen} onClose={closeModal} modalSize=\"xlarge\">\n <Modal.Overlay />\n <Modal.Content style={{ height: '697px' }}>\n <Modal.Header headerTitle=\"직종·운전차종 검색\" showCloseButton />\n <Modal.Body className={cx('job-vehicle-search-modal')} raw>\n <>\n <div className={cx('left-panel')}>\n <div className={cx('card-section')}>\n <div\n className={cx('card-menu', { 'card-selected': rightPanelView === 'jobSearch' })}\n onClick={() => setRightPanelView('jobSearch')}\n >\n <div className={cx('card-title')}>\n <IconIllustJob className={cx('card-icon')} />\n <span className={cx('card-text', 'typo-title5', 'text-body')}>직종</span>\n <IconSubUiArrowRight />\n </div>\n <div className=\"typo-body2 text-body_2\">\n {selectedJob ? selectedJob.occupationIndustryName : '미선택'}\n </div>\n </div>\n <div\n className={cx('card-menu', { 'card-selected': rightPanelView === 'vehicleSelection' })}\n onClick={() => setRightPanelView('vehicleSelection')}\n >\n <div className={cx('card-title')}>\n <IconIllustVehicle className={cx('card-icon')} />\n <span className={cx('card-text', 'typo-title5', 'text-body')}>운전 여부·차종</span>\n <IconSubUiArrowRight />\n </div>\n <div className=\"typo-body2 text-body_2\">\n {selectedVehicle?.integrationCodeValueName}\n {selectedVehicle?.integrationCodeValue || '미선택'}\n </div>\n </div>\n </div>\n <JobVehicleSearchGrade riskGrade={riskGrade} hospitalizationGrade={hospitalizationGrade} />\n </div>\n <div className={cx('right-panel')}>{rightPanelView === 'jobSearch' ? JobSearch : VehicleSearch}</div>\n </>\n </Modal.Body>\n <Modal.Footer style={{ marginTop: 0 }}>\n <Button variant=\"primary\" size=\"medium\" appearance=\"filled\" width=\"full\" onClick={() => {\n validate();\n setIsConfirmed(true);\n }}>\n 확인\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n )\n };\n}\n","import classNames from 'classnames/bind';\nimport { OrganizationProfileResponse } from 'sales-frontend-api/method';\nimport { IconGraphicsFeedbackEmpty } from 'sales-frontend-assets';\nimport { Table } from 'sales-frontend-design-system';\n\nimport styles from './organization-search-modal.module.scss';\n\ninterface OrganizationSearchResultProps {\n filteredOrganizations: OrganizationProfileResponse[];\n onOrganizationSelect: (organization: OrganizationProfileResponse) => void;\n searchTerm: string;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function OrganizationSearchResult({\n filteredOrganizations,\n onOrganizationSelect\n}: OrganizationSearchResultProps) {\n return (\n <div className={cx('result-section')}>\n <p className={cx('result-title')}>\n 총 <span className=\"text-primary\">{filteredOrganizations.length}</span>건의 검색결과\n </p>\n {filteredOrganizations.length > 0 ? (\n <Table variant=\"horizontal\">\n <thead>\n <tr>\n <th className={cx('th-padding')}>선택</th>\n <th className={cx('th-padding')}>기관코드</th>\n <th className={cx('th-padding')}>기관명</th>\n </tr>\n </thead>\n <tbody>\n {filteredOrganizations.map((organization, index) => {\n return (\n <tr key={`${organization.organizationCode}-${index}`}>\n <td>\n <input\n type=\"radio\"\n name=\"organization\"\n value={organization.organizationCode || ''}\n onChange={() => onOrganizationSelect(organization)}\n />\n </td>\n <td>{organization.organizationCode}</td>\n <td>{organization.organizationName}</td>\n </tr>\n );\n })}\n </tbody>\n </Table>\n ) : (\n <Table variant=\"horizontal\">\n <thead>\n <tr>\n <th className={cx('th-padding')}>선택</th>\n <th className={cx('th-padding')}>기관코드</th>\n <th className={cx('th-padding')}>기관명</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td colSpan={3}>\n <div className={cx('no-result')}>\n <IconGraphicsFeedbackEmpty />\n <p>조회 결과가 없습니다.</p>\n <p>입력한 정보를 다시 확인해주세요.</p>\n </div>\n </td>\n </tr>\n </tbody>\n </Table>\n )}\n </div>\n );\n}\n","import React from 'react';\n\nimport classNames from 'classnames/bind';\nimport { OrganizationProfileResponse } from 'sales-frontend-api/method';\nimport { Button, FormField } from 'sales-frontend-design-system';\n\nimport styles from './organization-search-modal.module.scss';\nimport { OrganizationSearchResult } from './organization-search-result';\n\nconst { TextField } = FormField;\n\ninterface OrganizationSearchProps {\n searchTerm: string;\n setSearchTerm: (value: string) => void;\n searchInput: string;\n setSearchInput: (value: string) => void;\n organizationList: OrganizationProfileResponse[];\n onOrganizationSelect: (organization: OrganizationProfileResponse) => void;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function OrganizationSearch({\n searchTerm,\n setSearchTerm,\n searchInput,\n setSearchInput,\n organizationList,\n onOrganizationSelect\n}: OrganizationSearchProps) {\n const handleSearch = () => {\n setSearchTerm(searchInput);\n };\n\n const handleReset = () => {\n setSearchTerm('');\n setSearchInput('');\n };\n\n return (\n <>\n <div className={cx('search-section')}>\n <div className={cx('search-filters')}>\n <div className={cx('search-filter-section')}>\n <FormField.Label className=\"subtitle3 text-body-1\">기관명/코드</FormField.Label>\n <TextField\n value={searchInput}\n onChange={(e) => setSearchInput(e.target.value)}\n size=\"medium\"\n onKeyUp={(e) => e.key === 'Enter' && handleSearch()}\n rootProps={{\n className: cx('search-input'),\n clearable: true,\n onClear: handleReset\n }}\n />\n </div>\n <div className={cx('search-buttons')}>\n <Button appearance=\"outline\" size=\"medium\" variant=\"secondary\" onClick={handleReset}>\n 초기화\n </Button>\n <Button appearance=\"filled\" size=\"medium\" variant=\"primary\" onClick={handleSearch}>\n 조회\n </Button>\n </div>\n </div>\n </div>\n <div className={cx('divider')}></div>\n {searchTerm && (\n <OrganizationSearchResult\n filteredOrganizations={organizationList}\n onOrganizationSelect={onOrganizationSelect}\n searchTerm={searchTerm}\n />\n )}\n </>\n );\n}\n","import React, { useState, useEffect } from 'react';\n\nimport { OrganizationProfileResponse, useSearchOrganizationQuery } from 'sales-frontend-api/method';\nimport { Button, Modal } from 'sales-frontend-design-system';\n\nimport { OrganizationSearch } from './organization-search';\n\ninterface OrganizationSearchModalProps {\n isOpen: boolean;\n onClose: () => void;\n onSelect: (organization: OrganizationProfileResponse) => void;\n}\n\nexport const OrganizationSearchModal: React.FC<OrganizationSearchModalProps> = ({ isOpen, onClose, onSelect }) => {\n const [selectedOrganization, setSelectedOrganization] = useState<OrganizationProfileResponse | null>(null);\n const [searchTerm, setSearchTerm] = useState<string>('');\n const [searchInput, setSearchInput] = useState<string>('');\n\n const { data } = useSearchOrganizationQuery({\n searchWord: searchTerm\n });\n\n const [organizationList, setOrganizationList] = useState<OrganizationProfileResponse[]>([]);\n\n useEffect(() => {\n if (data?.data) {\n setOrganizationList(data.data);\n } else {\n setOrganizationList([]);\n }\n }, [data]);\n\n const handleOrganizationSelect = (organization: OrganizationProfileResponse) => {\n setSelectedOrganization(organization);\n };\n\n const handleSelect = () => {\n if (selectedOrganization) {\n onSelect(selectedOrganization);\n onClose();\n }\n };\n\n return (\n <Modal.Root isOpen={isOpen} onClose={onClose} modalSize=\"xlarge\">\n <Modal.Overlay />\n <Modal.Content style={{ height: '697px' }}>\n <Modal.Header headerTitle=\"기관 검색\" showCloseButton />\n <Modal.Body>\n <OrganizationSearch\n searchTerm={searchTerm}\n setSearchTerm={setSearchTerm}\n searchInput={searchInput}\n setSearchInput={setSearchInput}\n organizationList={organizationList}\n onOrganizationSelect={handleOrganizationSelect}\n />\n </Modal.Body>\n <Modal.Footer>\n <Button\n variant=\"primary\"\n size=\"medium\"\n appearance=\"filled\"\n width=\"full\"\n onClick={handleSelect}\n disabled={!selectedOrganization}\n >\n 저장하기\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n );\n};\n","import React from 'react';\n\nimport classNames from 'classnames/bind';\nimport { Button, Modal } from 'sales-frontend-design-system';\n\nimport { useVehicleSearch } from './use-vehicle-search';\nimport styles from './vehicle-search-modal.module.scss';\nconst cx = classNames.bind(styles);\ninterface JobVehicleSearchModalProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\nexport function JobVehicleSearchModal({ onClose }: JobVehicleSearchModalProps) {\n const { selectedVehicle, VehicleSearchComponent } = useVehicleSearch();\n\n return (\n <Modal.Root isOpen={true} onClose={onClose} modalSize=\"xlarge\">\n <Modal.Overlay />\n <Modal.Content style={{ height: '697px' }}>\n <Modal.Header headerTitle=\"운전차종 검색\" showCloseButton />\n <Modal.Body className={cx('job-vehicle-search-modal')} raw>\n {VehicleSearchComponent}\n </Modal.Body>\n <Modal.Footer style={{ marginTop: 0 }}>\n <Button variant=\"primary\" size=\"medium\" appearance=\"filled\" width=\"full\" onClick={onClose}>\n 확인({selectedVehicle?.integrationCodeValueName || '미선택'})-{selectedVehicle?.integrationCodeValue}\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n );\n}\n","/* eslint-disable react-hooks/exhaustive-deps */\n\nimport { useEffect, useState } from 'react';\n\nimport { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { FormField, type SegmentItems } from 'sales-frontend-design-system';\n\nimport { useJobSearchModal } from '../modal';\n\nexport const FormSearchJobField = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n error,\n size = 'medium',\n placeholder = '직종 검색',\n onValueChange,\n defaultValue,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled'> &\n Omit<FormField.TextFieldProps, 'defaultValue'> & {\n onValueChange?: (value?: SegmentItems) => void;\n defaultValue?: SegmentItems;\n }) => {\n const [selected, setSelected] = useState<SegmentItems | undefined>(defaultValue);\n\n const { field, fieldState } = useController({ name, control, disabled });\n const { JobSearchModal, openJobSearchModal, selectedJob } = useJobSearchModal();\n\n useEffect(() => {\n if (selectedJob) {\n field.onChange(selectedJob.occupationIndustryName);\n setSelected({ label: selectedJob.occupationIndustryName, value: selectedJob.occupationIndustryCode });\n onValueChange?.({ label: selectedJob.occupationIndustryName, value: selectedJob.occupationIndustryCode });\n }\n }, [selectedJob]);\n\n return (\n <>\n <FormField.ComboBox\n {...props}\n {...field}\n id={field.name}\n error={fieldState.invalid || error}\n value={selected?.label ?? ''}\n icon=\"search\"\n size={size}\n placeholder={placeholder}\n autoComplete=\"off\"\n onClick={openJobSearchModal}\n />\n {JobSearchModal}\n </>\n );\n};\n","import { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { SegmentGroup, type SegmentGroupHtmlProps } from 'sales-frontend-design-system';\n\nexport interface FormSegmentGroupProps<TFormValues extends FieldValues>\n extends Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled'>,\n Omit<SegmentGroupHtmlProps, 'defaultValue'> {\n disabledItems?: string[];\n}\n\nexport const FormSegmentGroup = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n disabledItems,\n items,\n ...props\n}: FormSegmentGroupProps<TFormValues>) => {\n const { field, fieldState } = useController({ name, control, disabled });\n\n const itemList = items.map((item) => {\n return {\n ...item,\n disabled: disabledItems?.includes(item.value)\n };\n });\n\n return (\n <SegmentGroup\n {...props}\n tabIndex={0}\n id={field.name}\n ref={field.ref}\n defaultValue={field.value}\n disabled={field.disabled}\n error={fieldState.invalid}\n onBlur={field.onBlur}\n items={itemList}\n onValueChange={(selected) => {\n field.onChange(selected);\n props.onValueChange?.(selected);\n }}\n />\n );\n};\n","import React from 'react';\n\nimport { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { OptionProps, Select, SelectProps } from 'sales-frontend-design-system';\n\nimport type { SegmentItems } from 'sales-frontend-design-system';\n\n/**\n * 영업지원 시스템 셀렉트필드\n * @param param0\n * @returns\n */\n\ntype FormSelectProps<TFormValues extends FieldValues> = Pick<\n UseControllerProps<TFormValues>,\n 'name' | 'control' | 'disabled'\n> &\n Omit<SelectProps, 'defaultValue'>;\n\nexport const FormSelect = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n error,\n children,\n ...props\n}: FormSelectProps<TFormValues>) => {\n const { field, fieldState } = useController({ name, control, disabled });\n\n return (\n <Select\n {...props}\n id={field.name}\n disabled={field.disabled}\n error={fieldState.invalid || error}\n onBlur={field.onBlur}\n value={field.value}\n onChange={(selected) => {\n field.onChange(selected);\n }}\n >\n {children}\n </Select>\n );\n};\n\nconst FormSelectOption = ({ children, value, ...rest }: OptionProps) => {\n return (\n <Select.Option value={value} {...rest}>\n {children}\n </Select.Option>\n );\n};\n\ninterface IFormSelectGroupProps<TFormValues extends FieldValues> extends FormSelectProps<TFormValues> {\n options: SegmentItems[];\n optionsProps?: Omit<OptionProps, 'children' | 'value'>;\n}\n\nconst FormSelectGroup = <TFormValues extends FieldValues>({\n options,\n optionsProps,\n ...props\n}: Omit<IFormSelectGroupProps<TFormValues>, 'children'>) => {\n return (\n <FormSelect {...props}>\n {options.map(\n (option) =>\n option.label && (\n <FormSelectOption key={option.value} value={option.value} {...optionsProps}>\n {option.label}\n </FormSelectOption>\n )\n )}\n </FormSelect>\n );\n};\n\nFormSelect.Option = FormSelectOption;\nFormSelect.Group = FormSelectGroup;\n","import { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { FormField } from 'sales-frontend-design-system';\n\nexport const FormTextField = <TFormValues extends FieldValues>({\n name,\n control,\n size = 'medium',\n disabled,\n error,\n onBlur,\n onChange,\n rootProps,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled'> & FormField.TextFieldProps) => {\n const { field, fieldState } = useController({ name, control, disabled });\n\n return (\n <FormField.TextField\n {...props}\n id={field.name}\n size={size}\n autoComplete=\"off\"\n name={field.name}\n value={field.value ?? ''}\n disabled={field.disabled}\n error={fieldState.invalid || error}\n onChange={(e) => {\n field.onChange(e);\n onChange?.(e);\n }}\n onBlur={(e) => {\n field.onBlur();\n onBlur?.(e);\n }}\n rootProps={{\n ...rootProps,\n onClear: () => {\n field.onChange('');\n rootProps?.onClear?.();\n }\n }}\n />\n );\n};\n","import React from 'react';\n\nimport classNames from 'classnames/bind';\nimport { ModalUtils } from 'sales-frontend-design-system';\n\nimport styles from './step-indicator.module.scss';\n\nimport type { StepIndicatorProps, StepItem } from './step-indicator.types';\n\nconst cx = classNames.bind(styles);\n\nexport const StepIndicator = ({\n items,\n onClickItem,\n currentIndex = 0,\n defaultValue = '',\n dotCount = 3,\n isLoading\n}: StepIndicatorProps) => {\n const [steps, setSteps] = React.useState<StepItem[]>(\n Array.from({ length: 10 }).map(() => ({ label: '-', value: '' }))\n );\n const [current, setCurrent] = React.useState(currentIndex);\n\n React.useEffect(() => {\n if (items.length > 0) {\n setSteps(items);\n items.map((item, idx) => {\n if (item.value === defaultValue) {\n setCurrent(idx);\n }\n });\n }\n }, [items, defaultValue]);\n\n const handleClickStep = (item: StepItem) => {\n const index = steps.findIndex((step) => step.value === item.value);\n\n if (index === -1) {\n console.error('error not found index');\n\n return;\n }\n\n if (steps[index < 1 ? index : index - 1]?.isCompleted) {\n onClickItem?.(item);\n } else {\n ModalUtils.alert('이전 단계를 모두 완료해야 선택한 단계로\\n이동할 수 있습니다.', '이전 단계를 먼저 진행해주세요');\n }\n };\n\n return (\n <div className={cx('stepper-layout', { loading: isLoading })}>\n <div className={cx('stepper')}>\n {steps.map((item, idx) => (\n <React.Fragment key={`num-${idx}`}>\n <div\n className={cx(\n 'circle',\n { completed: item.isCompleted ?? false },\n { active: defaultValue === item.value || current === idx }\n )}\n onClick={() => handleClickStep?.(item)}\n >\n {item.isCompleted ? <span className={cx('completed-icon')} /> : idx + 1}\n </div>\n {/* 다음 단계가 있을 때만 dot 렌더링 */}\n {idx < steps.length - 1 &&\n Array.from({ length: dotCount }).map((_, dotIdx) => (\n <span key={`dot-${idx}-${dotIdx}`} className={cx('dot')} />\n ))}\n </React.Fragment>\n ))}\n </div>\n\n <ul className={cx('step-labels')}>\n {steps.map((item, idx) => (\n <li\n key={`label-${idx}`}\n className={cx(\n { completed: steps[idx < 1 ? idx : idx - 1]?.isCompleted ?? false },\n { active: defaultValue === item.value || current === idx }\n )}\n onClick={() => handleClickStep?.(item)}\n >\n <span className=\"text-ellipsis\">{item.label ?? item.value}</span>\n </li>\n ))}\n </ul>\n </div>\n );\n};\n","import classNames from 'classnames/bind';\nimport { IconIllustCamera } from 'sales-frontend-assets';\nimport { Icon } from 'sales-frontend-design-system';\n\nimport styles from './camera.module.scss';\nimport { AttachedPhoto, cameraItemType } from './camera.types';\n\nconst cx = classNames.bind(styles);\n\nexport interface AttachmentProps {\n photos: AttachedPhoto[];\n onAddPhoto: () => void;\n onRemovePhoto: (id: string) => void;\n /* false이면 사진이 1장 이상일 때만 표시 */\n show: boolean;\n type?: cameraItemType;\n buttonText?: string;\n}\n\nexport function Attachment({\n photos,\n onAddPhoto,\n onRemovePhoto,\n show,\n type = 'multiple',\n buttonText\n}: AttachmentProps) {\n const handleAddPhoto = () => {\n onAddPhoto();\n };\n\n const handleRemovePhoto = (id: string) => {\n onRemovePhoto(id);\n };\n\n const renderPhotoSingle = () => {\n if (photos.length === 0) {\n return (\n <div className={cx('single-photo-item', 'add-photo-item')}>\n <button className={cx('add-photo-button-single')} onClick={handleAddPhoto}>\n <IconIllustCamera />\n <span>{buttonText || '사진 첨부하기'}</span>\n </button>\n </div>\n );\n }\n\n return photos.map((photo) => (\n <div key={photo.id} className={cx('single-photo-item')}>\n <div className={cx('photo-placeholder')}>\n <img src={photo.src} alt={photo.name} className={cx('photo-image')} />\n </div>\n <button className={cx('remove-button')} onClick={() => handleRemovePhoto(photo.id)} aria-label=\"사진 삭제\">\n ×\n </button>\n </div>\n ));\n };\n\n const renderPhotoGrid = () => {\n const maxPhotos = type === 'single' ? 1 : 4;\n const gridItems = [];\n\n if (photos.length < maxPhotos) {\n gridItems.push(\n <div key=\"add-photo\" className={cx('photo-item', 'add-photo-item')}>\n <button className={cx('add-photo-button')} onClick={handleAddPhoto}>\n <IconIllustCamera />\n <span>{buttonText || '첨부하기'}</span>\n <span className={cx('photo-count')}>\n (<span className={cx('photo-count-number')}>{photos.length}</span>/{maxPhotos})\n </span>\n </button>\n </div>\n );\n }\n\n photos.forEach((photo) => {\n gridItems.push(\n <div key={photo.id} className={cx('photo-item')}>\n <div className={cx('photo-placeholder')}>\n <img src={photo.src} alt={photo.name} className={cx('photo-image')} />\n </div>\n <button className={cx('remove-button')} onClick={() => handleRemovePhoto(photo.id)} aria-label=\"사진 삭제\">\n ×\n </button>\n </div>\n );\n });\n\n return gridItems;\n };\n\n const isVisible = show || (!show && photos.length > 0);\n\n if (!isVisible) {\n return null;\n }\n\n if (type === 'single') {\n return <div className={cx('photo-single')}>{renderPhotoSingle()}</div>;\n }\n\n return <div className={cx('photo-grid', { linear: type === 'linear' })}>{renderPhotoGrid()}</div>;\n}\n","import { cameraOptions } from './camera.types';\n\n// 3mb\nconst maxImageSize = 3 * 1024 * 1024;\n/**\n *\n * 이미지를 파라미터로 전달하고, 설정한 리사이즈 옵션에 따라 이미지를 리사이징하고 리턴한다.\n * 리턴하는 데이터타입은 전달받은 데이터 타입과 동일하게 한다.\n * base64 string을 전달받은 경우는 base64 string을 리턴하고\n * file 타입을 전달받은 경우는 file 타입을 리턴한다.\n *\n * options 규칙\n * width 와 height 중 1개가 존재하는 경우 해당 사이즈에 맞게 원본비율유지하여 축소한다.\n * width 와 height 가 모두 존재하는 경우 해당 사이즈에 맞게 원본비율을 무시하고 리사이즈한다.\n *\n * filesize 옵션이 존재하는 경우는 width,height 옵션을 무시하고, filesize 이하로 원본비율 축소한다.\n *\n * width, height 의 단위는 px 이다.\n *\n * ext는 리턴데이터 타입이 파일인 경우, 사용할 파일확장자 이다.\n * ext가 설정된 값이 없는 경우는, 기본값으로 jpeg를 사용한다.\n *\n */\nexport function resize<T extends string | File>(\n image: T,\n options: cameraOptions['resize'] = { ext: 'jpeg', filesize: maxImageSize }\n): Promise<T> {\n return new Promise((resolve, reject) => {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n\n if (!ctx) {\n reject(new Error('Canvas context를 생성할 수 없습니다.'));\n\n return;\n }\n\n const img = new Image();\n img.crossOrigin = 'anonymous';\n\n img.onload = () => {\n let { width, height } = img;\n const { filesize, ext } = options;\n\n // filesize 옵션이 있는 경우 width, height 옵션을 무시하고 filesize 이하로 원본비율 축소\n if (filesize) {\n const originalSize = width * height * 4; // RGBA 4바이트\n if (originalSize > filesize) {\n const ratio = Math.sqrt(filesize / originalSize);\n width = Math.floor(width * ratio);\n height = Math.floor(height * ratio);\n }\n } else {\n // width, height 옵션 처리\n const { width: targetWidth, height: targetHeight } = options;\n\n if (targetWidth && targetHeight) {\n // width와 height가 모두 존재하는 경우 원본비율 무시하고 리사이즈\n width = targetWidth;\n height = targetHeight;\n } else if (targetWidth) {\n // width만 존재하는 경우 원본비율 유지하여 축소\n const ratio = targetWidth / width;\n width = targetWidth;\n height = Math.floor(height * ratio);\n } else if (targetHeight) {\n // height만 존재하는 경우 원본비율 유지하여 축소\n const ratio = targetHeight / height;\n height = targetHeight;\n width = Math.floor(width * ratio);\n }\n }\n\n // canvas 크기 설정\n canvas.width = width;\n canvas.height = height;\n\n // 이미지 그리기\n ctx.drawImage(img, 0, 0, width, height);\n\n // 결과 반환\n if (typeof image === 'string') {\n // base64 string인 경우\n const mimeType = ext === 'png' ? 'image/png' : 'image/jpeg';\n const quality = ext === 'png' ? 1.0 : 0.8;\n const base64 = canvas.toDataURL(mimeType, quality);\n resolve(base64 as T);\n } else {\n // File인 경우\n canvas.toBlob(\n (blob) => {\n if (!blob) {\n reject(new Error('Blob을 생성할 수 없습니다.'));\n\n return;\n }\n\n const mimeType = ext === 'png' ? 'image/png' : 'image/jpeg';\n const fileName = image.name ? `${image.name.replace(/\\.[^/.]+$/, '')}.${ext}` : `resized.${ext}`;\n\n const resizedFile = new File([blob], fileName, { type: mimeType });\n resolve(resizedFile as T);\n },\n ext === 'png' ? 'image/png' : 'image/jpeg',\n ext === 'png' ? 1.0 : 0.8\n );\n }\n };\n\n img.onerror = () => {\n reject(new Error('이미지를 로드할 수 없습니다.'));\n };\n\n // 이미지 소스 설정\n if (typeof image === 'string') {\n img.src = image;\n } else {\n const reader = new FileReader();\n reader.onload = (e) => {\n if (e.target?.result) {\n img.src = e.target.result as string;\n } else {\n reject(new Error('파일을 읽을 수 없습니다.'));\n }\n };\n reader.onerror = () => {\n reject(new Error('파일을 읽을 수 없습니다.'));\n };\n reader.readAsDataURL(image);\n }\n });\n}\n","import { useEffect, useState } from 'react';\n\nimport { Bridge } from 'sales-frontend-bridge';\nimport { base64ToBlob, base64ToFile, imageUrlToFile, isAndroidDevice } from 'sales-frontend-utils';\n\nimport { Attachment } from './attachment';\nimport { resize } from './resize';\n\nimport type { AttachedPhoto, cameraOptions } from './camera.types';\n\nconst genImageId = () => `camera-${Date.now()}-${Math.random()}`;\n\n/**\n * @param options Partial<cameraOptions>\n * initData\n * 화면최초 로딩시 초기값\n *\n * show\n * boolean\n * 화면진입시, Attachment 컴포넌트 노출여부, 별도의 버튼을 통해 호출할 경우 false.\n *\n * type\n * 'single' | 'multiple' | 'linear' Attachment 컴포넌트 타입\n *\n * onChange\n * (file: File) => void;\n *\n * onDelete\n * (id: string) => void;\n *\n * useNativeCamera\n * boolean\n * 앱환경에서, 네이티브의 카메라를 호출할경우 사용\n *\n * cameraOnly\n * boolean\n * useNativeCamera가 false인 경우에만 사용\n *\n * buttonText\n * string\n * Attachment 컴포넌트에 버튼을 표시할 경우에만 사용\n *\n * resize\n * 이미지가 입력된후 리사이즈를 할경우에만 사용\n * resize: {\n * width?: number;\n * height?: number;\n * filesize?: number;\n * ext?: string;\n * };\n *\n * responseFileType fetch로 이미지자원을 가져올때 ios이슈가 있어서,\n * scheme, base64 두가지 타입으로 설정가능하도록 변경됨\n */\nexport function useCamera({\n onChange,\n resize: resizeOption,\n cameraOnly,\n onDelete,\n show,\n type = 'multiple',\n buttonText,\n initData,\n useNativeCamera = false,\n responseFileType\n}: Partial<cameraOptions> = {}) {\n const convertedInitData = initData?.map((data, index) => ({ ...data, id: String(index + 1) }));\n const [attachedPhotos, setAttachedPhotos] = useState<AttachedPhoto[]>(convertedInitData || []);\n\n const findImage = (imageId: string) => {\n return attachedPhotos.find((image) => image.id === imageId);\n };\n\n const imageHandler = async (file: File) => {\n const newPhoto: AttachedPhoto = {\n id: genImageId(),\n src: URL.createObjectURL(resizeOption ? await resize(file, resizeOption) : file),\n name: `서류사진_${attachedPhotos.length + 1}`\n };\n\n if (type === 'single') {\n setAttachedPhotos([newPhoto]);\n } else {\n setAttachedPhotos([...attachedPhotos, newPhoto]);\n }\n\n if (onChange) {\n onChange(file);\n }\n };\n\n const processImage = async (uri: string) => {\n if (responseFileType === 'scheme') {\n const file = await imageUrlToFile(uri);\n await imageHandler(file);\n } else {\n const file = await base64ToFile(uri, 'image.jpg');\n await imageHandler(file);\n }\n };\n\n /**\n * onClick시, input File생성후 카메라 또는 파일선택 호출\n */\n const onClick = () => {\n if (useNativeCamera) {\n if (isAndroidDevice()) {\n Bridge.native.documentCapture({ responseFileType: responseFileType || 'scheme' }).then(async ({ uri }) => {\n processImage(uri);\n });\n } else {\n Bridge.native.documentCapture({ responseFileType: responseFileType || 'base64' }).then(async ({ uri }) => {\n processImage(uri);\n });\n }\n } else {\n // input을 dom으로 생성, type='file' , cameraOnly 가 true이면 카메라만 실행가능하도록 input 을 설정\n // true가 아니면 이미지확장자파일과, 카메라선택 둘다 가능하도록 설정\n const input = document.createElement('input');\n input.type = 'file';\n input.accept = 'image/*';\n\n if (cameraOnly) {\n // 카메라만 실행 가능하도록 설정\n input.capture = 'camera';\n }\n\n // 파일 선택 이벤트 리스너 추가\n input.addEventListener('change', async (event) => {\n const target = event.target as HTMLInputElement;\n const { files } = target;\n\n if (files && files.length > 0) {\n const file = files[0];\n // onChange 콜백 호출\n if (file) {\n await imageHandler(file);\n }\n }\n\n // input 요소 제거\n document.body.removeChild(input);\n });\n\n // input을 body에 추가하고 click 이벤트 발생\n input.style.display = 'none';\n document.body.appendChild(input);\n input.click();\n }\n };\n\n /**\n * 선택한 이미지 삭제\n * @param imageId 이미지아이디\n */\n const deleteImage = (imageId: string) => {\n const imageIndex = attachedPhotos.findIndex((image) => image.id === imageId);\n if (imageIndex > -1) {\n const item = attachedPhotos.splice(imageIndex, 1);\n item[0] && URL.revokeObjectURL(item[0].src);\n setAttachedPhotos([...attachedPhotos]);\n onDelete && onDelete(imageId);\n }\n };\n\n const CameraComponent = () => (\n <Attachment\n show={!!show}\n onAddPhoto={onClick}\n onRemovePhoto={deleteImage}\n photos={attachedPhotos}\n type={type}\n buttonText={buttonText}\n />\n );\n\n useEffect(() => {\n return () => {\n // revoke all images url\n attachedPhotos.forEach((image) => {\n URL.revokeObjectURL(image.src);\n });\n };\n }, []);\n\n return {\n onClick,\n getImage: findImage,\n deleteImage,\n attachedPhotos,\n Attachment: CameraComponent,\n addImage: (data: Blob | string, name?: string) => {\n let blobUrl = '';\n if (data instanceof Blob) {\n blobUrl = URL.createObjectURL(data);\n } else if (typeof data === 'string') {\n blobUrl = URL.createObjectURL(base64ToBlob(data));\n }\n\n const newPhoto: AttachedPhoto = {\n id: genImageId(),\n src: blobUrl,\n name: name || `서류사진_${attachedPhotos.length + 1}`\n };\n setAttachedPhotos([...attachedPhotos, newPhoto]);\n }\n };\n}\n","import { useRef, useEffect, useState, useCallback } from 'react';\n\nimport { DownloadProps, PaintProps } from './canvas-paint.types';\n\n/** undo, redo 가능한 히스토리 최대 저장 갯수 */\nconst HISTORY_SIZE = 100;\n\n/** 기본 다운로드 값 */\nconst DEFAULT_DOWNLOAD_PROPS: Required<DownloadProps> = {\n fileExtendsion: 'png',\n fileName: 'image',\n transparent: true,\n backgroundColor: 'white',\n width: 500,\n height: 500\n};\nexport function useCanvasPaint(paintProps: PaintProps = {}) {\n const { pen = { strokeWeight: 5, strokeColor: 'black' }, onChange, onStart, onEnd } = paintProps;\n const [canvasRefState, setCanvasRefState] = useState<HTMLCanvasElement | null>(null);\n const contextRef = useRef<CanvasRenderingContext2D | null>(null);\n\n const [isPainting, setIsPainting] = useState(false);\n const [history, setHistory] = useState<string[]>([]);\n const [historyIndex, setHistoryIndex] = useState(-1);\n\n const saveState = useCallback(() => {\n if (!canvasRefState) {\n return;\n }\n const dataUrl = canvasRefState.toDataURL();\n\n const newHistory = history.slice(0, historyIndex + 1);\n if (newHistory.length >= HISTORY_SIZE) {\n newHistory.shift();\n }\n newHistory.push(dataUrl);\n\n setHistory(newHistory);\n setHistoryIndex(newHistory.length - 1);\n onChange && onChange();\n }, [history, historyIndex, onChange, canvasRefState]);\n\n const restoreState = useCallback(\n (index: number) => {\n const context = contextRef.current;\n if (!canvasRefState || !context || !history[index]) {\n return;\n }\n\n const dataUrl = history[index];\n const img = new Image();\n img.onload = () => {\n context.clearRect(0, 0, canvasRefState.width, canvasRefState.height);\n context.drawImage(img, 0, 0);\n };\n img.src = dataUrl;\n onChange && onChange();\n },\n [history, onChange, canvasRefState]\n );\n\n useEffect(() => {\n if (!canvasRefState) {\n return;\n }\n const context = canvasRefState.getContext('2d', { willReadFrequently: true });\n if (!context) {\n return;\n }\n contextRef.current = context;\n\n const initialDataUrl = canvasRefState.toDataURL();\n setHistory([initialDataUrl]);\n setHistoryIndex(0);\n }, [canvasRefState]);\n\n useEffect(() => {\n const context = contextRef.current;\n if (context) {\n context.lineWidth = pen.strokeWeight;\n context.strokeStyle = pen.strokeColor;\n }\n }, [pen]);\n\n /**\n * @description canvas의 크기가 동적으로 생성되는 경우,\n * 포인터의 위치가 맞지않는 이슈를 해결하기위한,\n * scale조정하는 함수입니다.\n */\n const getEventPosition = useCallback(\n (event: MouseEvent | TouchEvent) => {\n if (!canvasRefState) {\n return null;\n }\n\n const rect = canvasRefState.getBoundingClientRect();\n const scaleX = canvasRefState.width / rect.width;\n const scaleY = canvasRefState.height / rect.height;\n\n let clientX;\n let clientY;\n\n if (event instanceof MouseEvent) {\n clientX = event.clientX;\n clientY = event.clientY;\n } else if (event instanceof TouchEvent) {\n const touch = event.touches[0];\n if (!touch) {\n return null;\n }\n clientX = touch.clientX;\n clientY = touch.clientY;\n } else {\n return null;\n }\n\n const offsetX = (clientX - rect.left) * scaleX;\n const offsetY = (clientY - rect.top) * scaleY;\n\n return { offsetX, offsetY };\n },\n [canvasRefState]\n );\n\n const startPainting = useCallback(\n (event: MouseEvent | TouchEvent) => {\n event.preventDefault();\n const context = contextRef.current;\n if (!context) {\n return;\n }\n const pos = getEventPosition(event);\n if (!pos) {\n return;\n }\n onStart && onStart();\n const { offsetX, offsetY } = pos;\n context.beginPath();\n context.moveTo(offsetX, offsetY);\n setIsPainting(true);\n },\n [onStart, getEventPosition]\n );\n\n const stopPainting = useCallback(() => {\n const context = contextRef.current;\n if (!context || !isPainting) {\n return;\n }\n context.closePath();\n setIsPainting(false);\n onEnd && onEnd();\n saveState();\n }, [isPainting, onEnd, saveState]);\n\n const paint = useCallback(\n (event: MouseEvent | TouchEvent) => {\n event.preventDefault();\n if (!isPainting || !contextRef.current) {\n return;\n }\n const pos = getEventPosition(event);\n if (!pos) {\n return;\n }\n const { offsetX, offsetY } = pos;\n contextRef.current.lineTo(offsetX, offsetY);\n contextRef.current.stroke();\n },\n [isPainting, getEventPosition]\n );\n\n useEffect(() => {\n if (!canvasRefState) {\n return;\n }\n\n canvasRefState.addEventListener('mousedown', startPainting);\n canvasRefState.addEventListener('mouseup', stopPainting);\n canvasRefState.addEventListener('mousemove', paint);\n canvasRefState.addEventListener('mouseleave', stopPainting);\n\n canvasRefState.addEventListener('touchstart', startPainting);\n canvasRefState.addEventListener('touchend', stopPainting);\n canvasRefState.addEventListener('touchmove', paint);\n canvasRefState.addEventListener('touchcancel', stopPainting);\n\n return () => {\n canvasRefState.removeEventListener('mousedown', startPainting);\n canvasRefState.removeEventListener('mouseup', stopPainting);\n canvasRefState.removeEventListener('mousemove', paint);\n canvasRefState.removeEventListener('mouseleave', stopPainting);\n\n canvasRefState.removeEventListener('touchstart', startPainting);\n canvasRefState.removeEventListener('touchend', stopPainting);\n canvasRefState.removeEventListener('touchmove', paint);\n canvasRefState.removeEventListener('touchcancel', stopPainting);\n };\n }, [startPainting, stopPainting, paint, canvasRefState]);\n\n const clear = () => {\n const context = contextRef.current;\n if (canvasRefState && context) {\n context.clearRect(0, 0, canvasRefState.width, canvasRefState.height);\n const initialDataUrl = canvasRefState.toDataURL();\n setHistory([initialDataUrl]);\n setHistoryIndex(0);\n onChange && onChange();\n }\n };\n\n const undo = () => {\n if (historyIndex > 0) {\n const newIndex = historyIndex - 1;\n setHistoryIndex(newIndex);\n restoreState(newIndex);\n }\n };\n\n const redo = () => {\n if (historyIndex < history.length - 1) {\n const newIndex = historyIndex + 1;\n setHistoryIndex(newIndex);\n restoreState(newIndex);\n }\n };\n\n const loadImage = (base64String: string) => {\n const context = contextRef.current;\n if (!canvasRefState || !context) {\n return;\n }\n\n const img = new Image();\n img.onload = () => {\n context.clearRect(0, 0, canvasRefState.width, canvasRefState.height);\n context.drawImage(img, 0, 0, canvasRefState.width, canvasRefState.height);\n saveState();\n };\n img.src = base64String;\n };\n\n const getBase64String = (imageProps: DownloadProps) => {\n const props = { ...DEFAULT_DOWNLOAD_PROPS, ...imageProps };\n const { fileExtendsion, transparent, backgroundColor, width, height } = props;\n const originalCanvas = canvasRefState;\n if (!originalCanvas) {\n return;\n }\n\n const tempCanvas = document.createElement('canvas');\n tempCanvas.width = width;\n tempCanvas.height = height;\n const tempCtx = tempCanvas.getContext('2d');\n\n if (tempCtx) {\n if (!transparent) {\n tempCtx.fillStyle = backgroundColor || 'white';\n tempCtx.fillRect(0, 0, width, height);\n }\n tempCtx.drawImage(originalCanvas, 0, 0, width, height);\n\n return tempCanvas.toDataURL(`image/${fileExtendsion}`);\n }\n };\n\n const download = (downloadProps: DownloadProps) => {\n const props = { ...DEFAULT_DOWNLOAD_PROPS, ...downloadProps };\n const { fileName, fileExtendsion, transparent, backgroundColor, width, height } = props;\n const originalCanvas = canvasRefState;\n if (!originalCanvas) {\n return;\n }\n\n const tempCanvas = document.createElement('canvas');\n tempCanvas.width = width;\n tempCanvas.height = height;\n const tempCtx = tempCanvas.getContext('2d');\n\n if (tempCtx) {\n if (!transparent) {\n tempCtx.fillStyle = backgroundColor || 'white';\n tempCtx.fillRect(0, 0, width, height);\n }\n tempCtx.drawImage(originalCanvas, 0, 0, width, height);\n\n const link = document.createElement('a');\n link.download = `${fileName}.${fileExtendsion}`;\n link.href = tempCanvas.toDataURL(`image/${fileExtendsion}`);\n link.click();\n }\n };\n /**\n * canvasRef.current canvas 에 데이터가 있는지 확인후 boolean 리턴\n * @returns boolean\n */\n const isCanvasBlank = () => {\n if (!canvasRefState) {\n return true;\n }\n\n // 캔버스 크기 가져오기\n const { width, height } = canvasRefState;\n\n // 2D 렌더링 컨텍스트 가져오기\n const ctx = canvasRefState.getContext('2d');\n if (!ctx) {\n console.error('2D context not available');\n\n return true; // 컨텍스트가 없으면 비어있는 것으로 간주\n }\n\n // 캔버스 전체 영역의 픽셀 데이터 가져오기\n const imageData = ctx.getImageData(0, 0, width, height);\n const { data } = imageData;\n\n // 픽셀 데이터의 알파(alpha) 값을 순회하며 확인\n // RGBA 순서이므로 알파 값은 3, 7, 11, ... 인덱스에 위치\n for (let i = 0; i < data.length; i += 4) {\n // 알파 값이 0이 아니면 (불투명한 부분이 있으면)\n if (data[i + 3] !== 0) {\n return false; // 캔버스가 비어있지 않음\n }\n }\n\n // 모든 픽셀의 알파 값이 0이면 (모두 투명하면)\n return true; // 캔버스가 비어있음\n };\n\n return {\n clear,\n undo,\n redo,\n loadImage,\n download,\n getBase64String,\n isCanvasBlank,\n setCanvasRefState,\n canvasRefState\n };\n}\n","/**\n * 서명로드용 base64 string\n */\nexport const testSignatureBase64Data =\n 'data:image/png;base64,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';\n","import { useState, useEffect, useRef } from 'react';\n\nimport { getRemoteIdentityVerificationSystemToken } from 'sales-frontend-api/method';\nimport { Modal, useModalState, Loading, ModalUtils } from 'sales-frontend-design-system';\nimport { MessageEventManager } from 'sales-frontend-utils';\n\nimport { VerificationResponse } from './remote-identity-verification.types';\nimport {\n UseRemoteIdentityVerificationProps,\n RemoteIdentityVerificationSuccess\n} from './remote-identity-verification.types';\n\nconst VERIFICATION_CODES = {\n SUCCESS: '0000',\n USER_CANCEL: '9000',\n TOKEN_ERROR: '9001',\n CAMERA_PERMISSION: '9002',\n ATTEMPT_EXCEEDED: '9003',\n SERVER_ERROR: '9999'\n} as const;\n\nexport const RIV_SEARCH_PARAM_MAP = {\n NATIONALITY_TYPE: {\n /** 내국인 */\n DOMESTIC: 'D',\n /** 외국인 */\n FOREIGN: 'F'\n },\n DOCUMENT_FORMAT: {\n /** 일반 주민등록증 */\n GENERAL: 'NC202001',\n /** 외국인등록증 */\n FOREIGN_REGISTRATION: 'NC020048'\n },\n DOCUMENT_TYPE: {\n /** 일반 주민등록증 */\n GENERAL: 'IT148',\n /** 외국인등록증 */\n FOREIGN_REGISTRATION: 'IT321'\n }\n} as const;\n\n/**\n * 비대면인증시스템 기본 로직\n * @param config\n */\nexport const useRemoteIdentityVerification = ({\n rivEnv,\n rivOrigin,\n tokenRequestParams,\n apiConfig,\n onCancel,\n onError,\n onSuccess,\n rivSearchParams\n}: UseRemoteIdentityVerificationProps) => {\n const rivHost = rivOrigin ?? `https://${rivEnv === 'prd' ? '' : rivEnv === 'stg' ? 'qa' : 'dev'}riv.hanwhalife.com`;\n\n // RIV URL 생성\n const createRemoteIdentityVerificationUrl = async () => {\n const response = await getRemoteIdentityVerificationSystemToken(tokenRequestParams, apiConfig);\n const { accessToken, remoteIdentityVerificationSystemRequestId } = response.data;\n\n const urlParams = new URLSearchParams({\n authorization: accessToken,\n rivsRqstId: remoteIdentityVerificationSystemRequestId,\n ...rivSearchParams\n });\n\n return { fullUrl: `${rivHost}/?${urlParams.toString()}`, rivsRequestId: remoteIdentityVerificationSystemRequestId };\n };\n\n // PostMessage 핸들러 생성\n const createMessageHandler = ({ rivsRequestId }: RemoteIdentityVerificationSuccess, cleanup?: () => void) => {\n return (event: MessageEvent) => {\n try {\n const response: VerificationResponse =\n typeof event.data === 'string' ? JSON.parse(decodeURIComponent(event.data)) : event.data;\n\n if (response.command !== 'webClose') {\n return;\n }\n\n const { result, code } = response.args;\n\n switch (code) {\n case VERIFICATION_CODES.USER_CANCEL:\n console.log('=====사용자 종료!=====', { result, code });\n onCancel?.({ result, code });\n cleanup?.();\n break;\n\n case VERIFICATION_CODES.TOKEN_ERROR:\n case VERIFICATION_CODES.CAMERA_PERMISSION:\n case VERIFICATION_CODES.ATTEMPT_EXCEEDED:\n case VERIFICATION_CODES.SERVER_ERROR:\n console.log('=====비대면인증 실패!=====', { result, code });\n onError?.({ result, code }, { rivsRequestId });\n cleanup?.();\n break;\n\n case VERIFICATION_CODES.SUCCESS:\n console.log('=====비대면인증 성공!=====', { result, code });\n onSuccess?.({ result, code }, { rivsRequestId });\n cleanup?.();\n break;\n\n default:\n console.warn('Unknown verification code:', code);\n }\n } catch (error) {\n console.error('Failed to parse postMessage:', error);\n }\n };\n };\n\n return {\n createRemoteIdentityVerificationUrl,\n createMessageHandler\n };\n};\n\n/**\n * Iframe용 비대면인증시스템 훅\n * @param config\n * @returns\n */\nexport const useRemoteIdentityVerificationIframe = (config: UseRemoteIdentityVerificationProps) => {\n const { createMessageHandler, createRemoteIdentityVerificationUrl } = useRemoteIdentityVerification(config);\n const { isOpen, openModal, closeModal } = useModalState();\n const [remoteIdentityVerificationUrl, setRemoteIdentityVerificationUrl] = useState('');\n const [rivsRequestId, setRivsRequestId] = useState('');\n const [isCreatingUrl, setIsCreatingUrl] = useState(false);\n const [isIframeLoaded, setIsIframeLoaded] = useState(false);\n\n // iframe용 URL 생성\n const createIframeUrl = async () => {\n if (remoteIdentityVerificationUrl || isCreatingUrl) {\n return;\n }\n\n setIsCreatingUrl(true);\n setIsIframeLoaded(false);\n\n try {\n const { fullUrl, rivsRequestId } = await createRemoteIdentityVerificationUrl();\n setRemoteIdentityVerificationUrl(fullUrl);\n setRivsRequestId(rivsRequestId);\n } catch (error) {\n console.error('Failed to create URL:', error);\n throw error;\n } finally {\n setIsCreatingUrl(false);\n }\n };\n\n const openRivIframe = async () => {\n try {\n await createIframeUrl();\n openModal();\n } catch (error) {\n console.error('openRivIframe error::', error);\n\n await ModalUtils.alert('비대면 인증 URL 생성에 실패했습니다. 다시 시도해주세요.');\n config.onError?.(\n {\n result: 'N',\n code: VERIFICATION_CODES.TOKEN_ERROR\n },\n { rivsRequestId: '' }\n );\n }\n };\n\n const closeRivIframe = () => {\n setRemoteIdentityVerificationUrl('');\n setRivsRequestId('');\n setIsIframeLoaded(false);\n closeModal();\n };\n\n useEffect(() => {\n if (!remoteIdentityVerificationUrl) {\n return;\n }\n\n const messageHandler = createMessageHandler({ rivsRequestId }, closeRivIframe);\n MessageEventManager.getInstance().registerHandler('riv-iframe-handler', messageHandler);\n\n return () => MessageEventManager.getInstance().unregisterHandler('riv-iframe-handler');\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [remoteIdentityVerificationUrl, rivsRequestId]);\n\n // Iframe 컴포넌트\n const RivIframe = ({\n width = '100%',\n height = '100%',\n ...iframeProps\n }: React.IframeHTMLAttributes<HTMLIFrameElement> & {\n width?: string;\n height?: string;\n }) => {\n if (!remoteIdentityVerificationUrl) {\n return null;\n }\n\n return (\n <iframe\n src={remoteIdentityVerificationUrl}\n width={width}\n height={height}\n allow=\"camera *;\"\n onLoad={() => setIsIframeLoaded(true)}\n {...iframeProps}\n />\n );\n };\n\n // Modal + Iframe 컴포넌트\n const RivModalIframe = ({\n width = '100%',\n height = '100%',\n loadingComponent,\n ...iframeProps\n }: React.IframeHTMLAttributes<HTMLIFrameElement> & {\n width?: string;\n height?: string;\n loadingComponent?: React.ReactNode;\n }) => {\n const isLoading = isCreatingUrl || (!!remoteIdentityVerificationUrl && !isIframeLoaded);\n\n return (\n <>\n <Modal.Root isOpen={isOpen}>\n {isLoading && (loadingComponent || <Loading.Wait bodyText={'불러오는 중'} />)}\n <RivIframe\n width={width}\n height={height}\n allow=\"camera *;\"\n {...iframeProps}\n style={{\n background: 'var(--sales-color-background-100, #ffffff)',\n ...iframeProps?.style\n }}\n />\n </Modal.Root>\n </>\n );\n };\n\n return {\n RivModalIframe,\n RivIframe,\n\n openRivIframe,\n closeRivIframe,\n\n remoteIdentityVerificationUrl,\n isCreatingUrl,\n isFullyLoaded: isIframeLoaded\n };\n};\n\n/**\n * 팝업용 비대면인증시스템 훅\n * @param config\n * @returns\n */\nexport const useRemoteIdentityVerificationPopup = (config: UseRemoteIdentityVerificationProps) => {\n const { createRemoteIdentityVerificationUrl, createMessageHandler } = useRemoteIdentityVerification(config);\n const [isCreatingUrl, setIsCreatingUrl] = useState(false);\n const [rivsRequestId, setRivsRequestId] = useState('');\n const popupRef = useRef<Window | null>(null);\n\n const openPopup = async (target = '_blank', features?: string) => {\n // 이전 팝업이 열려있으면 닫기\n if (popupRef.current && !popupRef.current.closed) {\n popupRef.current.close();\n }\n\n setIsCreatingUrl(true);\n try {\n const { fullUrl, rivsRequestId } = await createRemoteIdentityVerificationUrl();\n\n const popup = window.open(fullUrl, target, features);\n\n if (!popup) {\n await ModalUtils.alert('팝업이 차단되었습니다. 팝업을 허용해주세요.');\n\n return;\n }\n\n setRivsRequestId(rivsRequestId);\n popupRef.current = popup;\n } catch (error) {\n console.error('openPopup error::', error);\n await ModalUtils.alert('비대면 인증 URL 생성에 실패했습니다. 다시 시도해주세요.');\n } finally {\n setIsCreatingUrl(false);\n }\n };\n const cleanPopup = () => {\n popupRef.current = null;\n };\n\n useEffect(() => {\n const messageHandler = createMessageHandler({ rivsRequestId }, cleanPopup);\n\n MessageEventManager.getInstance().registerHandler('riv-popup-handler', messageHandler);\n\n return () => MessageEventManager.getInstance().unregisterHandler('riv-popup-handler');\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [rivsRequestId]);\n\n return {\n openPopup,\n isCreatingUrl\n };\n};\n","import { useState } from 'react';\n\nimport { useDudExternalFileUploadMutation } from 'sales-frontend-api/method';\nimport { base64ToFile, fileToBase64 } from 'sales-frontend-utils';\n\nexport function DudUpload() {\n const [test, setTest] = useState<any>();\n const { mutateAsync, data } = useDudExternalFileUploadMutation();\n const up = async () => {\n //변환테스트\n const b = await fileToBase64(test.target.files[0]);\n const f = base64ToFile(b, 'test.png');\n\n mutateAsync({\n data: f,\n //테스트시, 가능한 증번 입력\n fileIdentifierValue: '123123123',\n preservationTerm: 1\n });\n };\n\n return (\n <>\n <input type=\"file\" onChange={setTest} />\n <input type=\"button\" value=\"up\" onClick={up} />\n <br />\n {JSON.stringify(data)}\n </>\n );\n}\n","import { useEffect, useState } from 'react';\n\nimport { useDudExternalFileDownloadQuery } from 'sales-frontend-api/method';\nimport { downloadBlob } from 'sales-frontend-utils';\n\nexport function DudDownload() {\n const [fileId, setFileId] = useState<string>('');\n const [enabled, setEnable] = useState<boolean>(false);\n const { data, isError, isSuccess } = useDudExternalFileDownloadQuery(\n {\n fileMgmtId: fileId,\n outputType: 'BINARY'\n },\n {\n enabled\n }\n );\n\n useEffect(() => {\n //타입체크\n console.log('data', data, data instanceof Blob, data instanceof File);\n\n //download file\n if (data instanceof Blob) {\n downloadBlob(data, 'test');\n\n return;\n }\n }, [data]);\n\n return (\n <>\n <input type=\"text\" value={fileId} onChange={(e) => setFileId(e.target.value)} />\n <input type=\"button\" value=\"down\" onClick={() => setEnable(true)} />\n {JSON.stringify(data)}\n {isError && <div>에러</div>}\n {isSuccess && <div>성공</div>}\n </>\n );\n}\n","import { useState } from 'react';\n\n/**\n * @property downloadTarget - 다운로드 대상 주소 또는, 주소를 리턴하는 함수\n * @property onSuccess - 다운로드 성공했을 때 호출\n * @property onError - 다운로드 실패했을 때 호출\n * @property fileName - 다운로드 파일명 , 없으면 자동생성\n */\nexport interface DownloadTargetInfo {\n downloadTarget: string | (() => Promise<string>);\n onSuccess?: () => void;\n onError?: () => void;\n fileName?: string;\n}\n\n/**\n * @property downloadTargetInfo - 다운로드 대상 정보\n * @property onAllSuccess - 모든 다운로드가 성공했을 때 호출\n * @property onAnyError - 하나라도 실패했을 때 호출\n * @property startIndex - 다운로드 시작 인덱스 또는 다운로드할 인덱스배열\n * @property keepGoingOnError - 하나라도 실패했을 때도 계속 다운로드를 수행할지 여부\n */\nexport interface DownloaderProps {\n downloadTargetInfo: DownloadTargetInfo[];\n onAllSuccess?: () => void;\n onAnyError?: () => void;\n startIndex?: number | number[];\n keepGoingOnError?: boolean;\n}\n\nexport const useDownloader = () => {\n const [isError, setIsError] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n\n\n /**\n * 파일 다운로드 헬퍼 함수\n */\n const downloadFile = async (url: string, fileName?: string) => {\n try {\n let downloadUrl = '';\n\n if (url.startsWith('http')) {\n //url type : http, https\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`Failed to download ${url}`);\n }\n const blob = await response.blob();\n downloadUrl = window.URL.createObjectURL(blob);\n } else if (url.startsWith('blob')) {\n //url type : blob\n downloadUrl = url;\n } else {\n //unknown type\n throw new Error(`unknown type : ${url}`);\n }\n\n\n const a = document.createElement('a');\n a.href = downloadUrl;\n a.download = fileName || url.split('/').pop() || 'download';\n document.body.appendChild(a);\n a.click();\n a.remove();\n window.URL.revokeObjectURL(downloadUrl);\n } catch (e) {\n console.error(e);\n throw e;\n }\n };\n\n /**\n * @description downloadTargetInfo 배열에 있는 정보를 루프를 돌면서 순차적으로 다운로드 받습니다.\n * 설정에 따라,\n * 실패하는 경우는 중단 또는 스킵하고,\n * 실패한 인덱스번호 또는 인덱스번호배열을 리턴한다.\n * @returns number[] | number\n * 실패한 인덱스번호 또는 인덱스번호배열 \n */\n const onClick = async (downloaderProps: DownloaderProps) => {\n const { downloadTargetInfo, onAllSuccess, onAnyError, startIndex = 0 } = downloaderProps;\n setIsLoading(true);\n setIsError(false);\n\n const failedIndex: number[] = [];\n const targetIndices: number[] = [];\n\n if (typeof startIndex === 'number') {\n for (let i = startIndex; i < downloadTargetInfo.length; i++) {\n targetIndices.push(i);\n }\n } else if (Array.isArray(startIndex)) {\n for (let i = 0; i < downloadTargetInfo.length; i++) {\n if (startIndex.includes(i)) {\n targetIndices.push(i);\n }\n }\n }\n\n for (const i of targetIndices) {\n const info = downloadTargetInfo[i];\n if (!info) {\n continue;\n }\n\n try {\n let url: string;\n if (typeof info.downloadTarget === 'function') {\n url = await info.downloadTarget();\n } else {\n url = info.downloadTarget;\n }\n\n if (!url) {\n throw new Error('Download URL is empty');\n }\n\n await downloadFile(url, info.fileName);\n info.onSuccess?.();\n } catch (error) {\n console.error(`Download failed at index ${i}`, error);\n info.onError?.();\n onAnyError?.();\n setIsError(true);\n\n failedIndex.push(i);\n\n if (downloaderProps.keepGoingOnError) {\n continue;\n }\n\n break; // Stop on error\n }\n }\n\n if (failedIndex.length === 0) {\n onAllSuccess?.();\n }\n\n setIsLoading(false);\n\n return failedIndex.length === 1 ? failedIndex[0] : failedIndex;\n };\n\n return {\n onClick,\n isLoading,\n isError\n };\n};\n","\n\nexport function GaIframe() {\n console.log('GaIframe');\n\n return <noscript><iframe src=\"https://www.googletagmanager.com/ns.html?id=GTM-PPT3LJ56\" height=\"0\" width=\"0\" style={{ display: 'none', visibility: 'hidden' }}></iframe></noscript>;\n\n}"],"names":["this","_MessageEventManager","cx","InputBox","Input","styles","chunk","filterList","nxlOnePropsState","TextField","rivsRequestId"],"mappings":"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AAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,C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","x_google_ignoreList":[2,3,6]}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/form/form-checkbox-button.tsx","../src/form/form-checkbox.tsx","../../../node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/dayjs.min.js","../../../node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/plugin/customParseFormat.js","../../utils/dist/index.js","../src/form/form-date-picker.tsx","../src/form/form-date-range-picker.tsx","../../../node_modules/.pnpm/classnames@2.5.1/node_modules/classnames/bind.js","../src/modal/common.tsx","../src/modal/standard/address-search/address-search-modal.tsx","../src/modal/standard/address-search/use-search-address.tsx","../src/modal/standard/bank-stock-search/constants.tsx","../src/modal/standard/bank-stock-search/use-bank-stock-search.tsx","../src/modal/standard/bank-stock-search/bank-stock-search-modal.tsx","../src/modal/standard/customer-search/use-customer-search.tsx","../src/modal/standard/customer-search/customer-search.tsx","../src/modal/standard/customer-search/customer-search-modal.tsx","../src/modal/standard/nationality-search/nationality-search-modal.tsx","../src/modal/standard/nationality-search/use-search-nationality.tsx","../src/modal/standard/nxl-one/use-nxl-one-modal.tsx","../src/modal/standard/visa-search/visa-search-modal.tsx","../src/modal/standard/visa-search/use-search-visa.tsx","../src/modal/pre-standard/dea-customer-search-modal/dea-customer-search-result.tsx","../src/modal/pre-standard/dea-customer-search-modal/dea-customer-search.tsx","../src/modal/pre-standard/dea-customer-search-modal/dea-customer-search-modal.tsx","../src/modal/pre-standard/employee-search-modal/constants.ts","../src/modal/pre-standard/employee-search-modal/employee-search-result.tsx","../src/modal/pre-standard/employee-search-modal/employee-search.tsx","../src/modal/pre-standard/employee-search-modal/employee-search-modal.tsx","../src/modal/pre-standard/job-search-modal/constants.ts","../src/modal/pre-standard/job-search-modal/job-search-detail.tsx","../src/modal/pre-standard/job-search-modal/job-search-category.tsx","../src/modal/pre-standard/job-search-modal/job-search-favorite.tsx","../src/modal/pre-standard/job-search-modal/job-search-result.tsx","../src/modal/pre-standard/job-search-modal/job-search.tsx","../src/modal/pre-standard/job-search-modal/use-job-search.tsx","../src/modal/pre-standard/job-vehicle-search-modal/job-vehicle-search-grade.tsx","../src/modal/pre-standard/vehicle-search-modal/vehicle-search.tsx","../src/modal/pre-standard/vehicle-search-modal/use-vehicle-search.tsx","../src/modal/pre-standard/job-vehicle-search-modal/use-job-vehicle-search.tsx","../src/modal/pre-standard/job-vehicle-search-modal/job-vehicle-search.tsx","../src/modal/pre-standard/organization-search-modal/organization-search-result.tsx","../src/modal/pre-standard/organization-search-modal/organization-search.tsx","../src/modal/pre-standard/organization-search-modal/organization-search-modal.tsx","../src/modal/pre-standard/vehicle-search-modal/vehicle-search-modal.tsx","../src/form/form-search-job-field.tsx","../src/form/form-segment.tsx","../src/form/form-select.tsx","../src/form/form-text-field.tsx","../src/step-indicator/step-indicator.tsx","../src/camera/attachment.tsx","../src/camera/resize.ts","../src/camera/use-camera.tsx","../src/canvas-paint/use-canvas-paint.ts","../src/canvas-paint/dummyData.ts","../src/remote-identity-verification/use-remote-identity-verification.tsx","../src/dud-fileupload/stories/upload.tsx","../src/dud-fileupload/stories/download.tsx","../src/downloader/use-downloader.tsx","../src/ga/ga-iframe.tsx"],"sourcesContent":["import { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { CheckboxButton, type CheckboxButtonProps } from 'sales-frontend-design-system';\n\nexport const FormCheckboxButton = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n children,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled'> & Omit<CheckboxButtonProps, 'id'>) => {\n const { field, fieldState } = useController({ name, control, disabled });\n\n return (\n <CheckboxButton\n {...props}\n {...field}\n id={field.name}\n checked={field.value ?? false}\n error={fieldState.invalid}\n onChange={(checked) => {\n field.onChange(checked);\n props.onChange?.(checked);\n }}\n >\n {children}\n </CheckboxButton>\n );\n};\n","import { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { Checkbox, CheckboxProps } from 'sales-frontend-design-system';\n\nexport const FormCheckbox = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n children,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled'> & Omit<CheckboxProps, 'id'>) => {\n const { field } = useController({ name, control, disabled });\n\n return (\n <Checkbox {...props} {...field} id={field.name} checked={field.value} onChange={field.onChange}>\n {children}\n </Checkbox>\n );\n};\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),k=_.prototype;return O.prototype=k,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){k[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_customParseFormat=t()}(this,(function(){\"use strict\";var e={LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"},t=/(\\[[^[]*\\])|([-_:/.,()\\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\\d/,r=/\\d\\d/,i=/\\d\\d?/,o=/\\d*[^-_:/,()\\s\\d]+/,s={},a=function(e){return(e=+e)+(e>68?1900:2e3)};var f=function(e){return function(t){this[e]=+t}},h=[/[+-]\\d\\d:?(\\d\\d)?|Z/,function(e){(this.zone||(this.zone={})).offset=function(e){if(!e)return 0;if(\"Z\"===e)return 0;var t=e.match(/([+-]|\\d\\d)/g),n=60*t[1]+(+t[2]||0);return 0===n?0:\"+\"===t[0]?-n:n}(e)}],u=function(e){var t=s[e];return t&&(t.indexOf?t:t.s.concat(t.f))},d=function(e,t){var n,r=s.meridiem;if(r){for(var i=1;i<=24;i+=1)if(e.indexOf(r(i,0,t))>-1){n=i>12;break}}else n=e===(t?\"pm\":\"PM\");return n},c={A:[o,function(e){this.afternoon=d(e,!1)}],a:[o,function(e){this.afternoon=d(e,!0)}],Q:[n,function(e){this.month=3*(e-1)+1}],S:[n,function(e){this.milliseconds=100*+e}],SS:[r,function(e){this.milliseconds=10*+e}],SSS:[/\\d{3}/,function(e){this.milliseconds=+e}],s:[i,f(\"seconds\")],ss:[i,f(\"seconds\")],m:[i,f(\"minutes\")],mm:[i,f(\"minutes\")],H:[i,f(\"hours\")],h:[i,f(\"hours\")],HH:[i,f(\"hours\")],hh:[i,f(\"hours\")],D:[i,f(\"day\")],DD:[r,f(\"day\")],Do:[o,function(e){var t=s.ordinal,n=e.match(/\\d+/);if(this.day=n[0],t)for(var r=1;r<=31;r+=1)t(r).replace(/\\[|\\]/g,\"\")===e&&(this.day=r)}],w:[i,f(\"week\")],ww:[r,f(\"week\")],M:[i,f(\"month\")],MM:[r,f(\"month\")],MMM:[o,function(e){var t=u(\"months\"),n=(u(\"monthsShort\")||t.map((function(e){return e.slice(0,3)}))).indexOf(e)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[o,function(e){var t=u(\"months\").indexOf(e)+1;if(t<1)throw new Error;this.month=t%12||t}],Y:[/[+-]?\\d+/,f(\"year\")],YY:[r,function(e){this.year=a(e)}],YYYY:[/\\d{4}/,f(\"year\")],Z:h,ZZ:h};function l(n){var r,i;r=n,i=s&&s.formats;for(var o=(n=r.replace(/(\\[[^\\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var o=r&&r.toUpperCase();return n||i[r]||e[r]||i[o].replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,n){return t||n.slice(1)}))}))).match(t),a=o.length,f=0;f<a;f+=1){var h=o[f],u=c[h],d=u&&u[0],l=u&&u[1];o[f]=l?{regex:d,parser:l}:h.replace(/^\\[|\\]$/g,\"\")}return function(e){for(var t={},n=0,r=0;n<a;n+=1){var i=o[n];if(\"string\"==typeof i)r+=i.length;else{var s=i.regex,f=i.parser,h=e.slice(r),u=s.exec(h)[0];f.call(t,u),e=e.replace(u,\"\")}}return function(e){var t=e.afternoon;if(void 0!==t){var n=e.hours;t?n<12&&(e.hours+=12):12===n&&(e.hours=0),delete e.afternoon}}(t),t}}return function(e,t,n){n.p.customParseFormat=!0,e&&e.parseTwoDigitYear&&(a=e.parseTwoDigitYear);var r=t.prototype,i=r.parse;r.parse=function(e){var t=e.date,r=e.utc,o=e.args;this.$u=r;var a=o[1];if(\"string\"==typeof a){var f=!0===o[2],h=!0===o[3],u=f||h,d=o[2];h&&(d=o[2]),s=this.$locale(),!f&&d&&(s=n.Ls[d]),this.$d=function(e,t,n,r){try{if([\"x\",\"X\"].indexOf(t)>-1)return new Date((\"X\"===t?1e3:1)*e);var i=l(t)(e),o=i.year,s=i.month,a=i.day,f=i.hours,h=i.minutes,u=i.seconds,d=i.milliseconds,c=i.zone,m=i.week,M=new Date,Y=a||(o||s?1:M.getDate()),p=o||M.getFullYear(),v=0;o&&!s||(v=s>0?s-1:M.getMonth());var D,w=f||0,g=h||0,y=u||0,L=d||0;return c?new Date(Date.UTC(p,v,Y,w,g,y,L+60*c.offset*1e3)):n?new Date(Date.UTC(p,v,Y,w,g,y,L)):(D=new Date(p,v,Y,w,g,y,L),m&&(D=r(D).week(m).toDate()),D)}catch(e){return new Date(\"\")}}(t,a,r,n),this.init(),d&&!0!==d&&(this.$L=this.locale(d).$L),u&&t!=this.format(a)&&(this.$d=new Date(\"\")),s={}}else if(a instanceof Array)for(var c=a.length,m=1;m<=c;m+=1){o[1]=a[m-1];var M=n.apply(this,o);if(M.isValid()){this.$d=M.$d,this.$L=M.$L,this.init();break}m===c&&(this.$d=new Date(\"\"))}else i.call(this,e)}}}));","import dayjs from 'dayjs';\nimport customParseFormat from 'dayjs/plugin/customParseFormat.js';\n\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n\n// src/utils/timing-utils.ts\nfunction throttle(func, delay) {\n let lastCall = 0;\n let timeout = null;\n return (...args) => {\n const now = Date.now();\n if (now - lastCall >= delay) {\n lastCall = now;\n func(...args);\n } else if (!timeout) {\n timeout = setTimeout(\n () => {\n lastCall = Date.now();\n func(...args);\n timeout = null;\n },\n delay - (now - lastCall)\n );\n }\n };\n}\nfunction debounce(func, delay) {\n let timeout = null;\n return (...args) => {\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(() => {\n func(...args);\n timeout = null;\n }, delay);\n };\n}\n\n// src/utils/cookie-utils.ts\nvar getCookie = (name) => {\n if (typeof document === \"undefined\") {\n return \"\";\n }\n const match = document.cookie.match(new RegExp(`(^|; *)${name}=([^;]*)`));\n return match ? decodeURIComponent(match[2] || \"\") : \"\";\n};\nvar setCookie = (name, value, options = {}) => {\n if (typeof document === \"undefined\") {\n return;\n }\n let cookieString = `${name}=${encodeURIComponent(value)}`;\n if (options.expires) {\n let expiresDate;\n if (typeof options.expires === \"number\") {\n expiresDate = /* @__PURE__ */ new Date();\n expiresDate.setDate(expiresDate.getDate() + options.expires);\n } else {\n expiresDate = options.expires;\n }\n cookieString += `; expires=${expiresDate.toUTCString()}`;\n }\n cookieString += `; path=${options.path || \"/\"}`;\n if (options.domain) {\n cookieString += `; domain=${options.domain}`;\n }\n if (options.secure) {\n cookieString += \"; secure\";\n }\n document.cookie = cookieString;\n};\nvar deleteCookie = (name, options = {}) => {\n setCookie(name, \"\", { ...options, expires: -1 });\n};\n\n// src/utils/environment-utils.ts\nvar getSubdomain = (hostname) => {\n if (!hostname || hostname === \"localhost\" || hostname === \"127.0.0.1\") {\n return \"\";\n }\n const parts = hostname.split(\".\");\n if (parts.length < 3) {\n return \"\";\n }\n return parts[0] ?? \"\";\n};\nvar getEnvironmentFromHostname = (hostname) => {\n const debugModeEnv = getCookie(\"dsp-debug-mode-env\")?.toLowerCase();\n if (debugModeEnv) {\n return debugModeEnv;\n }\n const subDomain = getSubdomain(hostname);\n if (hostname === \"localhost\" || hostname === \"127.0.0.1\" || hostname.startsWith(\"localhost\")) {\n return \"local\";\n }\n if (subDomain.includes(`dev`)) {\n return \"dev\";\n }\n if (subDomain.includes(\"stg\")) {\n return \"stg\";\n }\n return \"prd\";\n};\nvar isClient = () => {\n try {\n return !!window;\n } catch {\n return false;\n }\n};\nvar isStorybookEnv = () => {\n try {\n return window.isStorybookEnv === true;\n } catch {\n return false;\n }\n};\nvar getBusinessWorkDivisionCode = () => {\n return location.pathname.split(\"/\")[1] ?? \"\";\n};\nvar getServicePath = () => {\n if (typeof window.isStorybookEnv === \"boolean\") {\n return \"\";\n } else {\n return `/${getBusinessWorkDivisionCode()}`;\n }\n};\nvar getApiHostNameFromEnvironment = (currentHostname, forceApiHostName) => {\n if (forceApiHostName) {\n return forceApiHostName;\n }\n const environment = getEnvironmentFromHostname(currentHostname);\n switch (environment) {\n case \"dev\":\n return `https://nxl-dsp-dev.hanwhalife.com`;\n case \"local\":\n case \"stg\":\n return `https://nxl-dsp-stg.hanwhalife.com`;\n case \"prd\":\n return `https://nxl-dsp.hanwhalife.com`;\n default:\n console.warn(\"DSP API environment is not defined\");\n return \"\";\n }\n};\nvar getCdnHostNameFromEnvironment = (currentHostname, forceApiHostName) => {\n if (!isClient()) {\n return \"\";\n }\n if (forceApiHostName) {\n return forceApiHostName;\n }\n const environment = getEnvironmentFromHostname(currentHostname);\n switch (environment) {\n case \"dev\":\n return `https://dev-dsp-static.hanwhalife.com`;\n case \"local\":\n case \"stg\":\n return `https://stg-dsp-static.hanwhalife.com`;\n case \"prd\":\n return `https://dsp-static.hanwhalife.com'`;\n default:\n console.warn(\"DSP environment is not defined\");\n return \"\";\n }\n};\nvar getDudApiBasePathFromEnvironment = (hostname) => {\n if (!isClient()) {\n return \"\";\n }\n const environment = getEnvironmentFromHostname(hostname || location.hostname);\n switch (environment) {\n /**\n * local에서 호출시, rewrite동작을 위해 상대주소를 호출합니다.\n * (cors이슈 해결을 위해 필수)\n */\n case \"local\":\n return `${getServicePath()}/api/dud`;\n /**\n * local 이 아닌 환경에서는 전체주소를 호출합니다.\n */\n case \"dev\":\n return `https://dsp-dud-dev.hanwhalife.com:10101/api`;\n case \"stg\":\n return `https://dsp-dud-stg.hanwhalife.com:10102/api`;\n case \"prd\":\n return `https://dsp-dud.hanwhalife.com/api`;\n default:\n console.warn(\"DUD API environment is not defined\");\n return \"\";\n }\n};\nvar getDspApiBasePathFromEnvironment = (serviceCodeTo, hostname) => {\n if (!isClient()) {\n return \"\";\n }\n const environment = getEnvironmentFromHostname(hostname || location.hostname);\n switch (environment) {\n /**\n * local에서 호출시, rewrite동작을 위해 상대주소를 호출합니다.\n * (cors이슈 해결을 위해 필수)\n */\n case \"local\":\n return `${getServicePath()}/api/${serviceCodeTo}`;\n /**\n * local 이 아닌 환경에서는 전체주소를 호출합니다.\n */\n case \"dev\":\n return `https://nxl-dsp-dev.hanwhalife.com/api/${serviceCodeTo}`;\n case \"stg\":\n return `https://nxl-dsp-stg.hanwhalife.com/api/${serviceCodeTo}`;\n case \"prd\":\n return `https://nxl-dsp.hanwhalife.com/api/${serviceCodeTo}`;\n default:\n console.warn(\"DSP API environment is not defined\");\n return \"\";\n }\n};\nvar getNlcHostFromEnvironment = (hostname) => {\n if (!isClient()) {\n return \"\";\n }\n const environment = getEnvironmentFromHostname(hostname || location.hostname);\n switch (environment) {\n case \"local\":\n return `https://nxl-nlc-stg.hanwhalife.com`;\n case \"dev\":\n return `https://nxl-nlc-dev.hanwhalife.com`;\n case \"stg\":\n return `https://nxl-nlc-stg.hanwhalife.com`;\n case \"prd\":\n return `https://nxl-nlc.hanwhalife.com`;\n default:\n console.warn(\"NLC environment is not defined\");\n return \"\";\n }\n};\n\n// src/utils/user-agent-utils.ts\nvar getDspExecutionEnvironment = () => {\n if (!isClient()) {\n return \"unknown\";\n }\n if (window.n2Bridge) {\n return \"android-webview\";\n }\n if (window.webkit?.messageHandlers?.n2Bridge) {\n return \"ios-webview\";\n }\n if (window.self !== window.top) {\n return \"iframe\";\n }\n return \"web\";\n};\nvar isProductionApp = () => {\n if (!isClient()) {\n return false;\n }\n return isDspApp() || isFpPlannerApp();\n};\nvar checkUserAgentDspApp = (userAgent) => {\n return userAgent.toLowerCase().includes(\"sspapp\");\n};\nvar isDspApp = () => {\n if (!isClient()) {\n return false;\n }\n const environment = getDspExecutionEnvironment();\n return checkUserAgentDspApp(navigator.userAgent) && (environment === \"android-webview\" || environment === \"ios-webview\");\n};\nvar isFpPlannerApp = () => {\n if (!isClient()) {\n return false;\n }\n const environment = getDspExecutionEnvironment();\n return checkUserAgentDspApp(navigator.userAgent) === false && (environment === \"android-webview\" || environment === \"ios-webview\");\n};\nvar isSalesPortal = () => {\n if (!isClient()) {\n return false;\n }\n const environment = getDspExecutionEnvironment();\n return environment === \"iframe\";\n};\nvar isTablet = (userAgent) => {\n const ua = userAgent.toLowerCase();\n return (\n // Apple 태블릿\n ua.includes(\"ipad\") || // Android 태블릿 (Mobile 키워드 없음)\n ua.includes(\"android\") && !ua.includes(\"mobile\") || // 명시적 태블릿 키워드\n ua.includes(\"tablet\") || // Amazon 태블릿\n ua.includes(\"kindle\") || ua.includes(\"silk\") || /kf[a-z]{2}wi|kftt/.test(ua) || // BlackBerry 태블릿\n ua.includes(\"playbook\") || // 삼성 갤럭시 탭 (개선된 정규식)\n /gt-p\\d{4}|sm-[tp]\\d{3}/.test(ua) || // 구글 넥서스/픽셀 태블릿\n /nexus (?:[789]|10)|pixel [cs]|pixel slate/.test(ua) || // 기타 브랜드 태블릿\n /xoom|transformer|mediapad|mipad|tab\\s/.test(ua) || // Windows 태블릿 (개선된 조건)\n ua.includes(\"windows\") && (ua.includes(\"touch\") || ua.includes(\"tablet\")) || ua.includes(\"surface\")\n );\n};\nvar isPhone = (userAgent) => {\n const ua = userAgent.toLowerCase();\n return (\n // Apple 모바일\n ua.includes(\"iphone\") || ua.includes(\"ipod\") || // Android 스마트폰 (Mobile 키워드 있음)\n ua.includes(\"android\") && ua.includes(\"mobile\") || // BlackBerry\n ua.includes(\"blackberry\") || ua.includes(\"bb10\") || // Windows Mobile\n ua.includes(\"windows phone\") || ua.includes(\"windows mobile\") || ua.includes(\"iemobile\") || // Opera Mobile\n ua.includes(\"opera mini\") || ua.includes(\"opera mobi\") || // 기타 모바일 브라우저\n ua.includes(\"mobile\") && (ua.includes(\"firefox\") || ua.includes(\"chrome\") || ua.includes(\"safari\") || ua.includes(\"edge\")) || // 모바일 키워드 (태블릿 제외)\n ua.includes(\"mobile\") && !ua.includes(\"tablet\") || // 삼성 갤럭시 폰 (개선)\n /sm-[a-z]\\d{3}[a-z]?|gt-[a-z]\\d{4}/.test(ua) || // LG, HTC 폰\n /lg-[a-z]\\d{3,4}|htc[_\\s]/.test(ua) || // 화웨이/샤오미 등 (개선)\n /huawei|honor|redmi|mi[\\s\\d]|oneplus|oppo|vivo/.test(ua)\n );\n};\nvar isPc = (userAgent) => {\n const ua = userAgent.toLowerCase();\n return !isPhone(ua) && !isTablet(ua);\n};\nvar getFormFactorFromUserAgent = (userAgent) => {\n if (!userAgent) {\n return \"pc\";\n }\n const ua = userAgent.toLowerCase();\n if (isTablet(ua)) {\n return \"tablet\";\n }\n if (isPhone(ua)) {\n return \"phone\";\n }\n return \"pc\";\n};\nvar getOSName = (userAgent) => {\n if (!userAgent) {\n return \"unknown\";\n }\n const ua = userAgent.toLowerCase();\n if (/iphone|ipad|ipod/.test(ua)) {\n return \"ios\";\n }\n if (ua.includes(\"android\")) {\n return \"android\";\n }\n if (ua.includes(\"windows\") || ua.includes(\"win32\") || ua.includes(\"win64\")) {\n return \"windows\";\n }\n if (ua.includes(\"mac os x\") || ua.includes(\"macos\") || ua.includes(\"macintosh\")) {\n return \"mac\";\n }\n if (ua.includes(\"linux\") && !ua.includes(\"android\")) {\n return \"linux\";\n }\n return \"unknown\";\n};\nvar getCurrentOSName = () => {\n if (!isClient() || typeof navigator === \"undefined\") {\n return \"unknown\";\n }\n return getOSName(navigator.userAgent);\n};\nvar getOSVersion = (userAgent) => {\n if (!userAgent) {\n return \"unknown\";\n }\n const ua = userAgent.toLowerCase();\n const iosMatch = ua.match(/os (\\d+)_(\\d+)(?:_(\\d+))?/);\n if (iosMatch && iosMatch.length >= 3) {\n const major = iosMatch[1];\n const minor = iosMatch[2];\n const patch = iosMatch[3];\n return patch ? `${major}.${minor}.${patch}` : `${major}.${minor}`;\n }\n const androidMatch = ua.match(/android (\\d+(?:\\.\\d+)*)/);\n if (androidMatch && androidMatch[1]) {\n return androidMatch[1];\n }\n const windowsMatch = ua.match(/windows nt (\\d+\\.\\d+)/);\n if (windowsMatch && windowsMatch[1]) {\n const version = windowsMatch[1];\n const windowsVersionMap = {\n \"10.0\": \"10/11\",\n \"6.3\": \"8.1\",\n \"6.2\": \"8\",\n \"6.1\": \"7\",\n \"6.0\": \"Vista\",\n \"5.1\": \"XP\"\n };\n return windowsVersionMap[version] || version;\n }\n const macMatch = ua.match(/mac os x (\\d+)_(\\d+)(?:_(\\d+))?/);\n if (macMatch && macMatch.length >= 3) {\n const major = macMatch[1];\n const minor = macMatch[2];\n const patch = macMatch[3];\n return patch ? `${major}.${minor}.${patch}` : `${major}.${minor}`;\n }\n return \"unknown\";\n};\nvar getBrowserName = (userAgent) => {\n if (!userAgent) {\n return \"unknown\";\n }\n const ua = userAgent.toLowerCase();\n if (ua.includes(\"edg/\") || ua.includes(\"edge/\")) {\n return \"edge\";\n }\n if (ua.includes(\"samsungbrowser\")) {\n return \"samsung\";\n }\n if (ua.includes(\"opr/\") || ua.includes(\"opera\")) {\n return \"opera\";\n }\n if (ua.includes(\"chrome\") && !ua.includes(\"edg\")) {\n return \"chrome\";\n }\n if (ua.includes(\"firefox\")) {\n return \"firefox\";\n }\n if (ua.includes(\"safari\") && !ua.includes(\"chrome\")) {\n return \"safari\";\n }\n return \"unknown\";\n};\nvar getBrowserVersion = (userAgent) => {\n if (!userAgent) {\n return \"unknown\";\n }\n const ua = userAgent.toLowerCase();\n const edgMatch = ua.match(/edg\\/(\\d+(?:\\.\\d+)*)/);\n if (edgMatch && edgMatch[1]) {\n return edgMatch[1];\n }\n const samsungMatch = ua.match(/samsungbrowser\\/(\\d+(?:\\.\\d+)*)/);\n if (samsungMatch && samsungMatch[1]) {\n return samsungMatch[1];\n }\n const operaMatch = ua.match(/(?:opr|opera)\\/(\\d+(?:\\.\\d+)*)/);\n if (operaMatch && operaMatch[1]) {\n return operaMatch[1];\n }\n const chromeMatch = ua.match(/chrome\\/(\\d+(?:\\.\\d+)*)/);\n if (chromeMatch && chromeMatch[1] && !ua.includes(\"edg\")) {\n return chromeMatch[1];\n }\n const firefoxMatch = ua.match(/firefox\\/(\\d+(?:\\.\\d+)*)/);\n if (firefoxMatch && firefoxMatch[1]) {\n return firefoxMatch[1];\n }\n const safariMatch = ua.match(/version\\/(\\d+(?:\\.\\d+)*)/);\n if (safariMatch && safariMatch[1] && ua.includes(\"safari\") && !ua.includes(\"chrome\")) {\n return safariMatch[1];\n }\n return \"unknown\";\n};\nvar getCurrentOSVersion = () => {\n if (!isClient() || typeof navigator === \"undefined\") {\n return \"unknown\";\n }\n return getOSVersion(navigator.userAgent);\n};\nvar getCurrentBrowserName = () => {\n if (!isClient() || typeof navigator === \"undefined\") {\n return \"unknown\";\n }\n return getBrowserName(navigator.userAgent);\n};\nvar getCurrentBrowserVersion = () => {\n if (!isClient() || typeof navigator === \"undefined\") {\n return \"unknown\";\n }\n return getBrowserVersion(navigator.userAgent);\n};\nvar getOrCreateDeviceId = () => {\n if (typeof window === \"undefined\") {\n return \"\";\n }\n const STORAGE_KEY = \"dsp_device_id\";\n let deviceId = localStorage.getItem(STORAGE_KEY);\n if (!deviceId) {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).substring(2, 15);\n deviceId = `dsp-web-${timestamp}-${random}`;\n try {\n localStorage.setItem(STORAGE_KEY, deviceId);\n } catch (error) {\n console.warn(\"[DeviceId] localStorage \\uC800\\uC7A5 \\uC2E4\\uD328:\", error);\n }\n }\n return deviceId;\n};\nvar getDeviceModel = () => {\n if (!isClient()) {\n return \"\";\n }\n const ua = navigator.userAgent;\n if (/iPad/.test(ua)) {\n return \"iPad\";\n }\n if (/iPhone/.test(ua)) {\n return \"iPhone\";\n }\n if (/iPod/.test(ua)) {\n return \"iPod Touch\";\n }\n if (/SM-[A-Z0-9]+/.test(ua)) {\n const match = ua.match(/SM-[A-Z0-9]+/);\n return match ? `Samsung ${match[0]}` : \"Samsung\";\n }\n if (/Pixel/.test(ua)) {\n const match = ua.match(/Pixel [0-9]+[a-zA-Z]*/);\n return match ? `Google ${match[0]}` : \"Google Pixel\";\n }\n if (/Mi\\s|Redmi|POCO/.test(ua)) {\n return \"Xiaomi\";\n }\n if (/HUAWEI/.test(ua)) {\n return \"Huawei\";\n }\n if (/OnePlus/.test(ua)) {\n return \"OnePlus\";\n }\n if (/Windows/.test(ua)) {\n return \"Windows PC\";\n }\n if (/Mac OS X/.test(ua)) {\n return \"Mac\";\n }\n if (/Linux/.test(ua)) {\n return \"Linux PC\";\n }\n return \"Unknown\";\n};\nvar isAndroidDevice = () => {\n if (isClient() === false) {\n return false;\n }\n return /Android/i.test(navigator.userAgent);\n};\nvar isIosDevice = () => {\n if (isClient() === false) {\n return false;\n }\n return /iPhone|iPad|iPod/i.test(navigator.userAgent);\n};\nvar isAndroidWebView = () => {\n return getDspExecutionEnvironment() === \"android-webview\";\n};\nvar isIosWebView = () => {\n return getDspExecutionEnvironment() === \"ios-webview\";\n};\n\n// src/utils/event-handler-utils.ts\nvar _MessageEventManager = class _MessageEventManager {\n constructor() {\n __publicField(this, \"handlers\", /* @__PURE__ */ new Map());\n window.addEventListener(\"message\", this.handleMessage.bind(this));\n }\n static getInstance() {\n if (!_MessageEventManager.instance) {\n _MessageEventManager.instance = new _MessageEventManager();\n }\n return _MessageEventManager.instance;\n }\n /**\n *\n * @param event\n */\n handleMessage(event) {\n for (const [key, handler] of this.handlers) {\n try {\n handler(event);\n } catch (error) {\n console.error(`Message handler ${key} error:`, error);\n }\n }\n }\n /**\n * 이벤트 헨들러 함수를 등록합니다.\n * @param key\n * @param handler\n */\n registerHandler(key, handler) {\n this.handlers.set(key, handler);\n }\n /**\n * 이벤트 핸들러 함수를 삭제합니다.\n * @param key\n */\n unregisterHandler(key) {\n this.handlers.delete(key);\n }\n};\n__publicField(_MessageEventManager, \"instance\");\nvar MessageEventManager = _MessageEventManager;\n\n// src/utils/canvas-utils.ts\nvar convertTextToImg = ({\n targetStr,\n canvasWidth,\n canvasHeight,\n backgroundColor,\n fontColor,\n fontSize,\n fontWeight,\n fontFamily = `'Malgun Gothic', '\\uB9D1\\uC740 \\uACE0\\uB515', 'sans-serif', 'Arial'`\n}) => {\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n throw new Error(\"Canvas context\\uB97C \\uAC00\\uC838\\uC62C \\uC218 \\uC5C6\\uC2B5\\uB2C8\\uB2E4.\");\n }\n const defaultHeight = 150;\n const calculatedWidth = targetStr.length * 70;\n canvas.width = canvasWidth ?? calculatedWidth;\n canvas.height = canvasHeight ?? defaultHeight;\n if (backgroundColor) {\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n }\n ctx.fillStyle = fontColor ?? \"black\";\n ctx.textAlign = \"center\";\n ctx.font = `${fontWeight ?? \"bold\"} ${fontSize ?? 75}px ${fontFamily}`;\n console.log(\"font\", `${fontWeight ?? \"bold\"} ${fontSize ?? 75}px ${fontFamily}`);\n ctx.textBaseline = \"middle\";\n ctx.fillText(targetStr, canvas.width / 2, canvas.height / 2);\n return canvas.toDataURL();\n};\nfunction drawImageResizeCentered(base64, size) {\n return new Promise((resolve) => {\n const { canvasHeight, canvasWidth } = size;\n const canvas = document.createElement(\"canvas\");\n canvas.width = canvasWidth;\n canvas.height = canvasHeight;\n const ctx = canvas.getContext(\"2d\");\n const img = new Image();\n img.src = base64;\n img.onload = () => {\n const imageWidth = img.width;\n const imageHeight = img.height;\n const canvasRatio = canvasWidth / canvasHeight;\n const imageRatio = imageWidth / imageHeight;\n let newWidth;\n let newHeight;\n if (imageRatio > canvasRatio) {\n newWidth = canvasWidth;\n newHeight = newWidth / imageRatio;\n } else {\n newHeight = canvasHeight;\n newWidth = newHeight * imageRatio;\n }\n const x = (canvasWidth - newWidth) / 2;\n const y = (canvasHeight - newHeight) / 2;\n ctx?.clearRect(0, 0, canvasWidth, canvasHeight);\n ctx?.drawImage(img, x, y, newWidth, newHeight);\n resolve(canvas.toDataURL());\n };\n });\n}\n\n// src/utils/file-utils.ts\nfunction base64ToBlob(base64String, contentType = \"\") {\n const regex = /^data:([a-zA-Z0-9/+.-]+);base64,/;\n const matches = base64String.match(regex);\n if (matches === null) {\n throw new Error(\"Invalid base64 string\");\n }\n const contentTypeFinal = contentType || matches[1];\n const byteCharacters = atob(base64String.replace(regex, \"\"));\n const byteNumbers = new Array(byteCharacters.length);\n for (let i = 0; i < byteCharacters.length; i++) {\n byteNumbers[i] = byteCharacters.charCodeAt(i);\n }\n const byteArray = new Uint8Array(byteNumbers);\n return new Blob([byteArray], { type: contentTypeFinal });\n}\nfunction base64ToFile(base64String, fileName, contentType = \"\") {\n const blob = base64ToBlob(base64String, contentType);\n if (!blob) {\n throw new Error(\"Invalid base64 string\");\n }\n return blobToFile(blob, fileName);\n}\nfunction blobToFile(blob, fileName) {\n return new File([blob], fileName, {\n type: blob.type,\n lastModified: Date.now()\n });\n}\nasync function fileToBase64(file) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => {\n if (typeof reader.result === \"string\") {\n resolve(reader.result);\n } else {\n reject(new Error(\"Invalid file type\"));\n }\n };\n reader.onerror = (error) => {\n reject(error);\n };\n reader.readAsDataURL(file);\n });\n}\nfunction getExt(data) {\n if (typeof data === \"string\") {\n return data.split(\".\").pop();\n }\n if (data instanceof File) {\n return data.name.split(\"/\").pop();\n }\n if (data instanceof Blob) {\n return data.type.split(\"/\").pop();\n }\n}\nasync function objectUrlToBlob(objectUrl) {\n try {\n const response = await fetch(objectUrl);\n const blob = await response.blob();\n return blob;\n } catch (error) {\n console.error(\"Error converting object URL to Blob:\", error);\n throw error;\n }\n}\nasync function objectUrlToBase64(objectUrl) {\n const blob = await objectUrlToBlob(objectUrl);\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onloadend = () => {\n if (typeof reader.result === \"string\") {\n resolve(reader.result);\n } else {\n reject(new Error(\"Invalid file type\"));\n }\n };\n reader.onerror = reject;\n reader.readAsDataURL(blob);\n });\n}\nfunction downloadBlob(blob, filename) {\n const url = URL.createObjectURL(blob);\n const link = document.createElement(\"a\");\n link.style.display = \"none\";\n link.href = url;\n link.download = `${filename}.${getExt(blob)}`;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n}\nasync function imageUrlToFileFetch(imageUrl) {\n const headers = new Headers();\n headers.append(\"cache-control\", \"no-cache\");\n const resImage = await fetch(imageUrl, { headers });\n const blob = await resImage.blob();\n const { type } = blob;\n const name = type.split(\"/\").join(\".\");\n const file = new File([blob], name, { type });\n return file;\n}\nasync function imageUrlToFile(imageUrl) {\n const fileConvertTypeCookieKey = \"dsp-debug-mode-file-convert-type\";\n const fileConvertType = getCookie(fileConvertTypeCookieKey);\n if (fileConvertType === \"fetch\") {\n return await imageUrlToFileFetch(imageUrl);\n }\n if (fileConvertType === \"xhr\") {\n return await imageUrlToFileWithXMLHttpRequest(imageUrl);\n }\n return await imageUrlToFileWithCanvas(imageUrl);\n}\nasync function imageUrlToFileWithCanvas(imageUrl) {\n const newImage = new Image();\n newImage.src = imageUrl;\n newImage.crossOrigin = \"Anonymous\";\n return new Promise((resolve, reject) => {\n newImage.onload = () => {\n const canvas = document.createElement(\"canvas\");\n canvas.width = newImage.width;\n canvas.height = newImage.height;\n const ctx = canvas.getContext(\"2d\");\n if (ctx) {\n ctx.drawImage(newImage, 0, 0);\n canvas.toBlob((blob) => {\n if (blob) {\n const ext = getExt(imageUrl);\n const file = new File([blob], `image.${ext}`, { type: blob.type });\n resolve(file);\n }\n });\n }\n };\n newImage.onerror = (e) => {\n reject(JSON.stringify(e));\n };\n });\n}\nasync function imageUrlToFileWithXMLHttpRequest(imageUrl) {\n const xhr = new XMLHttpRequest();\n xhr.open(\"GET\", imageUrl, true);\n xhr.responseType = \"blob\";\n xhr.send();\n return new Promise((resolve, reject) => {\n xhr.onload = () => {\n if (xhr.status === 200) {\n const blob = xhr.response;\n const file = new File([blob], `image.${getExt(imageUrl)}`, { type: blob.type });\n resolve(file);\n } else {\n reject(new Error(`Failed to load image: ${xhr.status}`));\n }\n };\n xhr.onerror = (e) => {\n reject(JSON.stringify(e));\n };\n });\n}\n\n// src/utils/astx2/astx2.min.js\nvar astx2_min_default = \"/* eslint-disable */\\n/* ASTx 1.3 | (C) Copyright AhnLab, Inc. | $Revision: 32070 $ */\\nvar $ASTX2_CONST = {\\n ERROR_SUCCESS: 0,\\n ERROR_FAILED: 101,\\n ERROR_NOINIT: 102,\\n ERROR_NOTINST: 103,\\n ERROR_NOTSUPPORTED: 104,\\n ERROR_NOCONNECT: 105,\\n ERROR_NCK: 106,\\n ERROR_ERR: 107,\\n ERROR_NSP: 108,\\n ERROR_PARAM: 109,\\n ERROR_EXCESS: 110,\\n ERROR_NEEDUPDATE: 111,\\n OPTION_NONE2E: 1,\\n OPTION_AUTOFOCUS: 2,\\n OPTION_AUTOSETTEXT: 4,\\n OPTION_E2EFORM: 8,\\n OPTION_E2EFORM_NOENC: 16,\\n OPTION_E2EFORM_ALLTRIP: 32,\\n OPTION_E2EFORM_ONLY: 64,\\n OPTION_E2EFORM_TAGSET: 128,\\n OPTION_NONE2E_ALG: 256,\\n OPTION_NOSPTDUMMY: 512,\\n OPTION_FIXEDTYPE: 1024,\\n PROTECT_AK: 1,\\n PROTECT_FW: 2,\\n PROTECT_PB: 4,\\n PROTECT_PCS: 8,\\n SERVICE_AK: 1,\\n REQUEST_JSONP: 1,\\n REQUEST_AJAX: 2,\\n DEBUG_NOALIVE: 1,\\n INTERVAL_ALIVE: 5e3,\\n E2ETYPE_EXCLUDE: -1,\\n E2ETYPE_NONE: 0,\\n E2ETYPE_CERT1: 1,\\n E2ETYPE_CERT2: 2,\\n E2ETYPE_SDK: 11,\\n E2ETYPE_PLAIN1: 21,\\n E2ETYPE_PLAIN2: 22,\\n E2ETYPE_WIZVERA: 31,\\n PAGEID: '',\\n BROWSER_TYPE: '',\\n BROWSER_VER: '',\\n E2EFORM_TAIL: !0,\\n E2EFORM_INIT: '_e2e_forminit',\\n E2EFORM_TAG1: '_e2e_1__',\\n E2EFORM_TAG2: '_e2e_2__',\\n E2EFORM_TAG1_PWD: '_e2e_1_pwd__',\\n E2EFORM_TAG2_PWD: '_e2e_2_pwd__',\\n getErrno: function (a) {\\n return 'NCK' == a ? this.ERROR_NCK : 'ERR' == a ? this.ERROR_ERR : 'NSP' == a ? this.ERROR_NSP : this.ERROR_FAILED;\\n },\\n _get_browser_version: function (a) {\\n var b = 0;\\n if (0 <= a.indexOf('Edge/') && ((b = parseInt(a.split('Edge/')[1])), 0 < b)) return 'EG' + b;\\n if (0 <= a.indexOf('MSIE')) {\\n if (((b = parseInt(a.split('MSIE')[1])), 0 < b)) return 'IE' + b;\\n } else if (\\n 0 <= a.indexOf('Trident') &&\\n (0 <= a.indexOf('rv:')\\n ? (b = parseInt(a.split('rv:')[1]))\\n : 0 <= a.indexOf('IE') && (b = parseInt(a.split('IE')[1])),\\n 0 < b)\\n )\\n return 'IE' + b;\\n return 0 <= a.indexOf('OPR/') && ((b = parseInt(a.split('OPR/')[1])), 0 < b)\\n ? 'OP' + b\\n : 0 <= a.indexOf('Firefox/') && ((b = parseInt(a.split('Firefox/')[1])), 0 < b)\\n ? 'FF' + b\\n : 0 <= a.indexOf('Chrome/') && ((b = parseInt(a.split('Chrome/')[1])), 0 < b)\\n ? 'CR' + b\\n : 0 <= a.indexOf('AppleWebKit') &&\\n 0 <= a.indexOf('Version/') &&\\n ((b = parseInt(a.split('Version/')[1])), 0 < b)\\n ? 'SF' + b\\n : 'OT0';\\n },\\n init: function () {\\n this.PAGEID = new Date().getTime();\\n this.PAGEID -= Math.floor(100 * Math.random());\\n this.BROWSER_VER = this._get_browser_version(navigator.userAgent);\\n this.BROWSER_TYPE = this.BROWSER_VER.substring(0, 2);\\n }\\n};\\n$ASTX2_CONST.init();\\nvar $ASTX2_COMM = {\\n mLocalServerURL: '',\\n mClientPublicKey: '',\\n mErrorAbortFlag: !1,\\n mDegugFlags: 0,\\n setDegugFlags: function (a) {\\n this.mDegugFlags |= a;\\n },\\n getDegugFlags: function () {\\n return this.mDegugFlags;\\n },\\n isEnable: function () {\\n return 0 < this.mLocalServerURL.length ? !0 : !1;\\n },\\n uninit: function () {\\n this.mLocalServerURL = '';\\n },\\n errorAbort: function (a) {\\n 1 != this.mErrorAbortFlag && ((this.mErrorAbortFlag = !0), $ASTX2_CUST.errorAbort(a));\\n }\\n },\\n $_astxu = {\\n mJsonpSequence: 0,\\n jsonQstr: function (a) {\\n var b = [],\\n c;\\n for (c in a) a.hasOwnProperty(c) && b.push(encodeURIComponent(c) + '=' + encodeURIComponent(a[c]));\\n return b.join('&');\\n },\\n jsonParse: function (a) {\\n var b = a.indexOf('{'),\\n c = a.indexOf('}');\\n if (-1 == b || -1 == c) return {};\\n a = a.substring(b, c + 1);\\n return 'object' == typeof window.JSON && 'function' == typeof window.JSON.parse\\n ? window.JSON.parse(a)\\n : 'function' == typeof jQuery && 'function' == typeof jQuery.parseJSON\\n ? jQuery.parseJSON(a)\\n : eval('(' + a + ')');\\n },\\n _send_jsonp_jquery: function (a) {\\n try {\\n jQuery.ajax({\\n url: a.src,\\n timeout: a.timeout,\\n cache: !1,\\n crossDomain: !0,\\n dataType: 'jsonp',\\n contentType: 'application/javascript',\\n success: function (b, d, e) {\\n a.onSuccess(b);\\n },\\n error: function (b, d, e) {\\n if (200 == b.status && 1 == a.nocallback) a.onSuccess();\\n else a.onFailure();\\n },\\n complete: function (a, b) {}\\n });\\n } catch (b) {\\n a.onFailure();\\n }\\n },\\n _send_jsonp_dom: function (a) {\\n var b = document.createElement('script');\\n b.type = 'text/javascript';\\n b.id = a.callback;\\n b.async = a.async;\\n b.src = a.src;\\n var c = document.getElementsByTagName('body')[0];\\n if (null == c && ((c = document.getElementsByTagName('head')[0]), null == c)) {\\n a.onFailure();\\n return;\\n }\\n var d = window.setTimeout(function () {\\n window[a.callback] = function () {};\\n try {\\n var b = document.getElementById(a.callback);\\n b && ((b.onerror = function () {}), c.removeChild(b));\\n } catch (d) {}\\n a.onFailure();\\n }, a.timeout);\\n 0 == a.nocallback\\n ? (window[a.callback] = function (b) {\\n window.clearTimeout(d);\\n try {\\n var f = document.getElementById(a.callback);\\n f && c.removeChild(f);\\n } catch (g) {}\\n a.onSuccess(b);\\n })\\n : (b.onload = function () {\\n window.clearTimeout(d);\\n try {\\n var b = document.getElementById(a.callback);\\n b && c.removeChild(b);\\n } catch (f) {}\\n a.onSuccess();\\n });\\n b.onerror = function () {\\n window.clearTimeout(d);\\n window[a.callback] = function () {};\\n try {\\n var b = document.getElementById(a.callback);\\n b && c.removeChild(b);\\n } catch (f) {}\\n a.onFailure();\\n };\\n c.appendChild(b);\\n },\\n sendJsonp: function (a) {\\n null == a.data && (a.data = {});\\n null == a.callback && (a.callback = 'jsonpCallback' + $_astxu.rnd());\\n null == a.nocallback && (a.nocallback = !1);\\n null == a.timeout && (a.timeout = 5e3);\\n null == a.async && (a.async = !0);\\n null == a.seq && (a.seq = !1);\\n null == a.onSuccess && (a.onSuccess = function (a) {});\\n null == a.onFailure && (a.onFailure = function () {});\\n a.src = 1 == $ASTX2.mUseJQuery ? a.url + '?v=3' : a.url + '?v=2&callback=' + a.callback;\\n if (1 == a.seq) {\\n var b = ++this.mJsonpSequence;\\n a.src += '&seq=' + b;\\n 2147483647 <= this.mJsonpSequence && (this.mJsonpSequence = 0);\\n }\\n b = this.jsonQstr(a.data);\\n 0 < b.length && (a.src += '&' + b);\\n 1 == $ASTX2.mUseJQuery ? this._send_jsonp_jquery(a) : this._send_jsonp_dom(a);\\n },\\n _get_xhr_object: function () {\\n if ('undefined' !== typeof XMLHttpRequest)\\n try {\\n return new XMLHttpRequest();\\n } catch (a) {}\\n try {\\n return new ActiveXObject('Microsoft.XMLHTTP');\\n } catch (b) {}\\n return null;\\n },\\n sendAjax: function (a) {\\n var b = this._get_xhr_object();\\n if (null == b) $_astxu.msg('[sendAjax] _get_xhr_object failed');\\n else {\\n null == a.data && (a.data = {});\\n null == a.type && (a.type = 'POST');\\n null == a.async && (a.async = !0);\\n null == a.onSuccess && (a.onSuccess = function (a) {});\\n null == a.onFailure && (a.onFailure = function (a, b) {});\\n var c = this.jsonQstr(a.data);\\n b.open(a.type, 'GET' == a.type ? a.url + '&' + c : a.url, a.async);\\n b.onreadystatechange = function () {\\n if (4 == b.readyState)\\n if (200 == b.status) a.onSuccess(b.responseText);\\n else a.onFailure(b.status);\\n };\\n null != a.timeout && (b.timeout = a.timeout);\\n b.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\\n b.send(c);\\n }\\n },\\n sendAuthAjax: function (a) {\\n var b = this._get_xhr_object();\\n const stored = JSON.parse(sessionStorage.getItem('cust-mgmt-auth') || '{}');\\n if (null == b) $_astxu.msg('[sendAjax] _get_xhr_object failed');\\n else {\\n null == a.data && (a.data = {});\\n null == a.type && (a.type = 'POST');\\n null == a.async && (a.async = !0);\\n null == a.onSuccess && (a.onSuccess = function (a) {});\\n null == a.onFailure && (a.onFailure = function (a, b) {});\\n var c = this.jsonQstr(a.data);\\n b.open(a.type, 'GET' == a.type ? a.url + '&' + c : a.url, a.async);\\n b.onreadystatechange = function () {\\n if (4 == b.readyState)\\n if (200 == b.status) a.onSuccess(b.responseText);\\n else a.onFailure(b.status);\\n };\\n null != a.timeout && (b.timeout = a.timeout);\\n b.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\\n b.setRequestHeader('Authorization', stored.key);\\n b.withCredentials = true;\\n b.send(c);\\n }\\n },\\n isACK: function (a) {\\n return a && 'ACK' == a ? !0 : !1;\\n },\\n isWinOS: function () {\\n return -1 != navigator.platform.indexOf('Win32') || -1 != navigator.platform.indexOf('Win64') ? !0 : !1;\\n },\\n isMacOS: function () {\\n return -1 != navigator.platform.indexOf('Mac') ? !0 : !1;\\n },\\n isLinuxOS: function () {\\n return -1 != navigator.platform.indexOf('Linux') ? !0 : !1;\\n },\\n isMacLinuxOS: function () {\\n return 1 == this.isMacOS() || 1 == this.isLinuxOS() ? !0 : !1;\\n },\\n hasFocused: function () {\\n var a = !1;\\n try {\\n a = document.hasFocus();\\n } catch (b) {}\\n return a;\\n },\\n addEvent: function (a, b, c) {\\n a.addEventListener ? a.addEventListener(b, c, !1) : a.attachEvent('on' + b, c);\\n },\\n removeEvent: function (a, b, c) {\\n a.removeEventListener ? a.removeEventListener(b, c) : a.detachEvent('on' + b, c);\\n },\\n getCreatedFormValue: function (a, b, c) {\\n null == c && (c = !1);\\n c = 1 == c ? document.getElementsByTagName('input') : a.getElementsByTagName('input');\\n for (var d = 0; d < c.length; d++) {\\n var e = c[d];\\n if (e && this.getnc(e.name) == b) return e;\\n }\\n c = document.createElement('input');\\n c.name = b;\\n c.type = 'hidden';\\n if ('function' === typeof $ASTX2_CUST.onCreatedFormValue) $ASTX2_CUST.onCreatedFormValue(c, b);\\n a.appendChild(c);\\n return c;\\n },\\n getHostPath: function () {\\n var a = window.location.protocol + '//' + window.location.hostname;\\n return (a += window.location.port ? ':' + window.location.port : '');\\n },\\n getnc: function (a, b) {\\n null == b && (b = '');\\n return null == a ? b : a;\\n },\\n getint: function (a, b) {\\n null == b && (b = 0);\\n return parseInt(a) || b;\\n },\\n rnd: function () {\\n var a = new Date().getTime();\\n return (a += new String(Math.floor(100 * Math.random())));\\n },\\n getKeyCode: function (a) {\\n var b = null;\\n a && (b = a.keyCode ? a.keyCode : a.which);\\n return b;\\n },\\n xorEncode: function (a, b) {\\n for (var c = '', d = new String(a), e = 0; e < d.length; e++) c += String.fromCharCode(b ^ d.charCodeAt(e));\\n return c;\\n },\\n xorDecode: function (a, b) {\\n for (var c = '', d = new String(a), e = 0; e < d.length; e++) c += String.fromCharCode(b ^ d.charCodeAt(e));\\n return c;\\n },\\n ltrim: function (a, b) {\\n for (b = this.getnc(b, ' '); a.substring(0, 1) == b; ) a = a.substring(1, a.length);\\n return a;\\n },\\n rtrim: function (a, b) {\\n for (b = this.getnc(b, ' '); a.substring(a.length - 1, a.length) == b; ) a = a.substring(0, a.length - 1);\\n return a;\\n },\\n alltrim: function (a, b) {\\n return this.ltrim(this.rtrim(a, b), b);\\n },\\n setInputFocus: function () {\\n try {\\n for (var a = document.getElementsByTagName('input'), b = 0; b < a.length; b++) {\\n var c = a[b];\\n if (c && 'hidden' != c.type) {\\n c.focus();\\n break;\\n }\\n }\\n } catch (d) {}\\n },\\n log: function (a) {\\n 'object' === typeof debuger && 'function' === typeof debuger.write\\n ? debuger.write(a)\\n : 'object' === typeof window.console && 'function' === typeof console.log && console.log(a);\\n },\\n msg: function (a) {\\n this.log(a);\\n }\\n },\\n $ASTX2_E2E = (function () {\\n var a = null,\\n b = function (a) {\\n function b(a) {\\n var c = a.target;\\n null == c && (c = a.srcElement);\\n return c;\\n }\\n function e(a) {\\n if (null == a) return null;\\n var b = a.getAttribute('e2e_inputid');\\n if (null == b || 0 >= b) return null;\\n var c = a.getAttribute('e2e_type');\\n if (null == c || 0 >= c) return null;\\n var d = a.getAttribute('e2e_inputtype');\\n if (null == d || 0 >= d) d = '';\\n var e = a.getAttribute('wizvera_key');\\n null == e && (e = '');\\n var f = {};\\n f.e2e_inputid = b;\\n f.e2e_type = c;\\n f.e2e_inputtype = d;\\n f.name = $_astxu.getnc(a.name);\\n f.form = a.form ? $_astxu.getnc(a.form.name) : '';\\n f.wizvera_key = e;\\n return f;\\n }\\n function f(a) {\\n var b = e(a);\\n if (null == b) return null;\\n b.type = $_astxu.getnc(a.type);\\n b.maxlength = $_astxu.getnc(a.getAttribute('maxlength'));\\n b.txtmsk = $_astxu.getnc(a.getAttribute('e2e_txtmsk'));\\n return b;\\n }\\n function g(a, b) {\\n a.getAttribute('e2e_type') != $ASTX2_CONST.E2ETYPE_PLAIN1 && (a.readOnly = b);\\n }\\n function h(a, b, c, d, e) {\\n 1 == n && q(a, b, c, d, e);\\n }\\n function q(b, s, d, e, f) {\\n var g = {};\\n g.pageid = $ASTX2_CONST.PAGEID;\\n if (null != s) for (var h in s) s.hasOwnProperty(h) && (g[h] = s[h]);\\n a.send_e2e_cmd(b, g, d, e, f);\\n }\\n function l(a, b) {\\n var c = '';\\n return (c = 0 == $ASTX2_CONST.E2EFORM_TAIL ? b + a : a + b);\\n }\\n function m(a, b) {\\n var c = '';\\n return (c =\\n 'password' == a.type\\n ? b == $ASTX2_CONST.E2ETYPE_CERT2\\n ? l(a.name, $ASTX2_CONST.E2EFORM_TAG2_PWD)\\n : l(a.name, $ASTX2_CONST.E2EFORM_TAG1_PWD)\\n : b == $ASTX2_CONST.E2ETYPE_CERT2\\n ? l(a.name, $ASTX2_CONST.E2EFORM_TAG2)\\n : l(a.name, $ASTX2_CONST.E2EFORM_TAG1));\\n }\\n function C() {\\n if (0 != D)\\n for (var a = document.getElementsByTagName('form'), b = 0; b < a.length; b++) {\\n var c = a[b];\\n if (null != c) {\\n var d = !1;\\n if (k & $ASTX2_CONST.OPTION_E2EFORM_TAGSET) {\\n var e = c.getAttribute(E.e2eform_tagset);\\n if (null == e || 0 >= e) d = !0;\\n } else if (k & $ASTX2_CONST.OPTION_E2EFORM_ONLY) {\\n if (null == c) e = !1;\\n else\\n for (var e = !1, f = c.getElementsByTagName('input'), g = 0; g < f.length; g++) {\\n var h = f[g];\\n if (null != h && ((h = h.getAttribute('e2e_type')), null != h && 0 < h)) {\\n e = !0;\\n break;\\n }\\n }\\n 0 == e && (d = !0);\\n }\\n if (1 != d) {\\n if ((d = $_astxu.getCreatedFormValue(c, l($ASTX2_CONST.E2EFORM_INIT, $ASTX2_CONST.E2EFORM_TAG1))))\\n d.value = F;\\n if ((d = $_astxu.getCreatedFormValue(c, l($ASTX2_CONST.E2EFORM_INIT, $ASTX2_CONST.E2EFORM_TAG2))))\\n d.value = G;\\n }\\n }\\n }\\n }\\n function V(a) {\\n var b = 0;\\n k & $ASTX2_CONST.OPTION_E2EFORM_NOENC && (b = 1);\\n a = {\\n ver: $_astxu.getint(a.ver),\\n alg: $_astxu.getint(a.alg),\\n svr: $_astxu.getnc(a.svr),\\n norsa: $_astxu.getint(a.norsa),\\n uniq: $_astxu.getnc(a.uniq),\\n utime: $_astxu.getint(a.utime),\\n ncert: $_astxu.getnc(a.ncert),\\n pageid: $ASTX2_CONST.PAGEID,\\n noenc: b\\n };\\n $_astxu.sendJsonp({\\n url: $ASTX2_COMM.mLocalServerURL + '/e2e_forminit',\\n data: a,\\n onSuccess: function (a) {\\n var b = $_astxu.getnc(a ? a.result : '');\\n 0 == $_astxu.isACK(b)\\n ? $_astxu.msg('[e2e_forminit] result=' + b)\\n : ((D = !0), (F = $_astxu.getnc(a.e2e_form1)), (G = $_astxu.getnc(a.e2e_form2)), C());\\n },\\n onFailure: function () {\\n $_astxu.msg('[e2e_forminit] failure.');\\n }\\n });\\n }\\n function W() {\\n $_astxu.sendAuthAjax({\\n url: $ASTX2_CUST.getURL($ASTX2_CUST.URL_GET_CERT),\\n onSuccess: function (a) {\\n var b = $_astxu.jsonParse(a);\\n a = $_astxu.getnc(b ? b.result : '');\\n 0 == $_astxu.isACK(a)\\n ? $_astxu.msg('[_init_e2eform] result=' + a)\\n : $ASTX2.set_cert(\\n function () {\\n V(b);\\n },\\n function () {\\n $_astxu.msg('[_init_e2eform] set_cert() failure');\\n },\\n b\\n );\\n },\\n onFailure: function (a) {\\n $_astxu.msg('[_init_e2eform] failure');\\n }\\n });\\n }\\n function H(a) {\\n var b = $_astxu.getHostPath() + $_astxu.getnc(window.location.pathname),\\n c = 0;\\n k & $ASTX2_CONST.OPTION_NOSPTDUMMY && (c = 1);\\n q(\\n 'e2e_start',\\n { browser: $ASTX2_CONST.BROWSER_VER, ver: a.ver, svr: a.svr, valg: a.valg, url: b, custcode: w, nospt: c },\\n 5e3,\\n function (a) {\\n var b = $_astxu.getnc(a ? a.result : '');\\n if ($_astxu.isACK(b)) {\\n n = 1;\\n I = $_astxu.getint(a.call_settext);\\n t = $_astxu.getint(a.call_gettext);\\n J = $_astxu.getint(a.vm_env);\\n K = $_astxu.getint(a.ak_drv);\\n try {\\n var c = document.activeElement;\\n c && x(c, !1);\\n } catch (aa) {}\\n k & $ASTX2_CONST.OPTION_E2EFORM &&\\n (3 > $_astxu.getint(a.stsvr) ? $ASTX2_COMM.errorAbort($ASTX2_CONST.ERROR_NEEDUPDATE) : W());\\n if (k & $ASTX2_CONST.OPTION_AUTOSETTEXT)\\n for (var d in u) (a = u[d]), null != a && (0 >= $_astxu.getnc(a.value).length || y(a));\\n } else n = 2;\\n },\\n function () {\\n n = 2;\\n }\\n );\\n }\\n function L(a) {\\n if (0 == $_astxu.hasFocused()) return !1;\\n if (0 == n) return !0;\\n if (1 == n) {\\n if (!1 === a) return;\\n try {\\n var b = document.activeElement;\\n b && x(b, !1);\\n } catch (c) {}\\n return !0;\\n }\\n n = 0;\\n k & $ASTX2_CONST.OPTION_NONE2E\\n ? ((a = 0),\\n k & $ASTX2_CONST.OPTION_NONE2E_ALG && (a = $ASTX2.mOptionStrings.none2e_alg),\\n H({ ver: 1, svr: '_none2e', valg: a }))\\n : $_astxu.sendAuthAjax({\\n url: $ASTX2_CUST.getURL($ASTX2_CUST.URL_GET_INIT),\\n onSuccess: function (a) {\\n a = $_astxu.jsonParse(a);\\n var b = $_astxu.getnc(a ? a.result : '');\\n $_astxu.isACK(b) ? H(a) : (n = -1);\\n },\\n onFailure: function (a) {\\n n = -1;\\n }\\n });\\n return !0;\\n }\\n function r(a) {\\n if (null != a && (a.getAttribute('e2e_type') != $ASTX2_CONST.E2ETYPE_PLAIN1 || 0 != t)) {\\n try {\\n if (a != document.activeElement) return;\\n } catch (b) {}\\n 'number' == typeof a.selectionStart\\n ? (a.selectionStart = a.selectionEnd = a.value.length)\\n : 'undefined' != typeof a.createTextRange && ((a = a.createTextRange()), a.collapse(!1), a.select());\\n }\\n }\\n function x(a, b) {\\n v = !1;\\n if (k & $ASTX2_CONST.OPTION_FIXEDTYPE && a) {\\n var c = a.getAttribute('e2e_inputid');\\n null != c && 0 < c && z[c] != a.type && (a.type = z[c]);\\n }\\n c = f(a);\\n null != c &&\\n (!0 === b && L(!1),\\n h(\\n 'e2e_focus',\\n c,\\n null,\\n function (b) {\\n g(a, !1);\\n window.setTimeout(function () {\\n r(a);\\n }, 1);\\n },\\n function () {}\\n ));\\n }\\n function M(a) {\\n var c = b(a);\\n if (null != c) {\\n if ('function' === typeof $ASTX2_CUST.onHandlerPreFocus) $ASTX2_CUST.onHandlerPreFocus(c, a);\\n x(c, !0);\\n }\\n }\\n function N(a) {\\n a = b(a);\\n if (null != a) {\\n var c = e(a);\\n if (null != c) {\\n try {\\n if (document.hasFocus() && a === document.activeElement) return;\\n } catch (f) {}\\n g(a, !0);\\n h('e2e_blur', c);\\n }\\n }\\n }\\n function O(a) {\\n var c = b(a);\\n null != c &&\\n window.setTimeout(function () {\\n r(c);\\n }, 1);\\n }\\n function y(a, b) {\\n var c = f(a);\\n if (null != c) {\\n var d = $_astxu.getnc(a.value);\\n c.text = d;\\n k & $ASTX2_CONST.OPTION_E2EFORM && (c.e2eform = 1);\\n k & $ASTX2_CONST.OPTION_E2EFORM_NOENC && (c.noenc = 1);\\n h(\\n 'e2e_settext',\\n c,\\n null,\\n function (d) {\\n var e = $_astxu.getnc(d ? d.result : '');\\n if (0 == $_astxu.isACK(e)) b && b($ASTX2_CONST.ERROR_NCK);\\n else {\\n if (k & $ASTX2_CONST.OPTION_E2EFORM) {\\n var e = m(a, c.e2e_type),\\n f = !1;\\n k & $ASTX2_CONST.OPTION_E2EFORM_ALLTRIP && (f = !0);\\n if ((e = $_astxu.getCreatedFormValue(a.form, e, f))) e.value = $_astxu.getnc(d.e2e_data);\\n }\\n b && b($ASTX2_CONST.ERROR_SUCCESS);\\n }\\n },\\n function () {\\n b && b($ASTX2_CONST.ERROR_FAILED);\\n }\\n );\\n }\\n }\\n function A(a) {\\n 'function' === typeof a.stopPropagation && a.stopPropagation();\\n 'function' === typeof a.preventDefault ? a.preventDefault() : (a.returnValue = !1);\\n }\\n function X(a, b, c) {\\n h(\\n 'e2e_gettext',\\n b,\\n null,\\n function (b) {\\n var d = $_astxu.getnc(b ? b.result : '');\\n $_astxu.isACK(d)\\n ? ((b = $_astxu.getnc(b.text)), (a.value = b), c && c($ASTX2_CONST.ERROR_SUCCESS))\\n : c && c($ASTX2_CONST.ERROR_NCK);\\n },\\n function () {\\n c && c($ASTX2_CONST.ERROR_FAILED);\\n }\\n );\\n }\\n function Y(a, b) {\\n k & $ASTX2_CONST.OPTION_E2EFORM_NOENC && (b.noenc = 1);\\n h(\\n 'e2e_formget',\\n b,\\n null,\\n function (c) {\\n var d = $_astxu.getnc(c ? c.result : '');\\n if (0 == $_astxu.isACK(d)) $_astxu.msg('[e2e_formget] ' + b.name + ',result=' + d);\\n else if (((d = a.form), null != d)) {\\n var e = m(a, b.e2e_type),\\n f = !1;\\n k & $ASTX2_CONST.OPTION_E2EFORM_ALLTRIP && (f = !0);\\n if ((d = $_astxu.getCreatedFormValue(d, e, f))) d.value = $_astxu.getnc(c.e2e_data);\\n }\\n },\\n function () {}\\n );\\n }\\n function P(a) {\\n var c = b(a);\\n if (null != c) {\\n var e = f(c);\\n if (null != e) {\\n r(c);\\n var p = $_astxu.getKeyCode(a);\\n 17 == p && (v = !0);\\n if (1 == v)\\n return (\\n 86 == p &&\\n h(\\n 'e2e_clear',\\n e,\\n null,\\n function (a) {\\n c.value = '';\\n },\\n function () {}\\n ),\\n A(a),\\n !1\\n );\\n if (1 == (16 == p || 17 == p || 18 == p ? !0 : !1)) return !0;\\n var g = !0;\\n k & $ASTX2_CONST.OPTION_E2EFORM &&\\n ((e.e2e_type != $ASTX2_CONST.E2ETYPE_CERT1 && e.e2e_type != $ASTX2_CONST.E2ETYPE_CERT2) || Y(c, e));\\n 'function' === typeof $ASTX2_CUST.onHandlerKeyDown &&\\n 0 == $ASTX2_CUST.onHandlerKeyDown(c, a) &&\\n (A(a), (g = !1));\\n 1 != t ||\\n ('password' == c.type && e.e2e_type != $ASTX2_CONST.E2ETYPE_PLAIN1) ||\\n 0 != J ||\\n (1 == g &&\\n X(c, e, function () {\\n 'password' != c.type &&\\n 'dynamic' == c.getAttribute('e2e_txtmsk') &&\\n (c.value = c.value.replace(/[^*]/g, '*').substring(0, c.value.length - 1) + c.value.slice(-1));\\n }),\\n 0 == (8 == p || 9 == p || 13 == p || 20 == p ? !0 : !1) && (A(a), (g = !1)));\\n return g;\\n }\\n }\\n }\\n function Q(a) {\\n var c = b(a);\\n null != c &&\\n (17 == $_astxu.getKeyCode(a) && (v = !1),\\n 1 == I\\n ? y(c)\\n : 0 == t &&\\n 'password' != c.type &&\\n 'dynamic' == c.getAttribute('e2e_txtmsk') &&\\n (c.value = c.value.replace(/[^*]/g, '*').substring(0, c.value.length - 1) + c.value.slice(-1)),\\n window.setTimeout(function () {\\n r(c);\\n }, 1));\\n }\\n function R(a) {\\n var c = b(a);\\n null != c &&\\n window.setTimeout(function () {\\n r(c);\\n }, 1);\\n }\\n function S(a) {\\n if ('IE' == $ASTX2_CONST.BROWSER_TYPE || 'EG' == $ASTX2_CONST.BROWSER_TYPE) {\\n var c = b(a);\\n null != c &&\\n '' != c.value &&\\n setTimeout(function () {\\n if ('' == c.value) {\\n var a = e(c);\\n null != a && h('e2e_clear', a);\\n }\\n }, 1);\\n }\\n }\\n function T(a) {\\n var c = b(a);\\n null != c &&\\n ('number' == typeof c.selectionStart\\n ? (c.selectionStart < c.value.length || c.selectionEnd < c.value.length) &&\\n window.setTimeout(function () {\\n r(c);\\n }, 1)\\n : 'undefined' != typeof c.createTextRange &&\\n document.selection &&\\n ((a = document.selection.createRange()),\\n a.moveStart('character', -c.value.length),\\n a.text.length <= c.value.length &&\\n window.setTimeout(function () {\\n r(c);\\n }, 1)));\\n }\\n function Z(a) {}\\n function U(a) {\\n h('e2e_unload');\\n }\\n var k = 0,\\n E = [],\\n $ = 0,\\n B = !1,\\n w = 0,\\n n = -1,\\n I = 0,\\n t = 0,\\n J = 0,\\n K = 1,\\n v = !1,\\n u = [],\\n z = [],\\n D = !1,\\n F = '',\\n G = '';\\n this.setOption = function (a) {\\n k |= a;\\n };\\n this.setOptionStrings = function (a) {\\n E = a;\\n };\\n this.attach = function (a, b) {\\n null != a && (w = a);\\n k & $ASTX2_CONST.OPTION_AUTOSETTEXT && (u = []);\\n k & $ASTX2_CONST.OPTION_E2EFORM && C();\\n for (var c = document.getElementsByTagName('input'), d = 0; d < c.length; d++) {\\n var e = c[d];\\n null != e && this.addObject(e);\\n }\\n q(\\n 'e2e_init',\\n null,\\n null,\\n function (a) {\\n L();\\n $_astxu.addEvent(window, 'blur', Z);\\n $_astxu.addEvent(window, 'unload', U);\\n $_astxu.addEvent(window, 'beforeunload', U);\\n b && b(!0);\\n },\\n function () {\\n b && b(!1);\\n }\\n );\\n B = !0;\\n };\\n this.addObject = function (a) {\\n if (null != a) {\\n var b = a.getAttribute('e2e_inputid');\\n if (!(null != b && 0 < b)) {\\n var c = a.getAttribute('e2e_type');\\n if (null == c || 0 >= c)\\n if (((c = a.getAttribute('e2e')), 'true' == c || 'on' == c))\\n (c = $ASTX2_CONST.E2ETYPE_CERT1), a.setAttribute('e2e_type', c);\\n else {\\n c = $ASTX2_CONST.E2ETYPE_NONE;\\n try {\\n if (\\n ('function' === typeof $ASTX2_CUST.isE2EObject &&\\n 1 == $ASTX2_CUST.isE2EObject(a) &&\\n ((c = $ASTX2_CONST.E2ETYPE_CERT1), a.setAttribute('e2e_type', c)),\\n 'function' === typeof $ASTX2_CUST.getE2Etype)\\n ) {\\n var d = $ASTX2_CUST.getE2Etype(a);\\n d && ((c = d), a.setAttribute('e2e_type', c));\\n }\\n } catch (e) {}\\n if (c == $ASTX2_CONST.E2ETYPE_NONE) return;\\n }\\n b = ++$;\\n a.setAttribute('e2e_inputid', b);\\n d = !0;\\n k & $ASTX2_CONST.OPTION_AUTOSETTEXT && 0 < a.value.length && ((d = !1), u.push(a));\\n 1 == d && (a.value = '');\\n a.setAttribute('autocomplete', 'off');\\n g(a, !0);\\n z[b] = a.type;\\n $_astxu.addEvent(a, 'focus', M);\\n $_astxu.addEvent(a, 'blur', N);\\n $_astxu.addEvent(a, 'click', O);\\n $_astxu.addEvent(a, 'keyup', Q);\\n $_astxu.addEvent(a, 'keydown', P);\\n $_astxu.addEvent(a, 'select', T);\\n $_astxu.addEvent(a, 'mouseup', S);\\n $_astxu.addEvent(a, 'mousedown', R);\\n k & $ASTX2_CONST.OPTION_E2EFORM &&\\n (c == $ASTX2_CONST.E2ETYPE_CERT1 || c == $ASTX2_CONST.E2ETYPE_CERT2) &&\\n ((b = a.form),\\n null != b &&\\n ((a = m(a, c)),\\n (c = !1),\\n k & $ASTX2_CONST.OPTION_E2EFORM_ALLTRIP && (c = !0),\\n $_astxu.getCreatedFormValue(b, a, c)));\\n }\\n }\\n };\\n this.subObject = function (a) {\\n var b = e(a);\\n if (null != b) {\\n $_astxu.removeEvent(a, 'focus', M);\\n $_astxu.removeEvent(a, 'blur', N);\\n $_astxu.removeEvent(a, 'click', O);\\n $_astxu.removeEvent(a, 'keyup', Q);\\n $_astxu.removeEvent(a, 'keydown', P);\\n $_astxu.removeEvent(a, 'select', T);\\n $_astxu.removeEvent(a, 'mouseup', S);\\n $_astxu.removeEvent(a, 'mousedown', R);\\n try {\\n a == document.activeElement && h('e2e_blur', b);\\n } catch (c) {}\\n a.value = '';\\n a.setAttribute('e2e_inputid', -1);\\n a.setAttribute('e2e_type', -1);\\n g(a, !1);\\n }\\n };\\n this.getE2EHash = function (a, b) {\\n var c = e(a);\\n null == c\\n ? b(null, $ASTX2_CONST.ERROR_PARAM)\\n : h(\\n 'e2e_gethash',\\n c,\\n null,\\n function (a) {\\n var c = $_astxu.getnc(a ? a.result : '');\\n $_astxu.isACK(c)\\n ? b($_astxu.getnc(a.hash), $ASTX2_CONST.ERROR_SUCCESS)\\n : b(null, $ASTX2_CONST.ERROR_NCK);\\n },\\n function () {\\n b(null, $ASTX2_CONST.ERROR_FAILED);\\n }\\n );\\n };\\n this.getEncText = function (a, b, c) {\\n var d = e(a);\\n d.customcode = w;\\n d.random = b;\\n null == d\\n ? c(null, null, $ASTX2_CONST.ERROR_PARAM)\\n : h(\\n 'sdk_getenctext',\\n d,\\n null,\\n function (a) {\\n var b = $_astxu.getnc(a ? a.result : '');\\n $_astxu.isACK(b)\\n ? c(d.name, $_astxu.getnc(a.getenctext), $ASTX2_CONST.ERROR_SUCCESS)\\n : c(null, null, $ASTX2_CONST.ERROR_NCK);\\n },\\n function () {\\n c(null, null, $ASTX2_CONST.ERROR_FAILED);\\n }\\n );\\n };\\n this.getE2EText = function (a, b) {\\n var c = e(a);\\n null == c\\n ? b(null, null, $ASTX2_CONST.ERROR_PARAM)\\n : c.e2e_type != $ASTX2_CONST.E2ETYPE_PLAIN2 && c.e2e_type != $ASTX2_CONST.E2ETYPE_WIZVERA\\n ? b(null, null, $ASTX2_CONST.ERROR_PARAM)\\n : h(\\n 'e2e_gettext',\\n c,\\n null,\\n function (a) {\\n var d = $_astxu.getnc(a ? a.result : '');\\n $_astxu.isACK(d)\\n ? b(c.name, $_astxu.getnc(a.text), $ASTX2_CONST.ERROR_SUCCESS)\\n : b(null, null, $ASTX2_CONST.ERROR_NCK);\\n },\\n function () {\\n b(null, null, $ASTX2_CONST.ERROR_FAILED);\\n }\\n );\\n };\\n this.setE2EText = function (a, b) {\\n y(a, b);\\n };\\n this.clearE2EText = function (a, b) {\\n var c = e(a);\\n null != c &&\\n h(\\n 'e2e_clear',\\n c,\\n null,\\n function (d) {\\n d = $_astxu.getnc(d ? d.result : '');\\n if (0 == $_astxu.isACK(d)) b && b($ASTX2_CONST.ERROR_NCK);\\n else {\\n a.value = '';\\n if (k & $ASTX2_CONST.OPTION_E2EFORM) {\\n d = m(a, c.e2e_type);\\n var e = !1;\\n k & $ASTX2_CONST.OPTION_E2EFORM_ALLTRIP && (e = !0);\\n if ((d = $_astxu.getCreatedFormValue(a.form, d, e))) d.value = '';\\n }\\n b && b($ASTX2_CONST.ERROR_SUCCESS);\\n }\\n },\\n function () {\\n b && b($ASTX2_CONST.ERROR_FAILED);\\n }\\n );\\n };\\n this.dettach = function () {\\n h('e2e_uninit');\\n B = !1;\\n };\\n this.isAttached = function () {\\n return B;\\n };\\n this.isStarted = function () {\\n return 1 == n ? !0 : !1;\\n };\\n this.checkService = function (a) {\\n var b = {};\\n b.service = $ASTX2_CONST.SERVICE_AK;\\n b.result = $ASTX2_CONST.ERROR_SUCCESS;\\n if (0 >= n) {\\n var c = this;\\n window.setTimeout(function () {\\n c.checkService(a);\\n }, 300);\\n } else\\n 1 == n && 0 == K\\n ? (b.result = $ASTX2_CONST.ERROR_FAILED)\\n : 2 == n && (b.result = $ASTX2_CONST.ERROR_FAILED),\\n a(b);\\n };\\n this.getE2EelmsForm = function (a, b, c, d) {\\n for (var f = document.getElementsByTagName('input'), g = 0; g < f.length; g++) {\\n var h = f[g];\\n if (null != h && ((h = e(h)), null != h && h.e2e_type == d)) {\\n var k = !1;\\n null == a ? (k = !0) : $_astxu.getnc(a.name) == h.form && (k = !0);\\n 0 != k && (b.push(h.e2e_inputid), c.push(h.name));\\n }\\n }\\n };\\n this.getE2EelmsID = function (a, b, c, d) {\\n for (var f = document.getElementsByTagName('input'), g = 0; g < f.length; g++) {\\n var h = f[g];\\n if (null != h) {\\n var k = e(h);\\n if (null != k && k.e2e_type == d) {\\n for (var l = !1, h = $_astxu.getnc(h.id).toLowerCase(), m = 0; m < a.length; m++)\\n if (a[m].toLowerCase() == h) {\\n l = !0;\\n break;\\n }\\n 0 != l && (b.push(k.e2e_inputid), c.push(k.name));\\n }\\n }\\n }\\n };\\n this.resetE2Evalues = function (a, b) {\\n for (var c = document.getElementsByTagName('input'), d = 0; d < c.length; d++) {\\n var f = c[d];\\n if (null != f) {\\n var g = e(f);\\n null != g &&\\n g.form == a &&\\n g.e2e_type != $ASTX2_CONST.E2ETYPE_PLAIN1 &&\\n g.e2e_type != $ASTX2_CONST.E2ETYPE_PLAIN2 &&\\n (f.value = b);\\n }\\n }\\n };\\n this.getE2Eattribute = function (a) {\\n return e(a);\\n };\\n };\\n return {\\n getInstance: function (c) {\\n null === a && (a = new b(c));\\n return a;\\n }\\n };\\n })(),\\n $ASTX2 = {\\n mUseJQuery: !0,\\n mUseAjaxHello: !1,\\n mUseAutoStart: !0,\\n mOption: 0,\\n mOptionStrings: [],\\n mE2EInst: null,\\n mLastError: $ASTX2_CONST.ERROR_SUCCESS,\\n send_e2e_cmd: function (a, b, c, d, e, f) {\\n if ('object' == typeof $ASTX2_COMM && 0 != $ASTX2_COMM.isEnable()) {\\n var g = this;\\n null == f && (f = 1);\\n var h = !1;\\n if ('e2e_focus' == a || 'e2e_blur' == a || 'e2e_gettext' == a || 'e2e_settext' == a) h = !0;\\n $_astxu.sendJsonp({\\n url: $ASTX2_COMM.mLocalServerURL + '/' + a,\\n data: b,\\n timeout: c || 5e3,\\n async: !1,\\n seq: h,\\n onSuccess: function (a) {\\n d && d(a);\\n },\\n onFailure: function () {\\n 3 > f ? g.send_e2e_cmd(a, b, c, d, e, f + 1) : e && e();\\n }\\n });\\n }\\n },\\n _send_alive: function () {\\n var a = { pageid: $ASTX2_CONST.PAGEID, focus: $_astxu.hasFocused() ? 1 : 0 };\\n $_astxu.sendJsonp({ url: $ASTX2_COMM.mLocalServerURL + '/alive', data: a });\\n },\\n send_alive_run: function () {\\n if (!($ASTX2_COMM.getDegugFlags() & $ASTX2_CONST.DEBUG_NOALIVE)) {\\n var a = this;\\n setInterval(function () {\\n a._send_alive();\\n }, $ASTX2_CONST.INTERVAL_ALIVE);\\n }\\n },\\n _hello_local_server: function (a, b, c, d, e) {\\n var f = this;\\n if (d >= c.length)\\n f.setLastError($ASTX2_CONST.ERROR_NOTINST),\\n 1 == $_astxu.isWinOS() &&\\n 1 == f.mUseAutoStart &&\\n ((f.mUseAutoStart = !1),\\n 'IE' != $ASTX2_CONST.BROWSER_TYPE &&\\n 'EG' != $ASTX2_CONST.BROWSER_TYPE &&\\n (window.location.href = 'astx://start')),\\n b();\\n else {\\n var g = e[d],\\n h = c[d],\\n q = 'https://' + (1 == $_astxu.isMacOS() ? 'lx.astxsvc.com' : '127.0.0.1') + ':' + h + '/ASTX2',\\n h = '',\\n l = document.getElementsByTagName('script');\\n if (l) for (var m = 0; m < l.length; m++) l[m].src && 0 <= l[m].src.indexOf('astx2.min.js') && (h = l[m].src);\\n l = '$Revision: 32070 $';\\n l = l.substr(11, l.length - 13);\\n m = !1;\\n 0 == $ASTX2.mUseAjaxHello && 1 == d % 2 && (m = !0);\\n 'IE' == $ASTX2_CONST.BROWSER_TYPE &&\\n 'IE10' != $ASTX2_CONST.BROWSER_VER &&\\n 'IE11' != $ASTX2_CONST.BROWSER_VER &&\\n ((m = !0), 2e3 < g && (g = 2e3));\\n d++;\\n 1 == m\\n ? $_astxu.sendJsonp({\\n url: q + '/hello',\\n data: { url: h, version: l },\\n timeout: g,\\n onSuccess: function (c) {\\n var d = $_astxu.getnc(c ? c.result : '');\\n c = $_astxu.getnc(c ? c.client_public_key : '');\\n $_astxu.isACK(d)\\n ? (($ASTX2_COMM.mLocalServerURL = q), ($ASTX2_COMM.mClientPublicKey = c), a())\\n : (f.setLastError($ASTX2_CONST.ERROR_NOTINST), b());\\n },\\n onFailure: function () {\\n f._hello_local_server(a, b, c, d, e);\\n }\\n })\\n : $_astxu.sendAjax({\\n url: q + '/hello?',\\n type: 'POST',\\n data: { url: h, version: l },\\n timeout: g,\\n onSuccess: function (c) {\\n var d = $_astxu.jsonParse(c);\\n c = $_astxu.getnc(d ? d.result : '');\\n d = $_astxu.getnc(d ? d.client_public_key : '');\\n $_astxu.isACK(c)\\n ? (($ASTX2_COMM.mLocalServerURL = q), ($ASTX2_COMM.mClientPublicKey = d), a())\\n : (f.setLastError($ASTX2_CONST.ERROR_NOTINST), b());\\n },\\n onFailure: function () {\\n f._hello_local_server(a, b, c, d, e);\\n }\\n });\\n }\\n },\\n setOption: function (a) {\\n if (null != a) {\\n !0 === a.autofocus && (this.mOption |= $ASTX2_CONST.OPTION_AUTOFOCUS);\\n !0 === a.e2eform && (this.mOption |= $ASTX2_CONST.OPTION_E2EFORM);\\n !1 === a.e2eform_enc && (this.mOption |= $ASTX2_CONST.OPTION_E2EFORM_NOENC);\\n !0 === a.e2eform_alltrip && (this.mOption |= $ASTX2_CONST.OPTION_E2EFORM_ALLTRIP);\\n !0 === a.e2eform_only && (this.mOption |= $ASTX2_CONST.OPTION_E2EFORM_ONLY);\\n !0 === a.autosettext && (this.mOption |= $ASTX2_CONST.OPTION_AUTOSETTEXT);\\n !0 === a.nospt && (this.mOption |= $ASTX2_CONST.OPTION_NOSPTDUMMY);\\n !0 === a.fixedtype && (this.mOption |= $ASTX2_CONST.OPTION_FIXEDTYPE);\\n var b = $_astxu.getnc(a.e2eform_tagset);\\n 0 < b.length &&\\n ((this.mOption |= $ASTX2_CONST.OPTION_E2EFORM_TAGSET), (this.mOptionStrings.e2eform_tagset = b));\\n b = $_astxu.getint(a.none2e_alg);\\n 0 < b && ((this.mOption |= $ASTX2_CONST.OPTION_NONE2E_ALG), (this.mOptionStrings.none2e_alg = b));\\n }\\n },\\n _get_custom_value: function () {\\n 'undefined' !== typeof $ASTX2_CUST.mUseJQuery && ($ASTX2.mUseJQuery = $ASTX2_CUST.mUseJQuery);\\n 'undefined' !== typeof $ASTX2_CUST.mUseAjaxHello && ($ASTX2.mUseAjaxHello = $ASTX2_CUST.mUseAjaxHello);\\n 'undefined' !== typeof $ASTX2_CUST.mUseAutoStart &&\\n ($ASTX2.mUseAutoStart = 1 == $ASTX2.mUseAutoStart ? $ASTX2_CUST.mUseAutoStart : !1);\\n 'undefined' !== typeof $ASTX2_CUST.E2EFORM_TAIL && ($ASTX2_CONST.E2EFORM_TAIL = $ASTX2_CUST.E2EFORM_TAIL);\\n 'undefined' !== typeof $ASTX2_CUST.E2EFORM_INIT && ($ASTX2_CONST.E2EFORM_INIT = $ASTX2_CUST.E2EFORM_INIT);\\n 'undefined' !== typeof $ASTX2_CUST.E2EFORM_TAG1 && ($ASTX2_CONST.E2EFORM_TAG1 = $ASTX2_CUST.E2EFORM_TAG1);\\n 'undefined' !== typeof $ASTX2_CUST.E2EFORM_TAG2 && ($ASTX2_CONST.E2EFORM_TAG2 = $ASTX2_CUST.E2EFORM_TAG2);\\n 'undefined' !== typeof $ASTX2_CUST.E2EFORM_TAG1_PWD &&\\n ($ASTX2_CONST.E2EFORM_TAG1_PWD = $ASTX2_CUST.E2EFORM_TAG1_PWD);\\n 'undefined' !== typeof $ASTX2_CUST.E2EFORM_TAG2_PWD &&\\n ($ASTX2_CONST.E2EFORM_TAG2_PWD = $ASTX2_CUST.E2EFORM_TAG2_PWD);\\n },\\n init: function (a, b, c, d) {\\n function e() {\\n a();\\n if (1 == $_astxu.isMacLinuxOS()) {\\n f.send_alive_run();\\n try {\\n $ASTX2_MLi.init();\\n } catch (b) {}\\n }\\n }\\n this.setLastError($ASTX2_CONST.ERROR_SUCCESS);\\n if (1 == $ASTX2_COMM.isEnable()) a();\\n else {\\n this._get_custom_value();\\n null != d && ($ASTX2.mUseAutoStart = 1 == d ? $ASTX2.mUseAutoStart : !1);\\n 1 == $ASTX2.mUseJQuery && 'undefined' === typeof jQuery && ($ASTX2.mUseJQuery = !1);\\n var f = this;\\n this.mE2EInst = $ASTX2_E2E.getInstance(this);\\n this.mE2EInst.setOption(this.mOption);\\n this.mE2EInst.setOptionStrings(this.mOptionStrings);\\n var g = [],\\n h = [];\\n null != c\\n ? ((g = [55920, 55920, 55921, 55922]), (h = [c, c, c, c]))\\n : ((g = [55920, 55920, 55921, 55922]), (h = [1e4, 1500, 750, 250]));\\n setTimeout(function () {\\n f._hello_local_server(e, b, g, 0, h);\\n }, 200);\\n }\\n },\\n _check_local_server_chk_stamp: function (a, b, c, d) {\\n var e = this;\\n $_astxu.sendAuthAjax({\\n url: $ASTX2_CUST.getURL($ASTX2_CUST.URL_CHK_STAMP),\\n data: d,\\n onSuccess: function (c) {\\n c = $_astxu.jsonParse(c);\\n c = $_astxu.getnc(c ? c.result : '');\\n $_astxu.isACK(c) ? a() : (e.setLastError($ASTX2_CONST.ERROR_NCK), b());\\n },\\n onFailure: function (a) {\\n b();\\n }\\n });\\n },\\n _check_local_server: function (a, b, c, d) {\\n var e = this;\\n null == d && (d = 1);\\n 3 < d\\n ? (e.setLastError($ASTX2_CONST.ERROR_NOCONNECT), b())\\n : $_astxu.sendJsonp({\\n url: $ASTX2_COMM.mLocalServerURL + '/check',\\n data: { method: c, url: $ASTX2_CUST.getURL($ASTX2_CUST.URL_GET_STAMP), rnd: $_astxu.rnd() },\\n onSuccess: function (f) {\\n var g = $_astxu.getnc(f ? f.result : '');\\n $_astxu.isACK(g)\\n ? ((f.rnd = $_astxu.rnd()), e._check_local_server_chk_stamp(a, b, c, f))\\n : e._check_local_server(a, b, c, d + 1);\\n },\\n onFailure: function () {\\n e.setLastError($ASTX2_CONST.ERROR_FAILED);\\n e._check_local_server(a, b, c, d + 1);\\n }\\n });\\n },\\n checkServer: function (a, b, c) {\\n this.setLastError($ASTX2_CONST.ERROR_SUCCESS);\\n 0 == $ASTX2_COMM.isEnable()\\n ? (this.setLastError($ASTX2_CONST.ERROR_NOINIT), b())\\n : (0 == $_astxu.isWinOS() ? (c = 1) : null == c && (c = 1), this._check_local_server(a, b, c));\\n },\\n _e2e_enable: function () {\\n return 0 == $_astxu.isWinOS()\\n ? (this.setLastError($ASTX2_CONST.ERROR_NOTSUPPORTED), !1)\\n : 0 == $ASTX2_COMM.isEnable()\\n ? (this.setLastError($ASTX2_CONST.ERROR_NOINIT), !1)\\n : !0;\\n },\\n resetE2E: function (a, b) {\\n this.setLastError($ASTX2_CONST.ERROR_SUCCESS);\\n if (0 == this._e2e_enable()) return !1;\\n var c = this;\\n window.setTimeout(function () {\\n c.mE2EInst.attach(a, b);\\n }, 100);\\n return !0;\\n },\\n initE2E: function (a, b) {\\n this.mOption & $ASTX2_CONST.OPTION_AUTOFOCUS && $_astxu.setInputFocus();\\n return this.resetE2E(a, b);\\n },\\n resetNonE2E: function (a, b) {\\n return this.initNonE2E(a, b);\\n },\\n initNonE2E: function (a, b) {\\n this.mE2EInst.setOption($ASTX2_CONST.OPTION_NONE2E);\\n this.mOption & $ASTX2_CONST.OPTION_AUTOFOCUS && $_astxu.setInputFocus();\\n return this.resetE2E(a, b);\\n },\\n uninitE2E: function () {\\n 1 == $_astxu.isWinOS() && 1 == $ASTX2_COMM.isEnable() && this.mE2EInst.dettach();\\n },\\n uninitNonE2E: function () {\\n this.uninitE2E();\\n },\\n set_cert: function (a, b, c, d) {\\n null == d && (d = 1);\\n var e = new String($_astxu.getnc(c['cert' + d]));\\n if (0 == e.length) 0 < d ? a() : b();\\n else {\\n var f = this;\\n $_astxu.sendJsonp({\\n url: $ASTX2_COMM.mLocalServerURL + '/set_cert',\\n data: { step: d, cert: e, pageid: $ASTX2_CONST.PAGEID },\\n onSuccess: function (e) {\\n setTimeout(function () {\\n f.set_cert(a, b, c, d + 1);\\n }, 250);\\n },\\n onFailure: function () {\\n b();\\n }\\n });\\n }\\n },\\n _e2edata_get: function (a, b, c, d) {\\n var e = this;\\n a = {\\n ver: $_astxu.getint(d.ver),\\n alg: $_astxu.getint(d.alg),\\n svr: $_astxu.getnc(d.svr),\\n norsa: $_astxu.getint(d.norsa),\\n uniq: $_astxu.getnc(d.uniq),\\n utime: $_astxu.getint(d.utime),\\n ncert: $_astxu.getnc(d.ncert),\\n pageid: $ASTX2_CONST.PAGEID,\\n ids1: a.ids1,\\n names1: a.names1,\\n ids2: a.ids2,\\n names2: a.names2\\n };\\n $_astxu.sendJsonp({\\n url: $ASTX2_COMM.mLocalServerURL + '/get_data',\\n data: a,\\n timeout: 1e4,\\n onSuccess: function (a) {\\n var d = $_astxu.getnc(a ? a.result : '');\\n $_astxu.isACK(d) ? b(a) : (e.setLastError($ASTX2_CONST.ERROR_NCK), c());\\n },\\n onFailure: function () {\\n e.setLastError($ASTX2_CONST.ERROR_FAILED);\\n c();\\n }\\n });\\n },\\n _e2edata: function (a, b, c) {\\n var d = this;\\n $_astxu.sendAuthAjax({\\n url: $ASTX2_CUST.getURL($ASTX2_CUST.URL_GET_CERT),\\n onSuccess: function (e) {\\n var f = $_astxu.jsonParse(e);\\n e = $_astxu.getnc(f ? f.result : '');\\n 0 == $_astxu.isACK(e)\\n ? (d.setLastError($ASTX2_CONST.ERROR_NCK), c())\\n : d.set_cert(\\n function () {\\n d._e2edata_get(a, b, c, f);\\n },\\n function () {\\n d.setLastError($ASTX2_CONST.ERROR_NOCONNECT);\\n c();\\n },\\n f\\n );\\n },\\n onFailure: function (a) {\\n d.setLastError($ASTX2_CONST.ERROR_FAILED);\\n c();\\n }\\n });\\n },\\n getE2EData: function (a, b, c) {\\n this.setLastError($ASTX2_CONST.ERROR_SUCCESS);\\n if (0 == this._e2e_enable()) c();\\n else {\\n var d = [],\\n e = [],\\n f = [],\\n g = [];\\n this.mE2EInst.getE2EelmsForm(a, d, e, 1);\\n this.mE2EInst.getE2EelmsForm(a, f, g, 2);\\n a = { ids1: d.join(','), names1: e.join(','), ids2: f.join(','), names2: g.join(',') };\\n this._e2edata(a, b, c);\\n }\\n },\\n getE2EDataRetry: function (a, b, c, d, e) {\\n null == d && (d = 3);\\n null == e && (e = 1e3);\\n if (0 >= d) this.setLastError($ASTX2_CONST.ERROR_EXCESS), c();\\n else {\\n var f = this;\\n this.getE2EData(\\n a,\\n function (a) {\\n b(a);\\n },\\n function () {\\n f.getLastError() == $ASTX2_CONST.ERROR_NOINIT\\n ? window.setTimeout(function () {\\n f.getE2EDataRetry(a, b, c, d - 1, e);\\n }, e)\\n : c();\\n }\\n );\\n }\\n },\\n getE2EDataIDs: function (a, b, c) {\\n this.setLastError($ASTX2_CONST.ERROR_SUCCESS);\\n if (0 == this._e2e_enable()) c();\\n else {\\n null == a && (that.setLastError($ASTX2_CONST.ERROR_PARAM), c());\\n var d = [],\\n e = [],\\n f = [],\\n g = [];\\n this.mE2EInst.getE2EelmsID(a, d, e, 1);\\n this.mE2EInst.getE2EelmsID(a, f, g, 2);\\n a = { ids1: d.join(','), names1: e.join(','), ids2: f.join(','), names2: g.join(',') };\\n this._e2edata(a, b, c);\\n }\\n },\\n setE2EData: function (a, b, c, d) {\\n null == c && (c = !0);\\n null == d && (d = '');\\n var e = $_astxu.getnc(b.e2e_data1);\\n 0 < e.length && ($_astxu.getCreatedFormValue(a, 'e2e_data1').value = e);\\n b = $_astxu.getnc(b.e2e_data2);\\n 0 < b.length && ($_astxu.getCreatedFormValue(a, 'e2e_data2').value = b);\\n 1 == c && this.mE2EInst.resetE2Evalues($_astxu.getnc(a.name), d);\\n },\\n getE2EPageID: function () {\\n return $ASTX2_CONST.PAGEID;\\n },\\n getE2EInputID: function (a) {\\n a = this.mE2EInst.getE2Eattribute(a);\\n return null == a ? null : a.e2e_inputid;\\n },\\n getE2EHash: function (a, b) {\\n this.mE2EInst.getE2EHash(a, function (a, d) {\\n b(a, d);\\n });\\n },\\n getEncText: function (a, b, c) {\\n this.mE2EInst.getEncText(a, b, function (a, b, f) {\\n c(b, f);\\n });\\n },\\n getE2EText: function (a, b) {\\n this.mE2EInst.getE2EText(a, function (a, d, e) {\\n b(d, e);\\n });\\n },\\n getE2ETextS: function (a, b) {\\n for (var c = 0, d = 0, e = [], f = 0; f < a.length; f++) {\\n var g = a[f];\\n null != g && ((g = g.getAttribute('e2e_type')), null != g && g == $ASTX2_CONST.E2ETYPE_PLAIN2 && c++);\\n }\\n if (0 == c || c != a.length) b(e, $ASTX2_CONST.ERROR_PARAM);\\n else\\n for (f = 0; f < a.length; f++)\\n this.mE2EInst.getE2EText(a[f], function (a, f, g) {\\n d >= c || (0 == g ? (e[a] = f) : (d = c), ++d >= c && b(e, g));\\n });\\n },\\n setE2EText: function (a, b) {\\n this.mE2EInst.setE2EText(a, b);\\n },\\n clearE2EText: function (a, b) {\\n this.mE2EInst.clearE2EText(a, b);\\n },\\n clearE2EForm: function (a) {\\n for (var b = document.getElementsByTagName('input'), c = 0; c < b.length; c++) {\\n var d = b[c];\\n null != d &&\\n d.form.name == a &&\\n 0 != ('text' == d.type || 'password' == d.type) &&\\n null != d.getAttribute('e2e_type') &&\\n this.mE2EInst.clearE2EText(d);\\n }\\n },\\n addE2EObject: function (a, b) {\\n null == b && (b = $ASTX2_CONST.E2ETYPE_CERT1);\\n !a || ('text' != a.type && 'password' != a.type) || (a.setAttribute('e2e_type', b), this.mE2EInst.addObject(a));\\n },\\n subE2EObject: function (a) {\\n a && this.mE2EInst.subObject(a);\\n },\\n setE2EAllExceptInputs: function () {\\n for (var a = document.getElementsByTagName('input'), b = 0; b < a.length; b++) {\\n var c = a[b];\\n null != c &&\\n 0 != ('text' == c.type || 'password' == c.type) &&\\n null == c.getAttribute('e2e_type') &&\\n c.setAttribute('e2e_type', $ASTX2_CONST.E2ETYPE_NONE);\\n }\\n },\\n killFocusE2EAllInputs: function () {\\n for (var a = document.getElementsByTagName('input'), b = 0; b < a.length; b++) {\\n var c = a[b];\\n null != c && 0 != ('text' == c.type || 'password' == c.type) && 0 < c.getAttribute('e2e_type') && c.blur();\\n }\\n },\\n _pclogdata_get: function (a, b, c, d) {\\n var e = this;\\n c = {\\n ver: $_astxu.getint(c.ver),\\n alg: $_astxu.getint(c.alg),\\n svr: $_astxu.getnc(c.svr),\\n norsa: $_astxu.getint(c.norsa),\\n uniq: $_astxu.getnc(c.uniq),\\n utime: $_astxu.getint(c.utime),\\n nlog: $_astxu.getnc(c.nlog),\\n ipaddr: $_astxu.getnc(c.ipaddr),\\n s2c_alg: $_astxu.getnc(c.s2c_alg),\\n s2c_key: $_astxu.getnc(c.s2c_key),\\n s2c_salt: $_astxu.getnc(c.s2c_salt),\\n browser: $ASTX2_CONST.BROWSER_VER,\\n pageid: $ASTX2_CONST.PAGEID,\\n opt: d\\n };\\n $_astxu.sendJsonp({\\n url: $ASTX2_COMM.mLocalServerURL + '/get_pclog',\\n data: c,\\n timeout: 1e4,\\n onSuccess: function (c) {\\n var d = $_astxu.getnc(c ? c.result : '');\\n $_astxu.isACK(d) ? a(c) : (e.setLastError($ASTX2_CONST.ERROR_NCK), b());\\n },\\n onFailure: function () {\\n e.setLastError($ASTX2_CONST.ERROR_FAILED);\\n b();\\n }\\n });\\n },\\n _pclogdata: function (a, b, c) {\\n var d = this;\\n $_astxu.sendAuthAjax({\\n url: $ASTX2_CUST.getURL($ASTX2_CUST.URL_GET_CERT),\\n data: { pclog: 1, client_public_key: $ASTX2_COMM.mClientPublicKey },\\n onSuccess: function (e) {\\n var f = $_astxu.jsonParse(e);\\n e = $_astxu.getnc(f ? f.result : '');\\n 0 == $_astxu.isACK(e)\\n ? (d.setLastError($ASTX2_CONST.ERROR_NCK), b())\\n : d.set_cert(\\n function () {\\n d._pclogdata_get(a, b, f, c);\\n },\\n function () {\\n d.setLastError($ASTX2_CONST.ERROR_NOCONNECT);\\n b();\\n },\\n f\\n );\\n },\\n onFailure: function (a) {\\n d.setLastError($ASTX2_CONST.ERROR_FAILED);\\n b();\\n }\\n });\\n },\\n getPCLOGData: function (a, b, c, d) {\\n null == d && (d = '');\\n this.setLastError($ASTX2_CONST.ERROR_SUCCESS);\\n 0 == $ASTX2_COMM.isEnable() ? (this.setLastError($ASTX2_CONST.ERROR_NOINIT), c()) : this._pclogdata(b, c, d);\\n },\\n getPCLOGDataRetry: function (a, b, c, d, e) {\\n null == d && (d = 3);\\n null == e && (e = 1e3);\\n if (0 >= d) this.setLastError($ASTX2_CONST.ERROR_EXCESS), c();\\n else {\\n var f = this;\\n this.getPCLOGData(\\n a,\\n function (a) {\\n b(a);\\n },\\n function () {\\n f.getLastError() == $ASTX2_CONST.ERROR_NOINIT\\n ? window.setTimeout(function () {\\n f.getPCLOGDataRetry(a, b, c, d - 1, e);\\n }, e)\\n : c();\\n }\\n );\\n }\\n },\\n setPCLOGData: function (a, b) {\\n var c = $_astxu.getnc(b.pclog_data);\\n 0 < c.length && ($_astxu.getCreatedFormValue(a, 'pclog_data').value = c);\\n },\\n isVmEnv: function (a, b) {\\n 0 == $ASTX2_COMM.isEnable()\\n ? a(null, $ASTX2_CONST.ERROR_NOINIT)\\n : (null == b && (b = ''),\\n $_astxu.sendJsonp({\\n url: $ASTX2_COMM.mLocalServerURL + '/is_vm_env',\\n data: { opts: b },\\n onSuccess: function (b) {\\n var d = $_astxu.getnc(b ? b.result : '');\\n $_astxu.isACK(d) ? a(b.vm_env, $ASTX2_CONST.ERROR_SUCCESS) : a(null, $ASTX2_CONST.ERROR_NCK);\\n },\\n onFailure: function () {\\n a(null, $ASTX2_CONST.ERROR_FAILED);\\n }\\n }));\\n },\\n isRemoteEnv: function (a, b) {\\n 0 == $ASTX2_COMM.isEnable()\\n ? a(null, $ASTX2_CONST.ERROR_NOINIT)\\n : (null == b && (b = ''),\\n $_astxu.sendJsonp({\\n url: $ASTX2_COMM.mLocalServerURL + '/is_remote_env',\\n data: { opts: b },\\n onSuccess: function (b) {\\n var d = $_astxu.getnc(b ? b.result : '');\\n $_astxu.isACK(d) ? a(b.remote_env, $ASTX2_CONST.ERROR_SUCCESS) : a(null, $ASTX2_CONST.ERROR_NCK);\\n },\\n onFailure: function () {\\n a(null, $ASTX2_CONST.ERROR_FAILED);\\n }\\n }));\\n },\\n isVmRemoteEnv: function (a, b) {\\n 0 == $ASTX2_COMM.isEnable()\\n ? a(null, $ASTX2_CONST.ERROR_NOINIT)\\n : (null == b && (b = ''),\\n $_astxu.sendJsonp({\\n url: $ASTX2_COMM.mLocalServerURL + '/is_vm_remote_env',\\n data: { opts: b },\\n onSuccess: function (b) {\\n var d = $_astxu.getnc(b ? b.result : '');\\n $_astxu.isACK(d) ? a(b.vm_remote_env, $ASTX2_CONST.ERROR_SUCCESS) : a(null, $ASTX2_CONST.ERROR_NCK);\\n },\\n onFailure: function () {\\n a(null, $ASTX2_CONST.ERROR_FAILED);\\n }\\n }));\\n },\\n checkService: function (a, b) {\\n a == $ASTX2_CONST.SERVICE_AK && this.mE2EInst.checkService(b);\\n },\\n setProtect: function (a, b) {\\n if (0 == $ASTX2_COMM.isEnable()) b && b($ASTX2_CONST.ERROR_NOINIT);\\n else {\\n var c = {\\n customerid: $_astxu.getnc($ASTX2_CUST.mCustomerID),\\n ak: a & $ASTX2_CONST.PROTECT_AK ? 1 : -1,\\n fw: a & $ASTX2_CONST.PROTECT_FW ? 1 : -1,\\n pb: a & $ASTX2_CONST.PROTECT_PB ? 1 : -1,\\n pcs: a & $ASTX2_CONST.PROTECT_PCS ? 1 : -1\\n };\\n $_astxu.sendJsonp({\\n url: $ASTX2_COMM.mLocalServerURL + '/set_protect',\\n data: c,\\n onSuccess: function (a) {\\n a = $_astxu.getnc(a ? a.result : '');\\n $_astxu.isACK(a) ? b && b($ASTX2_CONST.ERROR_SUCCESS) : b && b($ASTX2_CONST.ERROR_NCK);\\n },\\n onFailure: function () {\\n b && b($ASTX2_CONST.ERROR_FAILED);\\n }\\n });\\n }\\n },\\n isNotSupportOS: function (a, b) {\\n 0 == $ASTX2_COMM.isEnable()\\n ? b && b(null, $ASTX2_CONST.ERROR_NOINIT)\\n : $_astxu.sendJsonp({\\n url: $ASTX2_COMM.mLocalServerURL + '/is_not_support_os',\\n data: {\\n ak: a & $ASTX2_CONST.PROTECT_AK ? 1 : 0,\\n fw: a & $ASTX2_CONST.PROTECT_FW ? 1 : 0,\\n pb: a & $ASTX2_CONST.PROTECT_PB ? 1 : 0,\\n pcs: a & $ASTX2_CONST.PROTECT_PCS ? 1 : 0\\n },\\n onSuccess: function (a) {\\n var d = $_astxu.getnc(a ? a.result : '');\\n $_astxu.isACK(d) ? b && b(a, $ASTX2_CONST.ERROR_SUCCESS) : b && b(null, $ASTX2_CONST.ERROR_NCK);\\n },\\n onFailure: function () {\\n b && b(null, $ASTX2_CONST.ERROR_FAILED);\\n }\\n });\\n },\\n isAccessible: function (a, b, c, d, e) {\\n null == e && (e = 750);\\n if (a == $ASTX2_CONST.REQUEST_JSONP)\\n $_astxu.sendJsonp({\\n url: b,\\n nocallback: !0,\\n timeout: e,\\n onSuccess: function () {\\n c && c(b);\\n },\\n onFailure: function () {\\n d && d(b);\\n }\\n });\\n else {\\n if (\\n 0 != b.indexOf(window.location.protocol + '//' + window.location.host) &&\\n 'IE' == $ASTX2_CONST.BROWSER_TYPE\\n ) {\\n if ('IE10' != $ASTX2_CONST.BROWSER_VER && 'IE11' != $ASTX2_CONST.BROWSER_VER) {\\n d && d(b, 'CORS, not allowed browser');\\n return;\\n }\\n if (0 != b.indexOf('http:') && 0 != b.indexOf('https:')) {\\n d && d(b, 'CORS, not allowed protocol');\\n return;\\n }\\n }\\n $_astxu.sendAjax({\\n url: b,\\n type: 'GET',\\n timeout: e,\\n onSuccess: function (a) {\\n c && c(b);\\n },\\n onFailure: function (a) {\\n d && d(b, a);\\n }\\n });\\n }\\n },\\n uninit: function () {\\n this.uninitE2E();\\n $ASTX2_COMM.uninit();\\n },\\n setLastError: function (a) {\\n this.mLastError = a;\\n },\\n getLastError: function () {\\n return this.mLastError;\\n }\\n };\\n$ASTX2_MLi = {\\n init: function () {\\n setTimeout(function () {\\n var a = { pageid: $ASTX2_CONST.PAGEID, focus: $_astxu.hasFocused() ? 1 : 0 };\\n $_astxu.sendJsonp({ url: $ASTX2_COMM.mLocalServerURL + '/initForML', timeout: 1e3, data: a });\\n }, 200);\\n }\\n};\\n\\nwindow.$ASTX2 = {\\n ...$ASTX2,\\n $ASTX2_COMM,\\n $_astxu,\\n $ASTX2_E2E,\\n $ASTX2_MLi\\n};\\n\\n/* ASTx 1.3 | (C) Copyright AhnLab, Inc. | $Revision: 30833 $ */\\nconst getSubdomain = (hostname) => {\\n if (!hostname || hostname === 'localhost' || hostname === '127.0.0.1') {\\n return '';\\n }\\n\\n const parts = hostname.split('.');\\n\\n // \\uCD5C\\uC18C 3\\uAC1C \\uBD80\\uBD84\\uC774 \\uC788\\uC5B4\\uC57C \\uC11C\\uBE0C\\uB3C4\\uBA54\\uC778 \\uC874\\uC7AC (subdomain.domain.com)\\n if (parts.length < 3) {\\n return '';\\n }\\n\\n // \\uCCAB \\uBC88\\uC9F8 \\uBD80\\uBD84\\uC774 \\uC11C\\uBE0C\\uB3C4\\uBA54\\uC778\\n return parts[0] ?? '';\\n};\\n\\n/**\\n * \\uD638\\uC2A4\\uD2B8\\uBA85\\uC744 \\uAE30\\uBC18\\uC73C\\uB85C \\uD658\\uACBD\\uC744 \\uD310\\uB2E8\\uD569\\uB2C8\\uB2E4.\\n * @param hostname \\uD638\\uC2A4\\uD2B8\\uBA85\\n * @returns \\uD658\\uACBD \\uAD6C\\uBD84 \\uBB38\\uC790\\uC5F4 ('local' | 'dev' | 'stg' | 'prd')\\n */\\nconst getEnvironmentFromHostname = (hostname) => {\\n const subDomain = getSubdomain(hostname);\\n\\n // localhost \\uD310\\uB2E8\\n if (hostname === 'localhost' || hostname === '127.0.0.1' || hostname.startsWith('localhost:')) {\\n return 'local';\\n }\\n\\n // dev \\uD658\\uACBD \\uD310\\uB2E8\\n if (subDomain.includes(`dev`)) {\\n return 'dev';\\n }\\n\\n // stg \\uD658\\uACBD \\uD310\\uB2E8\\n if (subDomain.includes('stg')) {\\n return 'stg';\\n }\\n\\n // \\uAE30\\uBCF8 \\uC6B4\\uC601\\n return 'prd';\\n};\\n\\nconst getServicePath = () => {\\n if (typeof window.isStorybookEnv === 'boolean') {\\n return '';\\n } else {\\n return `/${location.pathname.split('/')[1]}`;\\n }\\n};\\n\";\n\n// src/utils/astx2/astx2_custom.js\nvar astx2_custom_default = \"/* ASTx 1.3 | (C) Copyright AhnLab, Inc. | $Revision: 30833 $ */\\r\\n/* eslint-disable */\\r\\n\\r\\nlet $ASTX2_CUST = {\\r\\n // Customer option\\r\\n /*\\r\\n\tmUseJQuery: false, \t// Whether to use JQuery.\t\\r\\n\tmUseAjaxHello: false,\\r\\n\tmUseAutoStart: false, \\r\\n\tE2EFORM_TAIL: true,\\r\\n\tE2EFORM_INIT: '_e2e_forminit',\\r\\n\tE2EFORM_TAG1: '_e2e_1__',\\r\\n\tE2EFORM_TAG2: '_e2e_2__',\\r\\n\tE2EFORM_TAG1_PWD: '_e2e_1_pwd__',\\r\\n\tE2EFORM_TAG2_PWD: '_e2e_2_pwd__',\\r\\n\t*/\\r\\n\\r\\n mCustomerID: null, // Customer ID for setProtect.\\r\\n\\r\\n // ASTX2_CUST defined values\\r\\n URL_GET_INIT: 101,\\r\\n URL_GET_CERT: 102,\\r\\n URL_GET_STAMP: 103,\\r\\n URL_CHK_STAMP: 104,\\r\\n\\r\\n setCustomerID(customerID) {\\r\\n if (customerID !== null && customerID !== 'undefined') {\\r\\n this.mCustomerID = customerID;\\r\\n }\\r\\n },\\r\\n\\r\\n getURL(type) {\\r\\n let result = '';\\r\\n const timestamp = new Date().getTime();\\r\\n\\r\\n switch (type) {\\r\\n case this.URL_GET_INIT:\\r\\n result = `${getServicePath()}/api/dea/sltn/astx2/init/get`;\\r\\n break;\\r\\n case this.URL_GET_CERT:\\r\\n result = `${getServicePath()}/api/dea/sltn/astx2/cert/get?v=${timestamp}`; // WAF \\uCC28\\uB2E8 \\uBC29\\uC9C0 (post \\uC694\\uCCAD \\uC2DC \\uAC12\\uC774 \\uC5C6\\uB294 \\uACBD\\uC6B0 \\uCC28\\uB2E8)\\r\\n break;\\r\\n case this.URL_GET_STAMP:\\r\\n result = `${getServicePath()}/api/dea/sltn/astx2/stamp/get`;\\r\\n break;\\r\\n case this.URL_CHK_STAMP:\\r\\n result = `${getServicePath()}/api/dea/sltn/astx2/stamp-chk/post`;\\r\\n break;\\r\\n } // end of switch\\r\\n\\r\\n return result;\\r\\n },\\r\\n\\r\\n isE2EObject(obj) {\\r\\n return false;\\r\\n },\\r\\n\\r\\n getE2Etype(obj) {\\r\\n return null;\\r\\n },\\r\\n\\r\\n onCreatedFormValue(obj, obj_name) {},\\r\\n\\r\\n onHandlerPreFocus(obj, event) {},\\r\\n\\r\\n onHandlerKeyDown(obj, event) {\\r\\n return true;\\r\\n },\\r\\n\\r\\n getErrorMessage(errno) {\\r\\n let message = '[ASTx] ';\\r\\n\\r\\n switch (errno) {\\r\\n case $ASTX2_CONST.ERROR_FAILED:\\r\\n message += '\\uB0B4\\uBD80 \\uC624\\uB958\\uAC00 \\uBC1C\\uC0DD\\uD558\\uC600\\uC2B5\\uB2C8\\uB2E4.';\\r\\n break;\\r\\n case $ASTX2_CONST.ERROR_NOINIT:\\r\\n message += '\\uCD08\\uAE30\\uD654\\uAC00 \\uD544\\uC694\\uD569\\uB2C8\\uB2E4.';\\r\\n break;\\r\\n case $ASTX2_CONST.ERROR_NOTINST:\\r\\n message += '\\uC124\\uCE58\\uB418\\uC5B4 \\uC788\\uC9C0 \\uC54A\\uC2B5\\uB2C8\\uB2E4.';\\r\\n break;\\r\\n case $ASTX2_CONST.ERROR_NOTSUPPORTED:\\r\\n message += '\\uC9C0\\uC6D0\\uD558\\uC9C0 \\uC54A\\uB294 OS\\uC785\\uB2C8\\uB2E4.';\\r\\n break;\\r\\n case $ASTX2_CONST.ERROR_NOCONNECT:\\r\\n message += '\\uC11C\\uBC84(Web) \\uD1B5\\uC2E0 \\uC2E4\\uD328\\uC785\\uB2C8\\uB2E4.';\\r\\n break;\\r\\n case $ASTX2_CONST.ERROR_NCK:\\r\\n message += '\\uC11C\\uBC84(Local) \\uC751\\uB2F5 \\uC2E4\\uD328\\uC785\\uB2C8\\uB2E4.';\\r\\n break;\\r\\n case $ASTX2_CONST.ERROR_ERR:\\r\\n message += '\\uC11C\\uBC84(Local) \\uB0B4\\uBD80 \\uC624\\uB958\\uC785\\uB2C8\\uB2E4.';\\r\\n break;\\r\\n case $ASTX2_CONST.ERROR_NSP:\\r\\n message += '\\uC9C0\\uC6D0\\uD558\\uC9C0 \\uB418\\uC9C0 \\uC54A\\uB294 \\uD658\\uACBD\\uC785\\uB2C8\\uB2E4.';\\r\\n break;\\r\\n case $ASTX2_CONST.ERROR_PARAM:\\r\\n message += '\\uC798\\uBABB\\uB41C \\uC778\\uC790\\uC785\\uB2C8\\uB2E4.';\\r\\n break;\\r\\n case $ASTX2_CONST.ERROR_EXCESS:\\r\\n message += '\\uC7AC\\uC2DC\\uB3C4 \\uD68C\\uC218\\uB97C \\uCD08\\uACFC \\uD558\\uC600\\uC2B5\\uB2C8\\uB2E4.';\\r\\n break;\\r\\n case $ASTX2_CONST.ERROR_NEEDUPDATE:\\r\\n message += '\\uC81C\\uD488 \\uC5C5\\uB370\\uC774\\uD2B8\\uAC00 \\uD544\\uC694\\uD569\\uB2C8\\uB2E4.';\\r\\n break;\\r\\n default:\\r\\n message += `errno=${errno}`;\\r\\n break;\\r\\n } // end of switch\\r\\n\\r\\n return message;\\r\\n },\\r\\n\\r\\n errorAbort(errno) {\\r\\n alert(this.getErrorMessage(errno));\\r\\n }\\r\\n};\\r\\n\";\n\n// src/utils/astx2-utils.ts\nfunction addE2EObject(el, e2e_type) {\n if (window.$ASTX2) {\n window.$ASTX2.addE2EObject(el, e2e_type);\n window.$ASTX2.resetE2E();\n }\n}\nfunction hasAstx2() {\n return !!window.$ASTX2;\n}\nvar loadScript = (callback) => {\n if (!window.$ASTX2) {\n console.log(\"dynamic load\");\n const script = document.createElement(\"script\");\n script.innerHTML = `\n ${astx2_min_default} \n ${astx2_custom_default}\n `;\n document.head.appendChild(script);\n script.onload = () => {\n callback && callback();\n };\n }\n};\nvar init = ({\n initSuccess = () => {\n },\n initFailure = () => {\n },\n checkServerSuccess = () => {\n },\n checkServerFailure = () => {\n }\n} = {}) => {\n window.$ASTX2.init(\n () => {\n window.$ASTX2.initE2E();\n window.$ASTX2.checkServer(\n () => {\n checkServerSuccess();\n },\n () => {\n checkServerFailure();\n console.error(`ASTX.checkServer() onFailure: errno=${window.$ASTX2.getLastError()}`);\n }\n );\n initSuccess();\n },\n () => {\n initFailure();\n if (window.$ASTX2.getLastError() === 103) {\n console.error(\"AhnLab Safe Transaction \\uD074\\uB77C\\uC774\\uC5B8\\uD2B8\\uAC00 \\uC124\\uCE58\\uB418\\uC9C0 \\uC54A\\uC558\\uC2B5\\uB2C8\\uB2E4.\");\n } else {\n console.error(`$ASTX2.init() onFailure: errno=${window.$ASTX2.getLastError()}`);\n }\n }\n );\n};\nvar initASTX2 = ({\n initSuccess = () => {\n },\n initFailure = () => {\n },\n checkServerSuccess = () => {\n },\n checkServerFailure = () => {\n }\n} = {}) => {\n if (window.$ASTX2) {\n init({\n initSuccess,\n initFailure,\n checkServerSuccess,\n checkServerFailure\n });\n }\n};\nfunction getE2EDataIDs(ids, onSuccess, onFailure = () => {\n}) {\n if (window.$ASTX2) {\n window.$ASTX2.getE2EDataIDs(\n ids,\n async (astx_data) => {\n onSuccess(astx_data);\n },\n () => {\n onFailure();\n console.log(`ASTX.getE2EData() onFailure: errno=${window.$ASTX2.getLastError()}`);\n }\n );\n }\n}\ndayjs.locale(\"ko\");\ndayjs.extend(customParseFormat);\nfunction getLastDay(year, month) {\n switch (month) {\n case 2:\n return year % 4 === 0 ? 29 : 28;\n case 4:\n case 6:\n case 9:\n case 11:\n return 30;\n default:\n return 31;\n }\n}\nvar getOneMonthLater = (value, format) => {\n const str = value ? value.split(\".\").join(\"\") : \"\";\n const date = value ? new Date(Number(str.substring(0, 4)), Number(str.substring(4, 6)) - 1, Number(str.substring(6, 8))) : /* @__PURE__ */ new Date();\n try {\n return dayjs(new Date(date.setMonth(date.getMonth() + 1))).format(format || \"YYYY.MM.DD\");\n } catch (err) {\n console.warn(err);\n return \"\";\n }\n};\nvar getDateDiff = (date1, date2) => {\n const diff1 = dayjs(date1);\n const diff2 = dayjs(date2);\n return diff1.diff(diff2, \"day\");\n};\nvar validateBirthdate = (front, back) => {\n const year = parseInt(front.slice(0, 2));\n const month = parseInt(front.slice(2, 4));\n const day = parseInt(front.slice(4, 6));\n let birthYear = 0;\n switch (back) {\n case \"1\":\n case \"2\":\n case \"5\":\n case \"6\":\n birthYear = 1900 + year;\n break;\n case \"3\":\n case \"4\":\n case \"7\":\n case \"8\":\n birthYear = 2e3 + year;\n break;\n case \"9\":\n case \"0\":\n return false;\n default:\n return false;\n }\n const birthdate = new Date(birthYear, month - 1, day);\n const currdate = /* @__PURE__ */ new Date();\n return birthdate < currdate;\n};\nfunction isDateAfter(targetDate, compareDate) {\n const targetDateTime = new Date(convertDateFormat(targetDate, \"YYYY-MM-DD\")).getTime();\n const compareDateTime = new Date(convertDateFormat(compareDate, \"YYYY-MM-DD\")).getTime();\n return targetDateTime > compareDateTime;\n}\nvar convertDateFormat = (value, format) => {\n if (!value) {\n return \"\";\n }\n return dayjs(value).format(format || \"YYYY.MM.DD\");\n};\nvar isFutureDate = (dateString, format) => {\n if (!dateString) {\n return false;\n }\n const today = dayjs().startOf(\"day\");\n const date = dayjs(dateString, format || \"YYYYMMDD\", true);\n return date.isValid() && date.isAfter(today);\n};\nvar convertDateString = ({ dateString, fromFormat, toFormat }) => {\n return dayjs(dateString, fromFormat).format(toFormat);\n};\nvar isDate = (value) => {\n return value instanceof Date && !isNaN(+value);\n};\nvar isValidDate = (dateString, format) => {\n if (!dateString) {\n return false;\n }\n const date = dayjs(dateString, format || \"YYYYMMDD\", true);\n return date.isValid();\n};\nvar getPeriodDate = (periodType) => {\n const lastMonth = dayjs().subtract(1, \"M\");\n const today = /* @__PURE__ */ new Date();\n today.setHours(0, 0, 0, 0);\n const endDate = new Date(today);\n let startDate;\n switch (periodType) {\n case \"today\":\n startDate = new Date(today);\n return { startDate, endDate };\n case \"week\":\n startDate = new Date(today);\n startDate.setDate(startDate.getDate() - 6);\n return { startDate, endDate };\n case \"month\":\n startDate = new Date(today);\n startDate.setDate(startDate.getDate() - 29);\n return { startDate, endDate };\n case \"thisWeek\":\n return { startDate: dayjs().day(0).toDate(), endDate: dayjs().day(6).toDate() };\n case \"lastWeek\":\n return {\n startDate: dayjs().subtract(1, \"w\").day(0).toDate(),\n endDate: dayjs().subtract(1, \"w\").day(6).toDate()\n };\n case \"last7Days\":\n return { startDate: dayjs().subtract(7, \"d\").toDate(), endDate: dayjs().toDate() };\n case \"thisMonth\":\n return {\n startDate: dayjs().date(1).toDate(),\n endDate: dayjs().date(dayjs().daysInMonth()).toDate()\n };\n case \"lastMonth\":\n return {\n startDate: lastMonth.date(1).toDate(),\n endDate: lastMonth.date(lastMonth.daysInMonth()).toDate()\n };\n case \"last365Days\":\n return { startDate: dayjs().subtract(365, \"d\").toDate(), endDate: dayjs().toDate() };\n default:\n return null;\n }\n};\n\n// src/utils/ga/ga.js\nvar ga_default = \"(function (w, d, s, l, i) {\\n w[l] = w[l] || [];\\n w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' });\\n let f = d.getElementsByTagName(s)[0],\\n j = d.createElement(s),\\n dl = l !== 'dataLayer' ? `&l=${l}` : '';\\n j.async = true;\\n j.src = `https://www.googletagmanager.com/gtm.js?id=${i}${dl}`;\\n f.parentNode.insertBefore(j, f);\\n})(window, document, 'script', 'dataLayer', 'GTM-PPT3LJ56');\\n\";\n\n// src/utils/ga/index.ts\nvar loadGaScript = () => {\n if (isClient()) {\n if (document.querySelector('script[src*=\"googletagmanager.com/gtm.js\"]')) {\n return;\n }\n console.log(\"ga script load dynamic\");\n const script = document.createElement(\"script\");\n script.innerHTML = `\n ${ga_default}\n `;\n document.head.appendChild(script);\n }\n};\n\nexport { MessageEventManager, addE2EObject, base64ToBlob, base64ToFile, blobToFile, checkUserAgentDspApp, convertDateFormat, convertDateString, convertTextToImg, debounce, deleteCookie, downloadBlob, drawImageResizeCentered, fileToBase64, getApiHostNameFromEnvironment, getBrowserName, getBrowserVersion, getBusinessWorkDivisionCode, getCdnHostNameFromEnvironment, getCookie, getCurrentBrowserName, getCurrentBrowserVersion, getCurrentOSName, getCurrentOSVersion, getDateDiff, getDeviceModel, getDspApiBasePathFromEnvironment, getDspExecutionEnvironment, getDudApiBasePathFromEnvironment, getE2EDataIDs, getEnvironmentFromHostname, getExt, getFormFactorFromUserAgent, getLastDay, getNlcHostFromEnvironment, getOSName, getOSVersion, getOneMonthLater, getOrCreateDeviceId, getPeriodDate, getServicePath, getSubdomain, hasAstx2, imageUrlToFile, imageUrlToFileFetch, imageUrlToFileWithCanvas, imageUrlToFileWithXMLHttpRequest, initASTX2, isAndroidDevice, isAndroidWebView, isClient, isDate, isDateAfter, isDspApp, isFpPlannerApp, isFutureDate, isIosDevice, isIosWebView, isPc, isPhone, isProductionApp, isSalesPortal, isStorybookEnv, isTablet, isValidDate, loadGaScript, loadScript, objectUrlToBase64, objectUrlToBlob, setCookie, throttle, validateBirthdate };\n//# sourceMappingURL=index.js.map\n//# sourceMappingURL=index.js.map","/* eslint-disable react-hooks/exhaustive-deps */\nimport React from 'react';\n\nimport { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { DatePicker, type DatePickerSingleHtmlProps } from 'sales-frontend-design-system';\nimport { isDate } from 'sales-frontend-utils';\n\nexport const FormDatePicker = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n defaultValue,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled' | 'defaultValue'> &\n DatePickerSingleHtmlProps) => {\n const { field, fieldState } = useController({ name, control, disabled, defaultValue });\n const [selected, setSelected] = React.useState<Date | undefined>();\n\n React.useEffect(() => {\n if (isDate(field.value) && field.value !== selected) {\n setSelected(field.value);\n }\n }, [field.value]);\n\n return (\n <DatePicker\n tabIndex={0}\n {...{\n ...props,\n ...field,\n id: field.name,\n\n defaultValue: selected,\n error: fieldState.invalid,\n onValueChange: field.onChange\n }}\n />\n );\n};\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport React from 'react';\n\nimport { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { DateRangePicker, type PeriodDate, type DatePickerRangeHtmlProps } from 'sales-frontend-design-system';\n\nexport const FormDateRangePicker = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n defaultValue,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled' | 'defaultValue'> &\n DatePickerRangeHtmlProps) => {\n const { field, fieldState } = useController({\n name,\n control,\n disabled,\n defaultValue\n });\n const [selected, setSelected] = React.useState<PeriodDate | undefined>();\n\n React.useEffect(() => {\n const fieldValue = field.value as PeriodDate | undefined;\n\n // 1. field.value가 없을 경우, selected도 초기화\n if (!fieldValue) {\n setSelected(undefined);\n\n return;\n }\n\n // 2. selected가 없거나,\n // 3. field.value와 selected의 startDate 또는 endDate가 다를 경우에만 setSelected 실행\n const isStartDateDifferent = fieldValue.startDate?.getTime() !== selected?.startDate?.getTime();\n const isEndDateDifferent = fieldValue.endDate?.getTime() !== selected?.endDate?.getTime();\n\n if (!selected || isStartDateDifferent || isEndDateDifferent) {\n // console.warn('field.value 업데이트 감지, selected 업데이트');\n setSelected(fieldValue);\n }\n }, [field.value]);\n\n return (\n <DateRangePicker\n tabIndex={0}\n {...{\n ...props,\n ...field,\n id: field.name,\n defaultValue: selected,\n error: fieldState.invalid,\n onValueChange: field.onChange\n }}\n />\n );\n};\n","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue.call(this, arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn this && this[arg] || arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(this, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, this && this[key] || key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import { JSX } from 'react';\n\nexport const highlightOnSearchKeyword = (originalText: string, targetString: string) => {\n if (!targetString || !originalText?.includes(targetString)) {\n return originalText;\n }\n const replacedText: (string | JSX.Element)[] = [];\n const splitText = originalText.split(targetString);\n\n for (let i = 0; i < splitText.length; i++) {\n replacedText.push(splitText[i] || '');\n if (i < splitText.length - 1) {\n replacedText.push(\n <span key={`search-keyword-highlight-${i}-${Math.random()}`} className=\"text-primary\">\n {targetString}\n </span>\n );\n }\n }\n\n return replacedText;\n};\n\nexport const getGenderName = (genderCode?: string) => {\n switch (genderCode) {\n case '1':\n case '3':\n return '남성';\n case '2':\n case '4':\n return '여성';\n default:\n return '';\n }\n};\n","import React from 'react';\n\nimport classNames from 'classnames/bind';\nimport { AddressResponseDto } from 'sales-frontend-api/method';\nimport { IconMainUiSearch } from 'sales-frontend-assets';\nimport { Button, FormCore, Modal, RadioGroup, FormField, Radio } from 'sales-frontend-design-system';\n\nimport { highlightOnSearchKeyword } from '../../common';\n\nimport { AddressComponentType, AddressSearchDetailInputProps, AddressSearchResultProps } from './address.types';\nimport styles from './select-address.module.scss';\nimport { useSearchAddress } from './use-search-address';\n\nconst cx = classNames.bind(styles);\n\nconst { InputBox, Input } = FormCore;\n\nexport const AddressSearchInitialText = () => {\n return (\n <div className={cx('search-result-list')}>\n <p className={cx('guide-title')}>이렇게 검색해 보세요.</p>\n <ul className={cx('guide')}>\n <li>도로명/지명과 건물번호를 함께 입력해주세요</li>\n <li>예) 63로 50, 여의도동 60</li>\n <li>지명은 동/읍/면/리로 입력해주세요</li>\n <li>예) 여의도동, 역삼동</li>\n <li>우편번호 다섯자리를 모두 입력해주세요</li>\n <li>예) 07345, 06232</li>\n </ul>\n </div>\n );\n};\n\nexport const AddressSearchResult = ({\n addressSearchList,\n onChange,\n searchKeyword,\n selectedAddress\n}: AddressSearchResultProps) => {\n return (\n <div className={cx('search-result-list')}>\n <p className={cx('guide-title')}>\n 총 <span className=\"text-primary\">{addressSearchList.length}</span>건의 검색결과\n </p>\n\n {addressSearchList.length > 0 && (\n <RadioGroup\n items={addressSearchList.map((item: AddressResponseDto) => {\n return {\n value: JSON.stringify(item),\n select:\n item.roadNameBaseAddress === selectedAddress?.roadNameBaseAddress &&\n item.roadNameDetailAddress === selectedAddress?.roadNameDetailAddress &&\n item.mainBuildingName === selectedAddress?.mainBuildingName,\n label: (\n <div className={cx('search-result')}>\n <div className={cx('zipcode')}>\n {highlightOnSearchKeyword(`${item.firstPostalCode}${item.secondPostalCode}`, searchKeyword)}\n </div>\n <div className={cx('divider')}></div>\n <div className={cx('address-info')}>\n <span className={cx('address')}>\n {highlightOnSearchKeyword(\n `${item.roadNameBaseAddress} ${item.roadNameDetailAddress} ${item.mainBuildingName}`,\n searchKeyword\n )}\n </span>\n <span className={cx('old-address')}>\n {highlightOnSearchKeyword(\n `${item.landNumberBaseAddress} ${item.landNumberDetailAddress}`,\n searchKeyword\n )}\n </span>\n </div>\n </div>\n ),\n id: JSON.stringify(item)\n };\n })}\n className={cx('radio-group')}\n name=\"address-search\"\n size=\"medium\"\n defaultValue={''}\n onChange={onChange}\n />\n )}\n\n {addressSearchList.length === 0 && (\n <>\n `<span className=\"text-primary\">{searchKeyword}</span>`에 대한 검색결과가 없습니다.\n </>\n )}\n </div>\n );\n};\n\nexport const AddressSearchDetailInput = ({\n selectedStandardizationAddress,\n onDetailChange,\n step,\n onStandardizationChange,\n detailAddressInput\n}: AddressSearchDetailInputProps) => {\n const { land, road } = selectedStandardizationAddress;\n\n return (\n <div className={cx('search-result-list')}>\n <Radio.Root\n name=\"address-search-standardization\"\n size=\"medium\"\n defaultValue={JSON.stringify(selectedStandardizationAddress)}\n >\n <Radio.Item\n className={cx('radio-group')}\n value={JSON.stringify(selectedStandardizationAddress)}\n onChange={onStandardizationChange}\n >\n <div className={cx('search-result')}>\n <div\n className={cx('zipcode')}\n >{`${selectedStandardizationAddress.land?.firstPostalCode}${land?.secondPostalCode}`}</div>\n <div className={cx('divider')}></div>\n <div className={cx('address-info')}>\n <span className={cx('address')}>{`${road?.baseAddress} ${road?.detailAddress}`}</span>\n <span className={cx('old-address')}>{`${land?.baseAddress} ${land?.detailAddress}`}</span>\n </div>\n </div>\n </Radio.Item>\n </Radio.Root>\n <div className=\"d-flex gap-medium items-center\">\n <FormField.Label id=\"detail\" style={{ width: '90px' }}>\n 상세주소\n </FormField.Label>\n <FormField.TextField\n rootProps={{\n style: {\n display: 'flex',\n flex: 1\n }\n }}\n placeholder=\"상세주소 입력\"\n onChange={onDetailChange}\n size=\"small\"\n value={detailAddressInput}\n {...(step === 'detail-input' && { autoFocus: true })}\n />\n </div>\n </div>\n );\n};\n\n\n\nexport function AddressComponent({ isOpen, onClose, setValue }: AddressComponentType) {\n const {\n onAddressSearchClear,\n addressSearchKeyword,\n addressSearchStep,\n onAddressSearchNext,\n nextButtonDisabled,\n detailAddressInput,\n addressSearchList,\n onSearch,\n onKeyUp,\n onSelectChange,\n setDetail,\n search,\n searchInput,\n selectedAddress,\n onStandardizationChange,\n selectedStandardizationAddress,\n isLoading\n } = useSearchAddress({\n setValue,\n onClose,\n isOpen\n });\n\n return (\n <>\n <Modal.Root isOpen={isOpen} onClose={onClose} modalSize=\"full-screen\">\n <Modal.Overlay />\n <Modal.Content>\n <Modal.Header headerTitle=\"주소 검색\" showCloseButton />\n <Modal.Body>\n <InputBox clearable endElement={<IconMainUiSearch onClick={search} />} onClear={onAddressSearchClear}>\n <Input\n {...(addressSearchStep !== 'detail-input' && { autoFocus: true })}\n onChange={onSearch}\n onKeyUp={onKeyUp}\n value={searchInput}\n placeholder=\"지번, 도로명, 건물명, 우편번호 입력\"\n size=\"large\"\n />\n </InputBox>\n {addressSearchStep === 'initial' && <AddressSearchInitialText />}\n {!isLoading && addressSearchStep === 'search-result' && (\n <AddressSearchResult\n onChange={onSelectChange}\n addressSearchList={addressSearchList}\n searchKeyword={addressSearchKeyword}\n selectedAddress={selectedAddress}\n />\n )}\n {!isLoading &&\n addressSearchStep === 'detail-input' &&\n selectedAddress &&\n selectedStandardizationAddress && (\n <AddressSearchDetailInput\n selectedStandardizationAddress={selectedStandardizationAddress}\n onStandardizationChange={onStandardizationChange}\n onDetailChange={setDetail}\n step={addressSearchStep}\n detailAddressInput={detailAddressInput}\n />\n )}\n </Modal.Body>\n <Modal.Footer>\n {addressSearchStep !== 'initial' && (\n <Button\n onClick={onAddressSearchNext}\n variant=\"primary\"\n size=\"medium\"\n appearance=\"filled\"\n width=\"full\"\n // disabled={nextButtonDisabled}\n >\n {addressSearchStep === 'search-result' && '다음(1/2)'}\n {addressSearchStep === 'detail-input' && '확인(2/2)'}\n </Button>\n )}\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n </>\n );\n}\n","import React, { useState, useEffect, useCallback } from 'react';\n\nimport {\n AddressResponseDto,\n AddressStandardizationListRequestDto,\n AddressStandardizationResponseDto,\n useSearchAddressQuery,\n useSearchAddressStandardizationQuery,\n useSearchPostalCodeQuery\n} from 'sales-frontend-api/method';\nimport { ModalUtils, useModalState } from 'sales-frontend-design-system';\n\nimport { AddressComponent } from './address-search-modal';\nimport { AddressComponentProps, AddressComponentType, AddressStandardization, Step } from './address.types';\n\n\nexport function useSearchAddress({ setValue, onClose, isOpen }: AddressComponentType) {\n const [searchKeyword, setSearchKeyword] = useState<string>('');\n const [step, setStep] = useState<Step>('initial');\n const [selectedAddress, setSelectedAddress] = useState<AddressResponseDto>();\n const [selectedStandardizationAddress, setSelectedStandardizationAddress] = useState<AddressStandardization>();\n const [searchInput, setSearchInput] = useState<string>('');\n const [detailAddressInput, setDetailAddressInput] = useState<string>('');\n const [displayList, setDisplayList] = useState<AddressResponseDto[]>([]);\n const [searchType, setSearchType] = useState<'address' | 'postalcode'>('address');\n\n const [standardizationParams, setStandardizationParams] = useState<AddressStandardizationListRequestDto>({\n firstPostalCode: '',\n secondPostalCode: '',\n thirdPostalCode: '',\n baseAddress: '',\n detailAddress: '',\n roadNameYn: 'Y'\n });\n\n const { data: addressData, isLoading: isLoadingAddress } = useSearchAddressQuery(\n { searchKeyWord: searchKeyword },\n { enabled: !!searchKeyword && searchType === 'address' }\n );\n\n const { data: postalData, isLoading: isLoadingPostalCode } = useSearchPostalCodeQuery(\n { searchWordName: searchKeyword },\n { enabled: !!searchKeyword && searchType === 'postalcode' }\n );\n\n const { data: standardizedData } = useSearchAddressStandardizationQuery(standardizationParams, {\n enabled: !!standardizationParams?.baseAddress\n });\n\n const [nextButtonDisabled, setNextButtonDisabled] = useState<boolean>(false);\n const onNext = () => {\n if (step === 'search-result' && nextButtonDisabled) {\n ModalUtils.alert(\n '주소를 선택하지 않으면 다음 단계로 이동할 수 없습니다.\\n주소를 선택한 후 다시 시도해주세요.',\n '선택 주소 없음',\n { modalId: 'search-modal-address-no-selected' }\n );\n\n return;\n }\n\n if (step === 'search-result') {\n setStep('detail-input');\n setNextButtonDisabled(true);\n if (selectedAddress) {\n setStandardizationParams({\n firstPostalCode: selectedAddress.firstPostalCode,\n secondPostalCode: selectedAddress.secondPostalCode,\n thirdPostalCode: selectedAddress.thirdPostalCode,\n baseAddress: selectedAddress.roadNameBaseAddress,\n detailAddress: selectedAddress.roadNameDetailAddress,\n roadNameYn: 'Y'\n });\n }\n } else {\n if (selectedStandardizationAddress) {\n setValue({\n ...selectedStandardizationAddress,\n detailAddressInput\n });\n\n }\n onClose();\n\n\n }\n };\n\n /**\n * 검색어 입력창 onChange\n */\n const onSearch = (e: React.ChangeEvent<HTMLInputElement>) => {\n const typeStr = e.target.value;\n setSearchInput(typeStr);\n };\n\n /**\n * 검색\n */\n const search = () => {\n if (searchInput === '') {\n onClear();\n\n return;\n }\n if (searchInput && searchInput.length > 1) {\n const isNumeric = /^[0-9]+$/.test(searchInput);\n setSearchType(isNumeric ? 'postalcode' : 'address');\n setSearchKeyword(searchInput);\n setStep('search-result');\n setSelectedAddress(undefined);\n setDetailAddressInput('');\n setNextButtonDisabled(true);\n }\n };\n\n /**\n * 검색어 입력창 onKeyup\n */\n const onKeyUp = (e: React.KeyboardEvent<HTMLInputElement>) => {\n /**\n * 엔터키 입력시 검색\n */\n if (e.key === 'Enter') {\n search();\n }\n };\n\n /**\n * 검색결과 Radio 버튼 선택시, onChange\n */\n const onSelectChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const selected = e.target.value;\n if (selected) {\n // const adr = displayList?.find((item) => {\n // return JSON.stringify(item) === selected;\n // });\n // setSelectedAddress(adr);\n setSelectedAddress(JSON.parse(selected));\n setNextButtonDisabled(false);\n }\n };\n\n /**\n * 표준화 검색결과 Radio 버튼 선택시,\n */\n const onStandardizationChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const selected = e.target.value;\n if (selected) {\n setSelectedStandardizationAddress(JSON.parse(selected));\n setNextButtonDisabled(false);\n }\n };\n\n /**\n * 검색어입력창 초기화\n */\n const onClear = useCallback(() => {\n setSearchKeyword('');\n setSearchInput('');\n setSelectedAddress(undefined);\n setDetailAddressInput('');\n setStep('initial');\n }, []);\n\n /**\n * 상세주소 저장\n */\n const setDetail = (e: React.ChangeEvent<HTMLInputElement>) => {\n const detail = e.target.value;\n setDetailAddressInput(detail);\n if (detail) {\n setNextButtonDisabled(false);\n } else {\n setNextButtonDisabled(true);\n }\n };\n\n useEffect(() => {\n if (searchType === 'address' && addressData?.data?.addressList) {\n setDisplayList(addressData.data.addressList);\n } else if (searchType === 'postalcode' && postalData?.data?.postalCodeList) {\n console.log('transformedList', postalData.data.postalCodeList);\n const transformedList: AddressResponseDto[] = postalData.data.postalCodeList.map((p) => ({\n firstPostalCode: p.originalNumber1PostalCode,\n secondPostalCode: p.originalNumber2PostalCode,\n thirdPostalCode: p.originalNumber3PostalCode,\n roadNameBaseAddress: p.roadNameBaseAddress,\n roadNameDetailAddress: p.roadNameDetailAddress,\n landNumberBaseAddress: p.landNumberBaseAddress,\n landNumberDetailAddress: p.landNumberDetailAddress,\n mainBuildingName: p.mainBuildingName\n }));\n setDisplayList(transformedList);\n }\n }, [addressData, postalData, searchType]);\n\n useEffect(() => {\n /**\n * 모달 오픈시, 상태 초기화\n */\n if (isOpen) {\n setSelectedAddress(undefined);\n setDetailAddressInput('');\n\n setStep('initial');\n setSearchKeyword('');\n }\n }, [isOpen]);\n\n useEffect(() => {\n const road = standardizedData?.data?.addressStandardizationList[1];\n const land = standardizedData?.data?.addressStandardizationList[2];\n\n if (road && land) {\n setSelectedStandardizationAddress({\n land,\n road\n });\n }\n }, [standardizedData]);\n\n return {\n selectedStandardizationAddress,\n onStandardizationChange,\n onAddressSearchClear: onClear,\n onAddressSearchNext: onNext,\n addressSearchKeyword: searchKeyword,\n addressSearchList: displayList,\n addressSearchStep: step,\n selectedAddress,\n addressSearchOnValueChange: onSelectChange,\n nextButtonDisabled,\n detailAddressInput,\n onSearch,\n onKeyUp,\n onSelectChange,\n setDetail,\n search,\n searchInput,\n isLoading: isLoadingAddress || isLoadingPostalCode\n };\n}\n\nexport const useAddressComponent = () => {\n const [fullAddress, setFullAddress] = useState<AddressComponentProps>();\n\n const { isOpen, closeModal, openModal } = useModalState();\n\n const AddressSearchComponent = () => (\n <AddressComponent isOpen={isOpen} onClose={closeModal} setValue={setFullAddress} />\n );\n\n return {\n fullAddress,\n openModal,\n AddressSearchComponent\n };\n};\n","import {\n IconGraphicsBankABNAMRO,\n IconGraphicsBankBusan,\n IconGraphicsBankDaegu,\n IconGraphicsBankGwangju,\n IconGraphicsBankGyeongnam,\n IconGraphicsBankHankookCity,\n IconGraphicsBankHsbc,\n IconGraphicsBankJangGiSinYong,\n IconGraphicsBankJeju,\n IconGraphicsBankJeochuk,\n IconGraphicsBankJeonbuk,\n IconGraphicsBankJiyeokNonghyeop,\n IconGraphicsBankKBank,\n IconGraphicsBankKakaoBank,\n IconGraphicsBankKebHana,\n IconGraphicsBankKiup,\n IconGraphicsBankKukmin,\n IconGraphicsBankNhNonghyeop,\n IconGraphicsBankPost,\n IconGraphicsBankSaemaulGeumgo,\n IconGraphicsBankSaneop,\n IconGraphicsBankSanlim,\n IconGraphicsBankScJeil,\n IconGraphicsBankSinhan,\n IconGraphicsBankSinhyeop,\n IconGraphicsBankSuhyeop,\n IconGraphicsBankTossBank,\n IconGraphicsBankWoori,\n IconGraphicsStockBugukJeungkwon,\n IconGraphicsStockDaesinJeungkwon,\n IconGraphicsStockDbGeumyungTujajeungkwon,\n IconGraphicsStockGyoboJeungkwon,\n IconGraphicsStockHanaGeumyungTujajeungkwon,\n IconGraphicsStockHankookTujajeungkwon,\n IconGraphicsStockHanwhaTujajeungkwon,\n IconGraphicsStockHiTujajeungkwon,\n IconGraphicsStockHochulEopsum,\n IconGraphicsStockHyundaiChaJeungkwon,\n IconGraphicsStockKakaoPayJeungkwon,\n IconGraphicsStockKbJeungkwon,\n IconGraphicsStockKiwoomJeungkwon,\n IconGraphicsStockMeritzJeungkwon,\n IconGraphicsStockMiraeAssetJeungkwon,\n IconGraphicsStockNhTujajeungkwon,\n IconGraphicsStockNhWooriTujajeungkwon,\n IconGraphicsStockSamsungJeungkwon,\n IconGraphicsStockSinhanTujajeungkwon,\n IconGraphicsStockSinyeongJeungkwon,\n IconGraphicsStockSkJeungkwon,\n IconGraphicsStockYuantaJeungkwon,\n IconGraphicsStockYujinTujajeungkwon\n} from 'sales-frontend-assets';\nexport const BANK_STOCK_SEARCH_MODAL_TABS = [\n {\n value: 'bank',\n label: '은행'\n },\n {\n value: 'stock',\n label: '증권사'\n }\n];\n\nexport const BANK_STOCK_ICON_LIST = [\n {\n codeVal: '002',\n codeName: '산업은행',\n replaceName: '산업',\n icon: <IconGraphicsBankSaneop />\n },\n {\n codeVal: '003',\n codeName: '기업은행',\n replaceName: '기업',\n icon: <IconGraphicsBankKiup />\n },\n {\n codeVal: '004',\n codeName: '국민은행',\n replaceName: '국민',\n icon: <IconGraphicsBankKukmin />\n },\n {\n codeVal: '007',\n codeName: '수협은행',\n replaceName: '수협',\n icon: <IconGraphicsBankSuhyeop />\n },\n {\n codeVal: '009',\n codeName: '장기신용은행',\n replaceName: '장기신용',\n icon: <IconGraphicsBankJangGiSinYong />\n },\n {\n codeVal: '011',\n codeName: '농협은행',\n replaceName: 'NH농협',\n icon: <IconGraphicsBankNhNonghyeop />\n },\n {\n codeVal: '012',\n codeName: '농조',\n replaceName: '지역농협',\n icon: <IconGraphicsBankJiyeokNonghyeop />\n },\n {\n codeVal: '020',\n codeName: '우리은행',\n replaceName: '우리',\n icon: <IconGraphicsBankWoori />\n },\n {\n codeVal: '023',\n codeName: '스탠다드차타드',\n replaceName: 'SC제일',\n icon: <IconGraphicsBankScJeil />\n },\n {\n codeVal: '026',\n codeName: '(구)신한은행',\n replaceName: '신한',\n icon: <IconGraphicsBankSinhan />\n },\n {\n codeVal: '027',\n codeName: '한국씨티은행',\n replaceName: '한국씨티',\n icon: <IconGraphicsBankHankookCity />\n },\n {\n codeVal: '031',\n codeName: 'iM(대구)뱅크',\n replaceName: '대구',\n icon: <IconGraphicsBankDaegu />\n },\n {\n codeVal: '032',\n codeName: '부산은행',\n replaceName: '부산',\n icon: <IconGraphicsBankBusan />\n },\n {\n codeVal: '034',\n codeName: '광주은행',\n replaceName: '광주',\n icon: <IconGraphicsBankGwangju />\n },\n {\n codeVal: '035',\n codeName: '제주은행',\n replaceName: '제주',\n icon: <IconGraphicsBankJeju />\n },\n {\n codeVal: '037',\n codeName: '전북은행',\n replaceName: '전북',\n icon: <IconGraphicsBankJeonbuk />\n },\n {\n codeVal: '039',\n codeName: '경남은행',\n replaceName: '경남',\n icon: <IconGraphicsBankGyeongnam />\n },\n {\n codeVal: '045',\n codeName: '새마을금고중앙회',\n replaceName: '새마을금고',\n icon: <IconGraphicsBankSaemaulGeumgo />\n },\n {\n codeVal: '048',\n codeName: '신협',\n replaceName: '신협',\n icon: <IconGraphicsBankSinhyeop />\n },\n {\n codeVal: '050',\n codeName: '저축은행',\n replaceName: '저축',\n icon: <IconGraphicsBankJeochuk />\n },\n {\n codeVal: '054',\n codeName: 'HSBC은행',\n replaceName: 'HSBC',\n icon: <IconGraphicsBankHsbc />\n },\n {\n codeVal: '056',\n codeName: '에이비엔암로은행',\n replaceName: '에이비엔암로',\n icon: <IconGraphicsBankABNAMRO />\n },\n {\n codeVal: '064',\n codeName: '산림조합중앙회',\n replaceName: '산림조합',\n icon: <IconGraphicsBankSanlim />\n },\n {\n codeVal: '071',\n codeName: '우체국',\n replaceName: '우체국',\n icon: <IconGraphicsBankPost />\n },\n {\n codeVal: '081',\n codeName: 'KEB하나은행',\n replaceName: 'KEB하나',\n icon: <IconGraphicsBankKebHana />\n },\n {\n codeVal: '088',\n codeName: '신한은행',\n replaceName: '신한',\n icon: <IconGraphicsBankSinhan />\n },\n {\n codeVal: '089',\n codeName: '케이뱅크',\n replaceName: '케이뱅크',\n icon: <IconGraphicsBankKBank />\n },\n {\n codeVal: '090',\n codeName: '카카오뱅크',\n replaceName: '카카오뱅크',\n icon: <IconGraphicsBankKakaoBank />\n },\n {\n codeVal: '092',\n codeName: '토스뱅크',\n replaceName: '토스뱅크',\n icon: <IconGraphicsBankTossBank />\n },\n {\n codeVal: '209',\n codeName: '유안타증권',\n replaceName: '유안타증권',\n icon: <IconGraphicsStockYuantaJeungkwon />\n },\n {\n codeVal: '218',\n codeName: 'KB증권',\n replaceName: 'KB증권',\n icon: <IconGraphicsStockKbJeungkwon />\n },\n {\n codeVal: '230',\n codeName: '미래에셋증권',\n replaceName: '미래에셋증권',\n icon: <IconGraphicsStockMiraeAssetJeungkwon />\n },\n {\n codeVal: '238',\n codeName: '대우증권',\n replaceName: '대우증권',\n icon: <IconGraphicsStockMiraeAssetJeungkwon />\n },\n {\n codeVal: '240',\n codeName: '삼성증권',\n replaceName: '삼성증권',\n icon: <IconGraphicsStockSamsungJeungkwon />\n },\n {\n codeVal: '243',\n codeName: '한국투자증권',\n replaceName: '한국투자증권',\n icon: <IconGraphicsStockHankookTujajeungkwon />\n },\n {\n codeVal: '247',\n codeName: '우리투자증권',\n replaceName: 'NH(우리)투자증권',\n icon: <IconGraphicsStockNhWooriTujajeungkwon />\n },\n {\n codeVal: '261',\n codeName: '교보증권',\n replaceName: '교보증권',\n icon: <IconGraphicsStockGyoboJeungkwon />\n },\n {\n codeVal: '262',\n codeName: '하이투자증권',\n replaceName: '하이투자증권',\n icon: <IconGraphicsStockHiTujajeungkwon />\n },\n {\n codeVal: '263',\n codeName: '현대차투자증권',\n replaceName: '현대차증권',\n icon: <IconGraphicsStockHyundaiChaJeungkwon />\n },\n {\n codeVal: '264',\n codeName: '키움증권',\n replaceName: '키움증권',\n icon: <IconGraphicsStockKiwoomJeungkwon />\n },\n {\n codeVal: '266',\n codeName: 'SK증권',\n replaceName: 'SK증권',\n icon: <IconGraphicsStockSkJeungkwon />\n },\n {\n codeVal: '267',\n codeName: '대신증권',\n replaceName: '대신증권',\n icon: <IconGraphicsStockDaesinJeungkwon />\n },\n {\n codeVal: '269',\n codeName: '한화증권',\n replaceName: '한화투자증권',\n icon: <IconGraphicsStockHanwhaTujajeungkwon />\n },\n {\n codeVal: '270',\n codeName: '하나대투증권',\n replaceName: '하나금융투자증권',\n icon: <IconGraphicsStockHanaGeumyungTujajeungkwon />\n },\n {\n codeVal: '278',\n codeName: '신한금융투자',\n replaceName: '신한금융투자증권',\n icon: <IconGraphicsStockSinhanTujajeungkwon />\n },\n {\n codeVal: '279',\n codeName: '동부증권',\n replaceName: 'DB금융투자증권',\n icon: <IconGraphicsStockDbGeumyungTujajeungkwon />\n },\n {\n codeVal: '280',\n codeName: '유진투자증권',\n replaceName: '유진투자증권',\n icon: <IconGraphicsStockYujinTujajeungkwon />\n },\n {\n codeVal: '287',\n codeName: '메리츠증권',\n replaceName: '메리츠증권',\n icon: <IconGraphicsStockMeritzJeungkwon />\n },\n {\n codeVal: '288',\n codeName: '카카오페이증권',\n replaceName: '카카오페이증권',\n icon: <IconGraphicsStockKakaoPayJeungkwon />\n },\n {\n codeVal: '289',\n codeName: 'NH투자증권',\n replaceName: 'NH투자증권',\n icon: <IconGraphicsStockNhTujajeungkwon />\n },\n {\n codeVal: '290',\n codeName: '부국증권',\n replaceName: '부국증권',\n icon: <IconGraphicsStockBugukJeungkwon />\n },\n {\n codeVal: '291',\n codeName: '신영증권',\n replaceName: '신영증권',\n icon: <IconGraphicsStockSinyeongJeungkwon />\n }\n];\n","import { CodeDto, useSearchCommonCodeQuery } from 'sales-frontend-api/method';\n\nexport function useBankStockSearch({ onSelect }: { onSelect: (item: CodeDto) => void }) {\n const { data } = useSearchCommonCodeQuery({ commonCodeId: 'BANK_ORGN_DVSN_CODE' });\n const bankStockList = data?.data?.commonCodeList?.[0]?.codeList;\n\n const handleSelect = (item: CodeDto) => {\n onSelect(item);\n };\n\n const bankList = bankStockList?.filter((bank) => bank.codeVal?.startsWith('0'));\n\n const stockList = bankStockList?.filter((stock) => stock.codeVal?.startsWith('2'));\n\n return {\n bankList,\n stockList,\n handleSelect\n };\n}\n","import { IconGraphicsStockHochulEopsum } from 'sales-frontend-assets';\nimport { Modal } from 'sales-frontend-design-system';\n\nimport styles from './bank-stock-search-modal.module.scss';\nimport { BANK_STOCK_ICON_LIST } from './constants';\nimport { useBankStockSearch } from './use-bank-stock-search';\n\nimport type { BankStockSearchModalProps } from './types';\nimport type { CodeDto } from 'sales-frontend-api/method';\n\nfunction chunk<T>(array: T[], size: number): T[][] {\n return Array.from({ length: Math.ceil(array.length / size) }, (v, i) => array.slice(i * size, i * size + size));\n}\n\nexport function BankStockSearchModal({ open, onClose, onSelect }: BankStockSearchModalProps) {\n const { bankList, stockList, handleSelect } = useBankStockSearch({\n onSelect\n });\n\n const renderItems = (list: CodeDto[]) => {\n const chunkedList = chunk(list, 5);\n\n return (\n <div className={styles['list-container']}>\n {chunkedList.map((chunk, chunkIndex) => (\n <div key={chunkIndex} className={styles.row}>\n {chunk.map((item) => {\n const findItem = BANK_STOCK_ICON_LIST.find((icon) => icon.codeVal === item.codeVal);\n\n /**\n * 서버에서 받은 목록중 icon과 치환이름이 없는 케이스 처리\n * 기본 아이콘, 기본 이름 노출\n */\n const convertedItem = findItem\n ? findItem\n : {\n icon: <IconGraphicsStockHochulEopsum />,\n replaceName: item.codeName\n };\n\n return (\n <div key={`${item.codeVal}-${chunkIndex}`} className={styles.item} onClick={() => handleSelect(item)}>\n <div className={styles['icon-wrapper']}>{convertedItem?.icon}</div>\n <span> {convertedItem?.replaceName}</span>\n </div>\n );\n })}\n {chunk.length < 5 &&\n Array.from({ length: 5 - chunk.length }).map((_, i) => (\n <div key={`placeholder-${chunkIndex}-${i}`} className={styles.item} style={{ visibility: 'hidden' }} />\n ))}\n </div>\n ))}\n </div>\n );\n };\n\n return (\n <Modal.Root isOpen={open} onClose={onClose} modalSize=\"full-screen\">\n <Modal.Overlay />\n <Modal.Content>\n <Modal.Header headerTitle=\"은행/증권사 선택\" showCloseButton />\n <Modal.Body>\n <div className={styles.container}>\n <div className={styles.section}>\n <p className={styles['section-title']}>은행사</p>\n {renderItems(bankList || [])}\n </div>\n <div className={styles.section}>\n <p className={styles['section-title']}>증권사</p>\n {renderItems(stockList || [])}\n </div>\n </div>\n </Modal.Body>\n </Modal.Content>\n </Modal.Root>\n );\n}\n","import { JSX, useEffect, useState } from 'react';\n\nimport { useSearchCustomerListQuery, type CustomerDto } from 'sales-frontend-api/method';\nimport { DropDownProps, useDropDown } from 'sales-frontend-design-system';\n\n// const mockCustomers: CustomerDto[] = [\n// { customerId: '1', customerName: '김한화', birthDate: '1999.01.01', genderCode: '남성' },\n// {\n// customerId: '2',\n// customerName: '김한화생명',\n// birthDate: '1989.01.01',\n// genderCode: '여성',\n// baseAddress: '서울시 마포구'\n// },\n// {\n// customerId: '3',\n// customerName: '김한화손해보험',\n// birthDate: '1999.01.01',\n// genderCode: '남성',\n// baseAddress: '서울시 마포구'\n// }\n// ]; \n\ninterface UseCustomerSearchReturn {\n triggerRef: ReturnType<typeof useDropDown>['triggerRef'];\n isOpen: ReturnType<typeof useDropDown>['isOpen'];\n setIsOpen: ReturnType<typeof useDropDown>['setIsOpen'];\n DropDown: ReturnType<typeof useDropDown>['DropDown'];\n searchInput: string;\n customerList: CustomerDto[];\n searchKeyword: string;\n onSearchInputChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onKeyUp: (e: React.KeyboardEvent<HTMLInputElement>) => void;\n search: () => void;\n onClear: () => void;\n handleSelectItem: (customer: CustomerDto) => void;\n selectedCustomer: CustomerDto | null;\n setSearchInput: (searchInput: string) => void;\n setCustomerList: (customerList: CustomerDto[]) => void;\n setSearchKeyword: (searchKeyword: string) => void;\n}\n\nexport const useCustomerSearch = (onSelect?: (customer: CustomerDto) => void): UseCustomerSearchReturn => {\n const { triggerRef, isOpen, setIsOpen, DropDown } = useDropDown();\n const [searchKeyword, setSearchKeyword] = useState('');\n const [searchInput, setSearchInput] = useState('');\n const [customerList, setCustomerList] = useState<CustomerDto[]>([]);\n const [selectedCustomer, setSelectedCustomer] = useState<CustomerDto | null>(null);\n\n const { data } = useSearchCustomerListQuery({ customerName: searchKeyword });\n\n const search = () => {\n if (searchInput.length >= 2) {\n setSearchKeyword(searchInput);\n setIsOpen(true);\n } else {\n setCustomerList([]);\n setSearchKeyword('');\n setIsOpen(false);\n }\n };\n\n const onKeyUp = (e: React.KeyboardEvent<HTMLInputElement>) => {\n /**\n * 2음절 완성시 검색\n */\n const currentValue = (e.target as HTMLInputElement).value;\n if (currentValue.length === 0 || (currentValue.slice(-1).normalize('NFD').length > 1) && currentValue.length > 1) {\n search();\n }\n\n };\n\n const onSearchInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setSearchInput(e.target.value);\n };\n\n const onClear = () => {\n setSearchInput('');\n setSearchKeyword('');\n setCustomerList([]);\n setSelectedCustomer(null);\n setIsOpen(false);\n };\n\n const handleSelectItem = (customer: CustomerDto) => {\n setSelectedCustomer(customer);\n setSearchInput(customer.customerName || '');\n setCustomerList([]);\n setIsOpen(false);\n if (onSelect) {\n onSelect(customer);\n }\n };\n\n useEffect(() => {\n const filtered = data?.data?.custList?.filter((c) =>\n c.customerName?.toLowerCase().includes(searchInput.toLowerCase())\n );\n setCustomerList(filtered || []);\n }, [data, searchInput]);\n\n return {\n triggerRef,\n isOpen,\n DropDown,\n searchInput,\n customerList,\n searchKeyword,\n onSearchInputChange,\n onKeyUp,\n search,\n onClear,\n handleSelectItem,\n selectedCustomer,\n setSearchInput,\n setCustomerList,\n setSearchKeyword,\n setIsOpen\n };\n};\n","import classNames from 'classnames/bind';\nimport { IconMainUiSearch } from 'sales-frontend-assets';\nimport { FormCore, List, ListItem } from 'sales-frontend-design-system';\nimport { convertDateString } from 'sales-frontend-utils';\n\nimport { getGenderName, highlightOnSearchKeyword } from '../../common';\n\nimport styles from './customer-search.module.scss';\nimport { useCustomerSearch } from './use-customer-search';\n\nimport type { CustomerSearchProps } from 'sales-frontend-api/method';\n\nconst cx = classNames.bind(styles);\n\nconst { InputBox, Input } = FormCore;\nexport const CustomerSearch = ({\n onSelectCustomer,\n onSearchClear,\n placeholder,\n rootProps,\n size = 'large',\n ...props\n}: CustomerSearchProps) => {\n const {\n triggerRef,\n isOpen,\n DropDown,\n searchInput,\n customerList,\n searchKeyword,\n onSearchInputChange,\n onKeyUp,\n search,\n onClear,\n handleSelectItem\n } = useCustomerSearch(onSelectCustomer);\n\n const handleClear = () => {\n onClear();\n onSearchClear?.();\n };\n\n return (\n <div className={cx('container')}>\n <div className={cx('search-bar')}>\n <InputBox\n {...rootProps}\n endElement={<IconMainUiSearch Click={search} style={{ width: '20px', height: '20px' }} />}\n onClear={handleClear}\n clearable\n >\n <Input\n {...props}\n onChange={onSearchInputChange}\n onKeyUp={onKeyUp}\n value={searchInput}\n placeholder={placeholder || '고객명을 두 글자 이상 입력해주세요.'}\n size={size}\n ref={triggerRef}\n />\n </InputBox>\n </div>\n {isOpen && customerList.length > 0 && (\n <DropDown>\n <div className={cx('result-container')}>\n <List>\n {customerList.map((customer, index) => (\n <ListItem\n key={`cust-item-${customer.customerId}-${index}`}\n onClick={() => handleSelectItem(customer)}\n selectable\n >\n <div className={cx('customer-item')}>\n <div className={cx('name')}>\n {highlightOnSearchKeyword(customer.customerName || '', searchKeyword)}\n </div>\n <div className={cx('details')}>\n <span>\n {customer.birthDate &&\n convertDateString({\n dateString: customer.birthDate,\n fromFormat: 'YYYYMMDD',\n toFormat: 'YYYY.MM.DD'\n })}\n </span>\n <span className={cx('separator')}>|</span>\n <span>{getGenderName(customer.genderCode)}</span>\n {customer.baseAddress && (\n <>\n <span className={cx('separator')}>|</span>\n <span>{customer.baseAddress}</span>\n </>\n )}\n </div>\n </div>\n </ListItem>\n ))}\n </List>\n </div>\n </DropDown>\n )}\n </div>\n );\n};\n","import classNames from 'classnames/bind';\nimport { IconMainUiSearch } from 'sales-frontend-assets';\nimport { FormCore, List, ListItem, Modal } from 'sales-frontend-design-system';\nimport { convertDateString } from 'sales-frontend-utils';\n\nimport { getGenderName, highlightOnSearchKeyword } from '../../common';\n\nimport styles from './customer-search.module.scss';\nimport { useCustomerSearch } from './use-customer-search';\n\nimport type { CustomerDto } from 'sales-frontend-api/method';\nconst cx = classNames.bind(styles);\n\nconst { InputBox, Input } = FormCore;\ninterface Props {\n isOpen: boolean;\n closeModal: () => void;\n onSelect?: (customer: CustomerDto) => void;\n onSearchClear?: () => void;\n}\nexport function CustomerSearchModal({ isOpen, closeModal, onSelect, onSearchClear }: Props) {\n const {\n triggerRef,\n searchInput,\n customerList,\n searchKeyword,\n onSearchInputChange,\n setSearchKeyword,\n setSearchInput,\n setCustomerList,\n onKeyUp,\n search,\n onClear,\n handleSelectItem\n } = useCustomerSearch(onSelect);\n\n const handleClear = () => {\n onClear();\n onSearchClear?.();\n };\n\n return (\n <Modal.Root isOpen={isOpen} onClose={closeModal} modalSize=\"full-screen\">\n <Modal.Overlay />\n <Modal.Content>\n <Modal.Header headerTitle=\"고객 검색\" showCloseButton />\n <Modal.Body>\n <InputBox endElement={<IconMainUiSearch onClick={search} />} onClear={handleClear} clearable>\n <Input\n onChange={onSearchInputChange}\n onKeyUp={onKeyUp}\n value={searchInput}\n placeholder=\"고객명을 두 글자 이상 입력해주세요.\"\n size=\"large\"\n ref={triggerRef}\n />\n </InputBox>\n {searchKeyword && (\n <p className={cx('result-count')}>\n 총 <span className=\"text-primary\">{customerList.length}</span>건의 검색결과\n </p>\n )}\n {searchKeyword && customerList.length === 0 && (\n <div className={cx('search-result')}>\n `<span className=\"text-primary\">{searchKeyword}</span>`에 대한 검색결과가 없습니다.\n </div>\n )}\n {searchKeyword && customerList.length > 0 && (\n <div>\n {customerList.length > 0 && (\n <List rootProps={{ style: { width: '100%' } }}>\n {customerList.map((customer, index) => (\n <ListItem\n key={`cust-item-${customer.customerId}-${index}`}\n onClick={() => {\n handleSelectItem(customer);\n setSearchKeyword('');\n setSearchInput('');\n setCustomerList([]);\n closeModal();\n }}\n selectable\n >\n <div className={cx('customer-item', 'modal')}>\n <div className={cx('name')}>\n {highlightOnSearchKeyword(customer.customerName || '', searchKeyword)}\n </div>\n <div className={cx('details', 'modal')}>\n <span>\n {customer.birthDate &&\n convertDateString({\n dateString: customer.birthDate,\n fromFormat: 'YYYYMMDD',\n toFormat: 'YYYY.MM.DD'\n })}\n </span>\n <span className={cx('separator')}>|</span>\n <span>{getGenderName(customer.genderCode)}</span>\n {customer.baseAddress && (\n <>\n <span className={cx('separator')}>|</span>\n <span>{customer.baseAddress}</span>\n </>\n )}\n </div>\n </div>\n </ListItem>\n ))}\n </List>\n )}\n </div>\n )}\n </Modal.Body>\n </Modal.Content>\n </Modal.Root>\n );\n}\n","import React, { useEffect, useState } from 'react';\n\nimport classNames from 'classnames/bind';\nimport { NationalityResponseDto } from 'sales-frontend-api/method';\nimport { IconMainUiSearch } from 'sales-frontend-assets';\nimport { FormCore, Modal, ModalBaseProps } from 'sales-frontend-design-system';\n\nimport { highlightOnSearchKeyword } from '../../common';\n\nimport { NationalitySearchResultProps } from './nationality.types';\nimport styles from './select-nationality.module.scss';\nimport { useSearchNationality } from './use-search-nationality';\n\nconst cx = classNames.bind(styles);\n\nconst { InputBox, Input } = FormCore;\n\ninterface NationalitySearchInitialTextProps {\n setSearchKeyword: (keyword: string) => void;\n setSearchInput: (keyword: string) => void;\n}\n\n/**\n * 자주 찾는 국적 목록\n * 대한민국, 중국, 베트남, 미국, 러시아\n */\nconst favoriteList: NationalityResponseDto[] = [\n {\n nationalityCode: 'KR',\n nationalityCodeName: '대한민국',\n isoNumberNationalityCode: '410',\n nationalityEnglishAbbreviationName: 'KOR'\n },\n {\n nationalityCode: 'CN',\n nationalityCodeName: '중국',\n isoNumberNationalityCode: '156',\n nationalityEnglishAbbreviationName: 'CHN'\n },\n {\n nationalityCode: 'VN',\n nationalityCodeName: '베트남',\n isoNumberNationalityCode: '704',\n nationalityEnglishAbbreviationName: 'VNM'\n },\n {\n nationalityCode: 'US',\n nationalityCodeName: '미국',\n isoNumberNationalityCode: '840',\n nationalityEnglishAbbreviationName: 'USA'\n },\n {\n nationalityCode: 'RU',\n nationalityCodeName: '러시아',\n isoNumberNationalityCode: '643',\n nationalityEnglishAbbreviationName: 'RUS'\n }\n];\n\nexport const NationalitySearchInitialText = ({\n setSearchInput,\n setSearchKeyword\n}: NationalitySearchInitialTextProps) => {\n const set = (keyword: string) => {\n setSearchInput(keyword);\n setSearchKeyword(keyword);\n };\n\n return (\n <div className={cx('favorite-container')}>\n <p className={cx('favorite-title')}>많이 찾는 국적</p>\n <ul className={cx('favorite')}>\n {favoriteList.map((item, index) => (\n <li key={`${item.nationalityCode}-${index}`} onClick={() => set(item.nationalityCodeName)}>\n <button>{item.nationalityCodeName}</button>\n </li>\n ))}\n </ul>\n </div>\n );\n};\n\nexport const NationalitySearchResult = ({ nationalityList, searchKeyWord, onSelect, onConfirm }: NationalitySearchResultProps) => {\n const [filterList, setFilterList] = useState<NationalityResponseDto[]>([]);\n\n useEffect(() => {\n const filterList = nationalityList.filter((item) => item.nationalityCodeName.includes(searchKeyWord)) || [];\n setFilterList(filterList);\n }, [nationalityList, searchKeyWord]);\n\n return (\n <div className=\"mt-4\">\n <p className={cx('favorite-title')}>\n 총 <span className=\"text-primary\">{filterList.length}</span>건의 검색결과\n </p>\n <ul className={cx('favorite')}>\n {filterList.length > 0 &&\n filterList.map((item, index) => {\n return (\n <li key={`${index}-${item.nationalityCode}`} onClick={() => {\n onSelect(item.nationalityCodeName);\n onConfirm();\n }}>\n <button>{highlightOnSearchKeyword(item.nationalityCodeName, searchKeyWord)}</button>\n </li>\n );\n })}\n </ul>\n {filterList.length === 0 && (\n <div className={cx('search-result')}>\n `<span className=\"text-primary\">{searchKeyWord}</span>`에 대한 검색결과가 없습니다.\n </div>\n )}\n </div>\n );\n};\n\nexport interface NationalitySearchModalProps extends ModalBaseProps {\n onClose: () => void;\n isOpen: boolean;\n searchKeyword: string;\n nationalityList: string[];\n filterList: string[];\n onClear: () => void;\n onSearch: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onKeyUp: (e: React.KeyboardEvent<HTMLInputElement>) => void;\n setSelectedNationality: (nationality: string) => void;\n}\n\ninterface Props {\n setValue: (nationality: NationalityResponseDto) => void;\n onClose: () => void;\n isOpen: boolean;\n onConfirm: () => void;\n}\n\nexport function NationalityComponent({ isOpen, onClose, setValue, onConfirm }: Props) {\n const {\n search,\n onClear,\n searchKeyWord,\n onKeyUp,\n onSearch,\n searchList,\n searchInput,\n onSelect,\n setSearchInput,\n setSearchKeyword\n } = useSearchNationality({\n setValue,\n onClose,\n isOpen\n });\n\n return (\n <>\n <Modal.Root isOpen={isOpen} onClose={onClose} modalSize=\"full-screen\">\n <Modal.Overlay />\n <Modal.Content>\n <Modal.Header headerTitle=\"국적 검색\" showCloseButton />\n <Modal.Body>\n <InputBox\n clearable\n endElement={\n <button>\n <IconMainUiSearch onClick={search} />\n </button>\n }\n onClear={onClear}\n className={cx('search-input')}\n >\n <Input\n onChange={onSearch}\n onKeyUp={onKeyUp}\n placeholder=\"국적 입력\"\n size=\"large\"\n value={searchInput}\n />\n </InputBox>\n {!searchKeyWord && (\n <NationalitySearchInitialText setSearchInput={setSearchInput} setSearchKeyword={setSearchKeyword} />\n )}\n {searchKeyWord && (\n <NationalitySearchResult nationalityList={searchList} searchKeyWord={searchKeyWord} onSelect={onSelect} onConfirm={onConfirm} />\n )}\n </Modal.Body>\n </Modal.Content>\n </Modal.Root>\n </>\n );\n}\n","import React, { useState, useEffect, useCallback } from 'react';\n\nimport { NationalityResponseDto, useSearchNationalityQuery } from 'sales-frontend-api/method';\nimport { useModalState } from 'sales-frontend-design-system';\n\nimport { NationalityComponent } from './nationality-search-modal';\ninterface Props {\n setValue: (nationality: NationalityResponseDto) => void;\n onClose: () => void;\n isOpen: boolean;\n}\n\nexport function useSearchNationality({ setValue, onClose, isOpen }: Props) {\n const [searchKeyWord, setSearchKeyword] = useState<string>('');\n const [selectedNationality, setSelectedNationality] = useState<string>();\n const [searchInput, setSearchInput] = useState<string>('');\n\n const { data } = useSearchNationalityQuery({ searchKeyWord });\n const searchList = data?.data.nationalityList || [];\n\n /**\n * 검색어 입력창 onChange\n */\n const onSearch = (e: React.ChangeEvent<HTMLInputElement>) => {\n const typeStr = e.target.value;\n setSearchInput(typeStr);\n };\n\n /**\n * 검색\n */\n const search = () => {\n if (searchInput === '') {\n onClear();\n\n return;\n }\n if (searchInput && searchInput.length > 0) {\n setSearchKeyword(searchInput);\n setSelectedNationality('');\n }\n };\n\n /**\n * 검색어 입력창 onKeyup\n */\n const onKeyUp = (e: React.KeyboardEvent<HTMLInputElement>) => {\n const currentValue = (e.target as HTMLInputElement).value;\n\n /**\n * 음절 완성시마다 검색\n */\n if (currentValue.length === 0 || currentValue.slice(-1).normalize('NFD').length > 1) {\n search();\n }\n\n // /**\n // * 엔터키 입력시 검색\n // */\n // if (e.key === 'Enter') {\n // search();\n // }\n };\n\n /**\n * 검색어입력창 초기화\n */\n const onClear = useCallback(() => {\n setSearchKeyword('');\n setSearchInput('');\n setSelectedNationality('');\n }, []);\n\n const onSelect = (nationality: string) => {\n setSelectedNationality(nationality);\n const value = searchList.find((item) => item.nationalityCodeName === nationality);\n value && setValue(value);\n onClose();\n };\n\n useEffect(() => {\n /**\n * 모달 오픈시, 상태 초기화\n */\n if (isOpen) {\n setSelectedNationality('');\n setSearchKeyword('');\n }\n }, [isOpen]);\n\n return {\n onClear,\n searchKeyWord,\n searchList,\n selectedNationality,\n onSearch,\n onKeyUp,\n search,\n searchInput,\n onSelect,\n setSearchKeyword,\n setSearchInput\n };\n}\n\nexport const useNationalityComponent = () => {\n const [nationality, setNationality] = useState<NationalityResponseDto>();\n\n const { isOpen, closeModal, openModal } = useModalState();\n const [isConfirmed, setIsConfirmed] = useState<boolean>(false);\n\n const onConfirm = () => {\n setIsConfirmed(true);\n };\n\n const openInitModal = () => {\n setIsConfirmed(false);\n openModal();\n };\n\n const NationalitySearchComponent = () => (\n <NationalityComponent isOpen={isOpen} onClose={closeModal} setValue={setNationality} onConfirm={onConfirm} />\n );\n\n return {\n isOpen,\n closeModal,\n setNationality,\n nationality,\n openModal: openInitModal,\n NationalitySearchComponent,\n isConfirmed,\n setIsConfirmed\n };\n};\n","'use client';\n\n/**\n * @todo 추후 실제 넥스트랩 모듈로 교체필요\n */\nimport { useEffect, useState } from 'react';\n\nimport { Modal, useModalState } from 'sales-frontend-design-system';\nimport { type NxlOneProps, type NxlOneResponse, useNxlOne } from 'sales-frontend-solution';\nimport { getEnvironmentFromHostname } from 'sales-frontend-utils';\n\nexport type Step =\n | 'appInit'\n | 'tabletEformInit'\n | 'tabletEformRe'\n | 'tabletEformSubInfo'\n | 'smartphoneEformSubInfo'\n | 'smartphoneEformAlimtalkInit'\n | 'smartphoneEformAlimtalkRe'\n | 'tabletNewCustomer'\n | 'tabletNewCustomerLegalRep'\n | 'tabletCustomerInfoPlanAgreement'\n | 'tabletCustomerInfoProductAgreement';\n\nexport interface CodeSet {\n dev: {\n bizCode: string;\n tmplCode: string;\n };\n stg: {\n bizCode: string;\n tmplCode: string;\n };\n}\n\n/**\n * 본인인증 템플릿코드, 비즈코드 참조객체\n */\nexport const CODES: Record<Step, CodeSet> = {\n appInit: {\n dev: {\n tmplCode: 'HST',\n bizCode: 'DPS'\n },\n stg: {\n tmplCode: 'R7Y',\n bizCode: 'DPS'\n }\n },\n\n tabletEformInit: {\n dev: {\n tmplCode: '4X2',\n bizCode: 'DET'\n },\n stg: {\n tmplCode: 'NO7',\n bizCode: 'DET'\n }\n },\n\n tabletEformRe: {\n dev: {\n tmplCode: 'WJ1',\n bizCode: 'DET'\n },\n stg: {\n tmplCode: 'WQF',\n bizCode: 'DET'\n }\n },\n\n tabletEformSubInfo: {\n dev: {\n tmplCode: 'GJB',\n bizCode: 'DET'\n },\n stg: {\n tmplCode: 'C1D',\n bizCode: 'DET'\n }\n },\n\n smartphoneEformSubInfo: {\n dev: {\n tmplCode: 'YOQ',\n bizCode: 'DES'\n },\n stg: {\n tmplCode: 'FLL',\n bizCode: 'DES'\n }\n },\n\n smartphoneEformAlimtalkInit: {\n dev: {\n tmplCode: '8YA',\n bizCode: 'DES'\n },\n stg: {\n tmplCode: 'T9L',\n bizCode: 'DES'\n }\n },\n\n smartphoneEformAlimtalkRe: {\n dev: {\n tmplCode: 'NPK',\n bizCode: 'DES'\n },\n stg: {\n tmplCode: 'YMV',\n bizCode: 'DES'\n }\n },\n\n tabletNewCustomer: {\n dev: {\n tmplCode: '948',\n bizCode: 'DIS'\n },\n stg: {\n tmplCode: 'YQM',\n bizCode: 'DIS'\n }\n },\n\n tabletNewCustomerLegalRep: {\n dev: {\n tmplCode: 'SBI',\n bizCode: 'DIS'\n },\n stg: {\n tmplCode: 'FB3',\n bizCode: 'DIS'\n }\n },\n\n tabletCustomerInfoPlanAgreement: {\n dev: {\n tmplCode: 'QCA',\n bizCode: 'DIS'\n },\n stg: {\n tmplCode: 'AST',\n bizCode: 'DIS'\n }\n },\n\n tabletCustomerInfoProductAgreement: {\n dev: {\n tmplCode: 'I7K',\n bizCode: 'DIS'\n },\n stg: {\n tmplCode: 'XG6',\n bizCode: 'DIS'\n }\n }\n};\n\ninterface Props {\n onSuccess?: (result: NxlOneResponse) => void;\n onError?: (result: NxlOneResponse) => void;\n onClose?: (result: NxlOneResponse) => void;\n modalSize?: 'small' | 'medium' | 'large' | 'full-screen';\n env: 'stg' | 'dev';\n /**\n * @property 'appInit'\n * 업무명 : 영업지원 앱 로그인,\n * 상세업무명 : 앱 초기 설정 본인인증 (2차인증)\n *\n *\n * @property 'tabletEformInit'\n * 업무명 : [태블릿] 전자청약(최초 진입),\n * 상세업무명 : 고객정보 본인인증(계약관계자 모두 진행)\n *\n *\n * @property 'tabletEformRe'\n * 업무명 : [태블릿] 전자청약(재진입),\n * 상세업무명 : 고객정보 본인인증(계약관계자 모두 진행)\n *\n *\n * @property 'tabletEformSubInfo'\n * 업무명 : [태블릿] 전자청약 [청약 부속정보 확인] 단계,\n * 상세업무명 : 지정대리청구서비스 특약신청 시 실명확인\n *\n *\n * @property 'smartphoneEformSubInfo'\n * 업무명 : [스마트폰] 전자청약 [청약 부속정보 확인] 단계,\n * 상세업무명 : 지정대리청구서비스 특약신청 시 실명확인\n *\n *\n * @property 'smartphoneEformAlimtalkInit'\n * 업무명 : [스마트폰] 전자청약 알림톡(최초 진입),\n * 상세업무명 : 고객정보 본인인증(계약관계자 개별 진행)\n *\n *\n * @property 'smartphoneEformAlimtalkRe'\n * 업무명 : [스마트폰] 전자청약 알림톡(재진입),\n * 상세업무명 : 고객정보 본인인증(계약관계자 개별 진행)\n *\n *\n * @property 'tabletNewCustomer'\n * 업무명 : [태블릿] 신규고객등록,\n * 상세업무명 : 고객정보 본인인증\n *\n *\n * @property 'tabletNewCustomerLegalRep'\n * 업무명 : [태블릿] 신규고객등록,\n * 상세업무명 : 법정대리인 본인인증(친권자1,2 개별 진행)\n *\n *\n * @property 'tabletCustomerInfoPlanAgreement'\n * 업무명 : [태블릿] 고객정보조회,\n * 상세업무명 : 가입설계동의갱신 인증\n *\n *\n * @property 'tabletCustomerInfoProductAgreement'\n * 업무명 : [태블릿] 고객정보조회,\n * 상세업무명 : 상품소개동의갱신 인증\n */\n step: Step;\n nxlOneProps?: Partial<NxlOneProps>;\n}\n\n/**\n * onSuccess, onError, onClose 이벤트 핸들러 구현 필요\n * onSuccess: 인증 성공 시 호출, 결과 데이터를 부모 창으로 전달\n * onError: 인증 실패 시 호출, 에러 정보를 부모 창으로 전달\n * onClose: 인증 창이 닫힐 때 호출, 필요에 따라 추가 작업 수행\n * modalSize: 모달 크기 설정 (예: 'small', 'medium', 'large', 'full-screen')\n * bizCode 및 tmplCode: NXL ONE 서비스에서 제공하는 비즈니스 코드 및 템플릿 코드\n */\nexport function useNxlOneModal({\n onSuccess = (result) => {\n console.log('on success', JSON.stringify(result));\n },\n onError = (result) => {\n console.log('on error', JSON.stringify(result));\n },\n onClose = (result) => {\n console.log('on close', JSON.stringify(result));\n },\n modalSize = 'medium',\n step = 'appInit',\n env = 'stg',\n nxlOneProps = {}\n}: Props) {\n const { isOpen, openModal, closeModal } = useModalState();\n const [nxlOnePropsState, setNxlOnePropsState] = useState<Partial<NxlOneProps>>(nxlOneProps);\n const { bizCode, tmplCode } = CODES[step][env];\n\n const { Iframe, open } = useNxlOne({\n ...nxlOnePropsState,\n bizCode: nxlOnePropsState.bizCode || bizCode,\n tmplCode: nxlOnePropsState.tmplCode || tmplCode\n });\n\n const openNxlOneModal = () => {\n const stage = getEnvironmentFromHostname(location.hostname);\n if (stage === 'local') {\n open({ popupWidth: 500, popupHeight: 500 }).then((result) => {\n onSuccess(result);\n });\n } else {\n openModal();\n }\n };\n\n useEffect(() => {\n if (nxlOnePropsState.nlcCtfnId) {\n openNxlOneModal();\n }\n }, [nxlOnePropsState]);\n\n return {\n openNxlOneModal: (nxlOnePropsState?: Partial<NxlOneProps>) => {\n if (nxlOnePropsState) {\n //nxlOneProps의 변경이 있는 경우 반영된 후, useEffect실행\n setNxlOnePropsState(nxlOnePropsState);\n } else {\n //nxlOneProps의 변경이 없는 경우, init 파라미터 기준으로 바로 실행\n openNxlOneModal();\n }\n },\n openNxlOnePopup: open,\n closeNxlOneModal: closeModal,\n isNxlOneModalOpen: isOpen,\n NxlModalComponent: (\n <Modal.Root isOpen={isOpen} onClose={closeModal} modalSize={modalSize}>\n <Modal.Overlay />\n <Modal.Content>\n <Modal.Body raw>\n <Iframe\n onSuccess={onSuccess}\n onError={onError}\n onClose={(result) => {\n onClose(result);\n closeModal();\n }}\n />\n </Modal.Body>\n </Modal.Content>\n </Modal.Root>\n )\n };\n}\n","import React, { useEffect, useState } from 'react';\n\nimport classNames from 'classnames/bind';\nimport { VisaStatusResponseDto } from 'sales-frontend-api/method';\nimport { IconMainUiSearch } from 'sales-frontend-assets';\nimport { FormCore, Modal, ModalBaseProps } from 'sales-frontend-design-system';\n\nimport { highlightOnSearchKeyword } from '../../common';\n\nimport styles from './select-visa.module.scss';\nimport { useSearchVisa } from './use-search-visa';\nimport { VisaSearchResultProps } from './visa.types';\n\nconst cx = classNames.bind(styles);\n\nconst { InputBox, Input } = FormCore;\ninterface VisaSearchInitialTextProps {\n visaList: VisaStatusResponseDto[];\n onSelect: (visa: VisaStatusResponseDto) => void;\n onConfirm: () => void;\n}\nexport const VisaSearchInitialText = ({ visaList, onSelect, onConfirm }: VisaSearchInitialTextProps) => {\n return (\n <div className={cx('favorite-container')}>\n <ul className={cx('favorite')}>\n {visaList.map((item, index) => {\n return (\n <li key={`${index}-${item.integrationCodeValueName}`} onClick={() => {\n onSelect(item);\n onConfirm();\n }}>\n <button>{item.integrationCodeValueName}</button>\n </li>\n );\n })}\n </ul>\n </div>\n );\n};\n\nexport const VisaSearchResult = ({ visaList, searchKeyword, onSelect, onConfirm }: VisaSearchResultProps) => {\n const [filterList, setFilterList] = useState<VisaStatusResponseDto[]>([]);\n\n useEffect(() => {\n const filterList = visaList.filter((item) => item.integrationCodeValueName?.includes(searchKeyword)) || [];\n setFilterList(filterList);\n }, [visaList, searchKeyword]);\n\n return (\n <div className=\"mt-4\">\n <p className={cx('favorite-title')}>\n 총 <span className=\"text-primary\">{filterList.length}</span>건의 검색결과\n </p>\n <ul className={cx('favorite')}>\n {filterList.length > 0 &&\n filterList.map((item, index) => {\n return (\n <li key={`${index}-${item.integrationCodeValueName}`} onClick={() => {\n onSelect(item);\n onConfirm();\n }}>\n <button>{highlightOnSearchKeyword(`${item.integrationCodeValueName}`, searchKeyword)}</button>\n </li>\n );\n })}\n </ul>\n {filterList.length === 0 && (\n <div className={cx('search-result')}>\n `<span className=\"text-primary\">{searchKeyword}</span>`에 대한 검색결과가 없습니다.\n </div>\n )}\n </div>\n );\n};\n\nexport interface VisaSearchModalProps extends ModalBaseProps {\n onClose: () => void;\n isOpen: boolean;\n searchKeyword: string;\n visaList: string[];\n filterList: string[];\n onClear: () => void;\n onSearch: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onKeyUp: (e: React.KeyboardEvent<HTMLInputElement>) => void;\n setSelectedVisa: (visa: string) => void;\n}\n\ninterface Props {\n setValue: (visa: VisaStatusResponseDto) => void;\n onClose: () => void;\n isOpen: boolean;\n onConfirm: () => void;\n}\n\nexport function VisaComponent({ isOpen, onClose, setValue, onConfirm }: Props) {\n const { search, onClear, searchKeyword, onKeyUp, onSearch, searchList, searchInput, onSelect } = useSearchVisa({\n setValue,\n onClose,\n isOpen\n });\n\n return (\n <>\n <Modal.Root isOpen={isOpen} onClose={onClose} modalSize=\"full-screen\">\n <Modal.Overlay />\n <Modal.Content>\n <Modal.Header headerTitle=\"체류자격 검색\" showCloseButton />\n <Modal.Body>\n <InputBox\n clearable\n endElement={\n <button>\n <IconMainUiSearch onClick={search} />\n </button>\n }\n onClear={onClear}\n className={cx('search-input')}\n >\n <Input\n onChange={onSearch}\n onKeyUp={onKeyUp}\n placeholder=\"코드, 자격명 입력\"\n size=\"large\"\n value={searchInput}\n />\n </InputBox>\n {!searchKeyword && <VisaSearchInitialText visaList={searchList} onSelect={onSelect} onConfirm={onConfirm} />}\n {searchKeyword && (\n <VisaSearchResult visaList={searchList} searchKeyword={searchKeyword} onSelect={onSelect} onConfirm={onConfirm} />\n )}\n </Modal.Body>\n </Modal.Content>\n </Modal.Root>\n </>\n );\n}\n","import React, { useState, useEffect, useCallback } from 'react';\n\nimport { useSearchVisaQuery, VisaStatusResponseDto } from 'sales-frontend-api/method';\nimport { useModalState } from 'sales-frontend-design-system';\n\nimport { VisaComponent } from './visa-search-modal';\ninterface Props {\n setValue: (visa: VisaStatusResponseDto) => void;\n onClose: () => void;\n isOpen: boolean;\n}\nexport function useSearchVisa({ setValue, onClose, isOpen }: Props) {\n const [searchKeyword, setSearchKeyword] = useState<string>('');\n const [selectedVisa, setSelectedVisa] = useState<VisaStatusResponseDto>();\n const [searchInput, setSearchInput] = useState<string>('');\n\n const { data: visaList } = useSearchVisaQuery({\n staleTime: Infinity,\n gcTime: Infinity\n });\n const searchList: VisaStatusResponseDto[] = visaList?.data?.visaStatusList || [];\n\n /**\n * 검색어 입력창 onChange\n */\n const onSearch = (e: React.ChangeEvent<HTMLInputElement>) => {\n const typeStr = e.target.value;\n setSearchInput(typeStr);\n };\n\n /**\n * 검색\n */\n const search = () => {\n if (searchInput === '') {\n onClear();\n\n return;\n }\n if (searchInput && searchInput.length > 0) {\n setSearchKeyword(searchInput);\n setSelectedVisa(undefined);\n }\n };\n\n /**\n * 검색어 입력창 onKeyup\n */\n const onKeyUp = (e: React.KeyboardEvent<HTMLInputElement>) => {\n /**\n * 엔터키 입력시 검색\n */\n if (e.key === 'Enter') {\n search();\n }\n };\n\n /**\n * 검색어입력창 초기화\n */\n const onClear = useCallback(() => {\n setSearchKeyword('');\n setSearchInput('');\n setSelectedVisa(undefined);\n }, []);\n\n const onSelect = (visa: VisaStatusResponseDto) => {\n setSelectedVisa(visa);\n setValue(visa);\n onClose();\n };\n\n useEffect(() => {\n /**\n * 모달 오픈시, 상태 초기화\n */\n if (isOpen) {\n setSelectedVisa(undefined);\n setSearchKeyword('');\n }\n }, [isOpen]);\n\n return {\n onClear,\n searchKeyword,\n searchList,\n selectedVisa,\n onSearch,\n onKeyUp,\n search,\n searchInput,\n onSelect,\n setSearchKeyword,\n setSearchInput\n };\n}\n\nexport const useVisaComponent = () => {\n const [visa, setVisa] = useState<VisaStatusResponseDto>();\n const [isConfirmed, setIsConfirmed] = useState<boolean>(false);\n const { isOpen, closeModal, openModal } = useModalState();\n\n const onConfirm = () => {\n setIsConfirmed(true);\n };\n\n const openInitModal = () => {\n setIsConfirmed(false);\n openModal();\n }\n\n const VisaSearchComponent = () => <VisaComponent isOpen={isOpen} onClose={closeModal} setValue={setVisa} onConfirm={onConfirm} />;\n\n return {\n visa,\n openModal: openInitModal,\n VisaSearchComponent,\n isOpen,\n closeModal,\n setVisa,\n isConfirmed,\n setIsConfirmed\n };\n};\n","import classNames from 'classnames/bind';\nimport { PersonalCustomerProfileResponseDto } from 'sales-frontend-api/method';\nimport { IconGraphicsFeedbackEmpty } from 'sales-frontend-assets';\nimport { Table } from 'sales-frontend-design-system';\n\nimport styles from './dea-customer-search-modal.module.scss';\n\ninterface DeaCustomerSearchResultProps {\n customerList: PersonalCustomerProfileResponseDto[];\n onCustomerSelect: (customer: PersonalCustomerProfileResponseDto) => void;\n selectedCustomer: PersonalCustomerProfileResponseDto | null;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function DeaCustomerSearchResult({\n customerList,\n onCustomerSelect,\n selectedCustomer\n}: DeaCustomerSearchResultProps) {\n return (\n <div className={cx('result-section')}>\n <p className={cx('result-title')}>\n 총 <span className=\"text-primary\">{customerList.length}</span>건의 검색결과\n </p>\n <Table variant=\"horizontal\">\n <thead>\n <tr>\n <th className={cx('th-padding')}>선택</th>\n <th className={cx('th-padding')}>고객ID</th>\n <th className={cx('th-padding')}>고객명</th>\n <th className={cx('th-padding')}>주민등록번호</th>\n <th className={cx('th-padding')}>직종업종명</th>\n <th className={cx('th-padding')}>전화번호</th>\n <th className={cx('th-padding')}>주소</th>\n </tr>\n </thead>\n <tbody>\n {customerList.length > 0 ? (\n customerList.map((customer, index) => (\n <tr key={`cust-item-${customer.customerId}-${index}}`}>\n <td>\n <input\n type=\"radio\"\n name=\"customer\"\n value={customer.customerId || ''}\n checked={selectedCustomer?.customerId === customer.customerId}\n onChange={() => onCustomerSelect(customer)}\n />\n </td>\n <td>{customer.customerId}</td>\n <td>{customer.customerName}</td>\n <td>{customer.residentNumber}</td>\n <td>{customer.occupationKindName}</td>\n <td>{customer.mobilePhoneNumber}</td>\n <td>{customer.address}</td>\n </tr>\n ))\n ) : (\n <tr>\n <td colSpan={7}>\n <div className={cx('no-result')}>\n <IconGraphicsFeedbackEmpty />\n <p>조회 결과가 없습니다.</p>\n <p>입력한 정보를 다시 확인해주세요.</p>\n </div>\n </td>\n </tr>\n )}\n </tbody>\n </Table>\n </div>\n );\n}\n","/* eslint-disable react/no-unknown-property */\nimport React, { useEffect, useState } from 'react';\n\nimport classNames from 'classnames/bind';\nimport { PersonalCustomerProfileRequestDto, PersonalCustomerProfileResponseDto } from 'sales-frontend-api/method';\nimport { Button, FormField, Select } from 'sales-frontend-design-system';\nimport { addE2EObject, getE2EDataIDs } from 'sales-frontend-utils';\n\nimport styles from './dea-customer-search-modal.module.scss';\nimport { DeaCustomerSearchResult } from './dea-customer-search-result';\n\nconst { TextField } = FormField;\n\n// ASTx2 is loaded from an external script, declare it here to inform TypeScript.\ndeclare const $ASTX2: any;\n\ninterface DeaCustomerSearchProps {\n setSearchParams: (params?: PersonalCustomerProfileRequestDto) => void;\n customerList: PersonalCustomerProfileResponseDto[];\n onCustomerSelect: (customer: PersonalCustomerProfileResponseDto) => void;\n selectedCustomer: PersonalCustomerProfileResponseDto | null;\n isLoading: boolean;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function DeaCustomerSearch({\n setSearchParams,\n customerList,\n onCustomerSelect,\n selectedCustomer\n}: DeaCustomerSearchProps) {\n const [residentNumberFront, setResidentNumberFront] = useState('');\n const [residentNumberBack, setResidentNumberBack] = useState('');\n\n const handleSearch = () => {\n getE2EDataIDs(['residentNumberBack'], (e2edata: any) => {\n setSearchParams({\n residentNumberFront,\n residentNumberBack,\n e2edata: e2edata.e2e_data1\n });\n });\n };\n\n const handleReset = () => {\n setResidentNumberFront('');\n setResidentNumberBack('');\n setSearchParams();\n };\n\n const onKeyUp = (e: React.KeyboardEvent<HTMLInputElement>) => {\n e.key === 'Enter' && handleSearch();\n };\n\n const onKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n //입력값이 숫자나 백스페이스가 아니면 false\n if (!(e.key === 'Backspace' || !isNaN(parseInt(e.key)))) {\n e.preventDefault();\n }\n };\n\n useEffect(() => {\n const el = document.getElementById('residentNumberBack') as HTMLInputElement;\n addE2EObject(el);\n });\n\n return (\n <>\n <div className={cx('search-section')}>\n <div className={cx('search-filters')}>\n <div className={cx('search-filter-section')}>\n <FormField.Label className=\"subtitle3 text-body-1\">고객 구분</FormField.Label>\n <Select value=\"personal\" placeholder=\"개인\" disabled style={{ width: '100px' }}>\n <Select.Option value=\"personal\">개인</Select.Option>\n </Select>\n <FormField.Label className=\"subtitle3 text-body-1\">주민등록번호</FormField.Label>\n <TextField\n name=\"residentNumberFront\"\n value={residentNumberFront}\n maxLength={6}\n placeholder=\"앞 6자리 입력\"\n onChange={(e) => setResidentNumberFront(e.target.value)}\n size=\"medium\"\n onKeyUp={onKeyUp}\n onKeyDown={onKeyDown}\n rootProps={{\n className: cx('search-input'),\n onClear: () => {\n setResidentNumberFront('');\n }\n }}\n />\n -\n <TextField\n type=\"password\"\n id=\"residentNumberBack\"\n name=\"residentNumberBack\"\n value={residentNumberBack}\n maxLength={7}\n placeholder=\"뒤 7자리 입력\"\n /** ASTx2 e2e 설정 */\n //@ts-ignore\n // e2e_type=\"1\"\n /** 숫자타입만 입력받는 설정 */\n // e2e_inputtype=\"1\"\n onChange={(e) => setResidentNumberBack(e.target.value)}\n size=\"medium\"\n onKeyDown={onKeyDown}\n onKeyUp={onKeyUp}\n rootProps={{\n className: cx('search-input'),\n onClear: () => {\n setResidentNumberBack('');\n }\n }}\n />\n </div>\n <div className={cx('search-buttons')}>\n <Button appearance=\"outline\" size=\"medium\" variant=\"secondary\" onClick={handleReset}>\n 초기화\n </Button>\n <Button appearance=\"filled\" size=\"medium\" variant=\"primary\" onClick={handleSearch}>\n 조회\n </Button>\n </div>\n </div>\n </div>\n <div className={cx('divider')}></div>\n <DeaCustomerSearchResult\n customerList={customerList}\n onCustomerSelect={onCustomerSelect}\n selectedCustomer={selectedCustomer}\n />\n </>\n );\n}\n","import React, { useState, useEffect } from 'react';\n\nimport { useQuery } from '@tanstack/react-query';\nimport {\n getDspCustomerListMethod,\n PersonalCustomerProfileRequestDto,\n PersonalCustomerProfileResponseDto\n} from 'sales-frontend-api/method';\nimport { Button, Modal } from 'sales-frontend-design-system';\nimport { initASTX2, loadScript } from 'sales-frontend-utils';\n\nimport { DeaCustomerSearch } from './dea-customer-search';\n\ninterface DeaCustomerSearchModalProps {\n isOpen: boolean;\n onClose: () => void;\n onSave: (customer: PersonalCustomerProfileResponseDto) => void;\n}\n\nexport const DeaCustomerSearchModal: React.FC<DeaCustomerSearchModalProps> = ({ isOpen, onClose, onSave }) => {\n const [selectedCustomer, setSelectedCustomer] = useState<PersonalCustomerProfileResponseDto | null>(null);\n const [searchParams, setSearchParams] = useState<PersonalCustomerProfileRequestDto>();\n\n const { data, isFetching } = useQuery({\n queryKey: ['deaCustomerSearch', searchParams],\n queryFn: () => getDspCustomerListMethod(searchParams!),\n enabled: !!searchParams,\n retry: false\n });\n\n const [customerList, setCustomerList] = useState<PersonalCustomerProfileResponseDto[]>([]);\n loadScript();\n\n useEffect(() => {\n if (data?.data) {\n setCustomerList(data.data);\n } else {\n setCustomerList([]);\n }\n }, [data]);\n\n useEffect(() => {\n setSelectedCustomer(null);\n }, [customerList]);\n\n useEffect(() => {\n initASTX2();\n }, []);\n\n const handleCustomerSelect = (customer: PersonalCustomerProfileResponseDto) => {\n setSelectedCustomer(customer);\n };\n\n const handleSave = () => {\n if (selectedCustomer) {\n onSave(selectedCustomer);\n onClose();\n }\n };\n\n return (\n <Modal.Root isOpen={isOpen} onClose={onClose} modalSize=\"xlarge\">\n <Modal.Overlay />\n <Modal.Content style={{ height: '697px' }}>\n <Modal.Header headerTitle=\"고객 검색\" showCloseButton />\n <Modal.Body>\n <DeaCustomerSearch\n setSearchParams={setSearchParams}\n customerList={customerList}\n onCustomerSelect={handleCustomerSelect}\n selectedCustomer={selectedCustomer}\n isLoading={isFetching}\n />\n </Modal.Body>\n <Modal.Footer>\n <Button\n variant=\"primary\"\n size=\"medium\"\n appearance=\"filled\"\n width=\"full\"\n onClick={handleSave}\n disabled={!selectedCustomer}\n >\n 저장하기\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n );\n};\n","import { EmployeeDivisionCodeType } from 'sales-frontend-api/method';\n\nexport const EMPLOYEE_SEARCH_TABS: { label: string; value: EmployeeDivisionCodeType }[] = [\n { value: 'WHOL', label: '전체' },\n { value: 'FP', label: 'FP' },\n { value: 'WKIS', label: '내근' }\n];\n","import classNames from 'classnames/bind';\nimport { EmployeeProfileResponseDto } from 'sales-frontend-api/method';\nimport { IconGraphicsFeedbackEmpty } from 'sales-frontend-assets';\nimport { Checkbox, CheckboxButton, Radio, RadioGroup, Table } from 'sales-frontend-design-system';\n\nimport styles from './employee-search-modal.module.scss';\n\ninterface EmployeeSearchResultProps {\n filteredEmployees: EmployeeProfileResponseDto[];\n onEmployeeSelect: (employee: EmployeeProfileResponseDto) => void;\n searchTerm: string;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function EmployeeSearchResult({ filteredEmployees, onEmployeeSelect }: EmployeeSearchResultProps) {\n return (\n <div className={cx('result-section')}>\n <p className={cx('result-title')}>\n 총 <span className=\"text-primary\">{filteredEmployees.length}</span>건의 검색결과\n </p>\n {filteredEmployees.length > 0 ? (\n <Table variant=\"horizontal\">\n <thead>\n <tr>\n <th className={cx('th-padding')}>선택</th>\n <th className={cx('th-padding')}>사원번호</th>\n <th className={cx('th-padding')}>사원명</th>\n <th className={cx('th-padding')}>소속기관명</th>\n <th className={cx('th-padding')}>사원구분</th>\n </tr>\n </thead>\n <tbody>\n {filteredEmployees.map((employee) => {\n return (\n <>\n <tr>\n <td>\n <input\n type=\"radio\"\n name=\"employee\"\n value={employee.employeeNumber || ''}\n onChange={(e) => {\n /**\n * @todo Radio.Item 라디오 선택시, 현재라디오를 checked 상태로 만들수가 없다....\n */\n onEmployeeSelect(employee);\n }}\n ></input>\n </td>\n <td>{employee.employeeNumber}</td>\n <td>{employee.employeeName}</td>\n <td>{employee.organizationName}</td>\n <td>{employee.employeeDivisionCodeName}</td>\n </tr>\n </>\n );\n })}\n </tbody>\n </Table>\n ) : (\n <Table variant=\"horizontal\">\n <thead>\n <tr>\n <th className={cx('th-padding')}>선택</th>\n <th className={cx('th-padding')}>사원번호</th>\n <th className={cx('th-padding')}>사원명</th>\n <th className={cx('th-padding')}>소속기관명</th>\n <th className={cx('th-padding')}>사원구분</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td colSpan={5}>\n <div className={cx('no-result')}>\n <IconGraphicsFeedbackEmpty />\n <p>조회 결과가 없습니다.</p>\n <p>입력한 정보를 다시 확인해주세요.</p>\n </div>\n </td>\n </tr>\n </tbody>\n </Table>\n )}\n </div>\n );\n}\n","import React from 'react';\n\nimport classNames from 'classnames/bind';\nimport { EmployeeDivisionCodeType, EmployeeProfileResponseDto } from 'sales-frontend-api/method';\nimport { Button, FormField, Select } from 'sales-frontend-design-system';\n\nimport { EMPLOYEE_SEARCH_TABS } from './constants';\nimport styles from './employee-search-modal.module.scss';\nimport { EmployeeSearchResult } from './employee-search-result';\n\nconst { TextField } = FormField;\n\ninterface EmployeeSearchProps {\n activeTab: EmployeeDivisionCodeType;\n onTabChange: (value: EmployeeDivisionCodeType) => void;\n searchTerm: string;\n setSearchTerm: (value: string) => void;\n searchInput: string;\n setSearchInput: (value: string) => void;\n employeeList: EmployeeProfileResponseDto[];\n onEmployeeSelect: (employee: EmployeeProfileResponseDto) => void;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function EmployeeSearch({\n activeTab,\n onTabChange,\n searchTerm,\n setSearchTerm,\n searchInput,\n setSearchInput,\n employeeList,\n onEmployeeSelect\n}: EmployeeSearchProps) {\n const handleSearch = () => {\n setSearchTerm(searchInput);\n };\n\n const handleReset = () => {\n setSearchTerm('');\n setSearchInput('');\n };\n\n return (\n <>\n <div className={cx('search-section')}>\n <div className={cx('search-filters')}>\n <div className={cx('search-filter-section')}>\n <FormField.Label className=\"subtitle3 text-body-1\">성명/사번</FormField.Label>\n <TextField\n value={searchInput}\n onChange={(e) => setSearchInput(e.target.value)}\n className={styles.searchInput}\n size=\"medium\"\n onKeyUp={(e) => e.key === 'Enter' && handleSearch()}\n rootProps={{\n onClear: handleReset,\n clearable: true\n }}\n />\n </div>\n <div className={cx('search-filter-section')}>\n <FormField.Label className=\"subtitle3 text-body-1\">사원 구분</FormField.Label>\n <Select\n value={activeTab}\n onChange={(value) => onTabChange(value as EmployeeDivisionCodeType)}\n className={styles.select}\n size=\"medium\"\n >\n {EMPLOYEE_SEARCH_TABS.map((option, index) => (\n <Select.Option key={`${option.value}-${index}`} value={option.value}>\n {option.label}\n </Select.Option>\n ))}\n </Select>\n </div>\n <div className={cx('search-buttons')}>\n <Button appearance=\"outline\" size=\"medium\" variant=\"secondary\" onClick={handleReset}>\n 초기화\n </Button>\n <Button appearance=\"filled\" size=\"medium\" variant=\"primary\" onClick={handleSearch}>\n 조회\n </Button>\n </div>\n </div>\n </div>\n <div className={cx('divider')}></div>\n {searchTerm && (\n <EmployeeSearchResult\n filteredEmployees={employeeList}\n onEmployeeSelect={onEmployeeSelect}\n searchTerm={searchTerm}\n />\n )}\n </>\n );\n}\n","import React, { useState, useEffect } from 'react';\n\nimport {\n EmployeeDivisionCodeType,\n EmployeeProfileResponseDto,\n useSearchEmployeeProfileQuery\n} from 'sales-frontend-api/method';\nimport { Button, Modal } from 'sales-frontend-design-system';\n\nimport { EmployeeSearch } from './employee-search';\n\ninterface EmployeeSearchModalProps {\n isOpen: boolean;\n onClose: () => void;\n onSelect: (employee: EmployeeProfileResponseDto) => void;\n}\n\nexport const EmployeeSearchModal: React.FC<EmployeeSearchModalProps> = ({ isOpen, onClose, onSelect }) => {\n const [activeTab, setActiveTab] = useState<EmployeeDivisionCodeType>('WHOL');\n const [selectedEmployee, setSelectedEmployee] = useState<EmployeeProfileResponseDto | null>(null);\n const [searchTerm, setSearchTerm] = useState<string>('');\n const [searchInput, setSearchInput] = useState<string>('');\n\n const { data } = useSearchEmployeeProfileQuery({\n searchWord: searchTerm,\n employeeDivisionCode: activeTab\n });\n\n const [employeeList, setEmployeeList] = useState<EmployeeProfileResponseDto[]>([]);\n\n useEffect(() => {\n if (data?.data) {\n setEmployeeList(data.data);\n } else {\n setEmployeeList([]);\n }\n }, [data]);\n\n const handleEmployeeSelect = (employee: EmployeeProfileResponseDto) => {\n setSelectedEmployee(employee);\n };\n\n const handleSelect = () => {\n if (selectedEmployee) {\n onSelect(selectedEmployee);\n onClose();\n }\n };\n\n const onTabChange = (value: EmployeeDivisionCodeType) => {\n setSearchTerm('');\n setSearchInput('');\n setActiveTab(value);\n };\n\n return (\n <Modal.Root isOpen={isOpen} onClose={onClose} modalSize=\"xlarge\">\n <Modal.Overlay />\n <Modal.Content style={{ height: '697px' }}>\n <Modal.Header headerTitle=\"사원 검색\" showCloseButton />\n <Modal.Body>\n <EmployeeSearch\n activeTab={activeTab}\n onTabChange={onTabChange}\n searchTerm={searchTerm}\n setSearchTerm={setSearchTerm}\n searchInput={searchInput}\n setSearchInput={setSearchInput}\n employeeList={employeeList}\n onEmployeeSelect={handleEmployeeSelect}\n />\n </Modal.Body>\n <Modal.Footer>\n <Button\n variant=\"primary\"\n size=\"medium\"\n appearance=\"filled\"\n width=\"full\"\n onClick={handleSelect}\n disabled={!selectedEmployee}\n >\n 저장하기\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n );\n};\n","export const JOB_SEARCH_TABS = [\n { value: 'jobName', label: '직종명 검색' },\n { value: 'jobCode', label: '분류로 검색' }\n];\n","import { useSearchOccupationDetailQuery } from 'sales-frontend-api/method';\nimport { Table } from 'sales-frontend-design-system';\n\ninterface Props {\n occupationTypeCode: string;\n occupationIndustryCode: string;\n}\n\nexport function JobSearchDetail({ occupationTypeCode, occupationIndustryCode }: Props) {\n const { data: detail } = useSearchOccupationDetailQuery({\n occupationIndustryCode,\n occupationIndustryTypeCode: occupationTypeCode || '1'\n });\n\n if (!detail || !detail.data) {\n return null;\n }\n const {\n /** @description 직종해설내용 */\n occupationExplanationContent,\n /** @description 직업예시명 */\n occupationExampleName,\n /** @description 위험등급명 */\n riskGradeName,\n /** @description 위험등급코드 */\n riskGradeCode,\n /** @description 상해위험등급코드명 */\n injuryRiskGradeCodeName,\n /** @description 상해위험등급코드 */\n injuryRiskGradeCode,\n /** @description 입원등급코드명 */\n hospitalizationGradeCodeName,\n /** @description 입원등급코드 */\n hospitalizationGradeCode,\n /** @description 상해직종코드 */\n injuryOccupationCode\n } = detail.data;\n\n return (\n <>\n <Table variant=\"horizontal\">\n <tbody>\n <tr>\n <th className=\"px-small\">직종 해설</th>\n <td className=\"px-small\">{occupationExplanationContent}</td>\n </tr>\n <tr>\n <th className=\"px-small\">직종 예시</th>\n <td className=\"px-small\">{occupationExampleName}</td>\n </tr>\n <tr>\n <th className=\"px-small\">위험 등급</th>\n <td className=\"px-small\">\n {riskGradeName}({riskGradeCode})\n </td>\n </tr>\n <tr>\n <th className=\"px-small\">입원 등급</th>\n <td className=\"px-small\">\n {hospitalizationGradeCodeName}({hospitalizationGradeCode})\n </td>\n </tr>\n <tr>\n <th className=\"px-small\">상해 등급</th>\n <td className=\"px-small\">\n {injuryRiskGradeCodeName}({injuryRiskGradeCode})\n </td>\n </tr>\n </tbody>\n </Table>\n </>\n );\n}\n","import classNames from 'classnames/bind';\nimport { OccupationResponseDto } from 'sales-frontend-api/method';\nimport { Accordion, Button, Radio, Table } from 'sales-frontend-design-system';\n\nimport { highlightOnSearchKeyword } from '../../common';\n\nimport { JobSearchDetail } from './job-search-detail';\nimport styles from './job-search-modal.module.scss';\ninterface JobSearchFavoriteProps {\n filteredJobs: OccupationResponseDto[];\n onJobSelect: (job: OccupationResponseDto) => void;\n searchTerm: string;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function JobSearchCategory({ filteredJobs, onJobSelect, searchTerm }: JobSearchFavoriteProps) {\n return (\n <>\n <div className={cx('category-section')}>\n <p className={cx('result-title')}>\n 총 <span className=\"text-primary\">{filteredJobs.length}</span>건의 검색결과\n </p>\n <Accordion.Root>\n <Radio.Root name=\"job-selection\" size=\"small\" className={cx('job-radio-root')} onToggle={() => {}}>\n {filteredJobs.map((job, index) => (\n <Accordion.Item\n id={`item-${job.occupationIndustryCode}-${index}-accordion`}\n key={`item-${job.occupationIndustryCode}-${index}`}\n >\n <Accordion.HeaderDiv>\n <div style={{ flex: 1 }}>\n <Radio.Item size=\"small\" value={job.occupationIndustryCode} onChange={() => onJobSelect(job)}>\n {highlightOnSearchKeyword(job.occupationIndustryName, searchTerm)}({job.occupationIndustryCode})\n </Radio.Item>\n </div>\n </Accordion.HeaderDiv>\n <Accordion.Content variant=\"text\">\n <JobSearchDetail\n occupationTypeCode={job.occupationTypeCode || ''}\n occupationIndustryCode={job.occupationIndustryCode}\n />\n </Accordion.Content>\n </Accordion.Item>\n ))}\n </Radio.Root>\n </Accordion.Root>\n {filteredJobs.length === 0 && (\n <>\n `<span className=\"text-primary\">{searchTerm}</span>`에 대한 검색결과가 없습니다.\n </>\n )}\n </div>\n </>\n );\n}\n","import classNames from 'classnames/bind';\nimport { OccupationResponseDto } from 'sales-frontend-api/method';\nimport { Accordion, Radio, Table } from 'sales-frontend-design-system';\n\nimport { JobSearchDetail } from './job-search-detail';\nimport styles from './job-search-modal.module.scss';\ninterface JobSearchFavoriteProps {\n filteredJobs: OccupationResponseDto[];\n onJobSelect: (job: OccupationResponseDto) => void;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function JobSearchFavorite({ filteredJobs, onJobSelect }: JobSearchFavoriteProps) {\n return (\n <>\n <div className={cx('popular-jobs')}>\n <p>많이 찾는 직종</p>\n <Accordion.Root>\n <Radio.Root name=\"job-selection\" size=\"small\" className={cx('job-radio-root')}>\n {filteredJobs.map((job, index) => (\n <Accordion.Item\n key={`item-${job.occupationIndustryCode}-${index}`}\n id={`item-${job.occupationIndustryCode}-${index}`}\n className={cx('accordion-item')}\n >\n <Accordion.HeaderDiv className={cx('accordion-header-item')}>\n <Radio.Item\n size=\"small\"\n value={job.occupationIndustryCode}\n onChange={() => onJobSelect(job)}\n className={cx('radio-item')}\n >\n {job.occupationIndustryName}({job.occupationIndustryCode})\n </Radio.Item>\n </Accordion.HeaderDiv>\n <Accordion.Content variant=\"text\">\n <JobSearchDetail\n occupationTypeCode={job.occupationTypeCode || ''}\n occupationIndustryCode={job.occupationIndustryCode}\n />\n </Accordion.Content>\n </Accordion.Item>\n ))}\n </Radio.Root>\n </Accordion.Root>\n </div>\n </>\n );\n}\n","import classNames from 'classnames/bind';\nimport { OccupationResponseDto } from 'sales-frontend-api/method';\nimport { Accordion, Radio } from 'sales-frontend-design-system';\n\nimport { highlightOnSearchKeyword } from '../../common';\n\nimport { JobSearchDetail } from './job-search-detail';\nimport styles from './job-search-modal.module.scss';\ninterface JobSearchFavoriteProps {\n filteredJobs: OccupationResponseDto[];\n onJobSelect: (job: OccupationResponseDto) => void;\n searchTerm: string;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function JobSearchResult({ filteredJobs, onJobSelect, searchTerm }: JobSearchFavoriteProps) {\n return (\n <>\n <div className={cx('popular-jobs')}>\n <p className={cx('result-title')}>\n 총 <span className=\"text-primary\">{filteredJobs.length}</span>건의 검색결과\n </p>\n <Accordion.Root>\n <Radio.Root name=\"job-selection\" size=\"small\" className={cx('job-radio-root')}>\n {filteredJobs.map((job, index) => (\n <Accordion.Item\n id={`item-${job.occupationIndustryCode}`}\n key={`item-${job.occupationIndustryCode}-${index}}`}\n // onClick={() => accordion.toggleItem(`item-${job.code}`)}\n >\n <Accordion.HeaderDiv>\n <div style={{ flex: 1 }}>\n <Radio.Item\n id={`item-${job.occupationIndustryCode}`}\n size=\"small\"\n value={job.occupationIndustryCode}\n onChange={() => {\n onJobSelect(job);\n }}\n >\n {highlightOnSearchKeyword(job.occupationIndustryName, searchTerm)}\n </Radio.Item>\n </div>\n </Accordion.HeaderDiv>\n <Accordion.Content variant=\"text\">\n <JobSearchDetail\n occupationTypeCode={job.occupationTypeCode || ''}\n occupationIndustryCode={job.occupationIndustryCode}\n />\n </Accordion.Content>\n </Accordion.Item>\n ))}\n </Radio.Root>\n </Accordion.Root>\n {filteredJobs.length === 0 && (\n <>\n `<span className=\"text-primary\">{searchTerm}</span>`에 대한 검색결과가 없습니다.\n </>\n )}\n </div>\n </>\n );\n}\n","import { Dispatch, SetStateAction } from 'react';\n\nimport classNames from 'classnames/bind';\nimport { OccupationResponseDto } from 'sales-frontend-api/method';\nimport { IconMainUiSearch } from 'sales-frontend-assets';\nimport { Tab, FormField, Select } from 'sales-frontend-design-system';\n\nimport { JOB_SEARCH_TABS } from './constants';\nimport { JobSearchCategory } from './job-search-category';\nimport { JobSearchFavorite } from './job-search-favorite';\nimport styles from './job-search-modal.module.scss';\nimport { JobSearchResult } from './job-search-result';\n\nconst { TextField } = FormField;\ninterface JobSearchProps {\n activeTab: string;\n onTabChange: (value: string) => void;\n searchTerm: string;\n setSearchInput: (value: string) => void;\n filteredJobs: OccupationResponseDto[];\n onJobSelect: (job: OccupationResponseDto) => void;\n searchInput: string;\n setSearchTerm: (value: string) => void;\n firstCategory: string;\n setFirstCategory: Dispatch<SetStateAction<string>>;\n secondCategory: string;\n setSecondCategory: Dispatch<SetStateAction<string>>;\n firstCategoryList: OccupationResponseDto[];\n secondCategoryList: OccupationResponseDto[];\n jobList?: OccupationResponseDto[];\n isLoading: boolean;\n}\nconst cx = classNames.bind(styles);\nconst { Option } = Select;\nexport function JobSearch({\n activeTab,\n onTabChange,\n searchTerm,\n setSearchInput,\n filteredJobs,\n onJobSelect,\n setSearchTerm,\n searchInput,\n firstCategory,\n setFirstCategory,\n secondCategory,\n setSecondCategory,\n firstCategoryList,\n secondCategoryList,\n isLoading\n}: JobSearchProps) {\n /**\n * 검색어 입력창 onKeyup\n */\n const onKeyUp = (e: React.KeyboardEvent<HTMLInputElement>) => {\n /**\n * 엔터키 입력시 검색\n */\n if (e.key === 'Enter') {\n setSearchTerm(searchInput);\n }\n };\n\n return (\n <>\n <Tab.Root\n defaultValue={activeTab}\n onValueChange={onTabChange}\n scroll=\"fixed\"\n size=\"small\"\n variant=\"sub\"\n style={{ gap: 0, overflow: 'visible' }}\n >\n {JOB_SEARCH_TABS.map((tab, index) => (\n <Tab.Item key={`${tab.value}-${index}`} value={tab.value}>\n {tab.label}\n </Tab.Item>\n ))}\n </Tab.Root>\n <div>\n {activeTab === 'jobName' && (\n <div className={cx('favorite-jobs-section')}>\n <TextField\n placeholder=\"직종명 검색\"\n value={searchInput}\n onKeyUp={onKeyUp}\n onChange={(e) => setSearchInput(e.target.value)}\n className={styles.searchInput}\n size=\"medium\"\n rootProps={{\n endElement: <IconMainUiSearch onClick={() => setSearchTerm(searchInput)} />,\n onClear: () => {\n setSearchTerm('');\n setSearchInput('');\n }\n }}\n />\n {!searchTerm && <JobSearchFavorite filteredJobs={filteredJobs} onJobSelect={onJobSelect} />}\n {searchTerm && !isLoading && (\n <JobSearchResult filteredJobs={filteredJobs} onJobSelect={onJobSelect} searchTerm={searchTerm} />\n )}\n </div>\n )}\n {activeTab === 'jobCode' && (\n <div className={cx('select-jobs-section')}>\n <div className={cx('category-section')}>\n <Select\n name=\"first_category\"\n onChange={(value) => {\n setFirstCategory(value);\n setSecondCategory('');\n }}\n placeholder=\"대분류 선택\"\n rootProps={{\n style: {\n // width: '300px'\n }\n }}\n size=\"large\"\n value={firstCategory}\n >\n {firstCategoryList.map((option, index) => (\n <Option key={`${index}-${option.occupationIndustryCode}`} value={option.occupationIndustryCode}>\n {option.occupationIndustryName}\n </Option>\n ))}\n </Select>\n <Select\n name=\"second_category\"\n onChange={setSecondCategory}\n placeholder=\"중분류 선택\"\n rootProps={{\n style: {\n // width: '300px'\n }\n }}\n size=\"large\"\n value={secondCategory}\n disabled={!firstCategory}\n >\n {secondCategoryList.map((option, index) => (\n <Option key={`${index}-${option.occupationIndustryCode}`} value={option.occupationIndustryCode}>\n {option.occupationIndustryName}\n </Option>\n ))}\n </Select>\n </div>\n\n {firstCategory && secondCategory && !isLoading && (\n <JobSearchCategory filteredJobs={filteredJobs} onJobSelect={onJobSelect} searchTerm={searchTerm} />\n )}\n </div>\n )}\n </div>\n </>\n );\n}\n","import { useEffect, useState } from 'react';\n\nimport {\n OccupationDetailResponseDto,\n OccupationResponseDto,\n useSearchOccupationDetailQuery,\n useSearchOccupationQuery\n} from 'sales-frontend-api/method';\nimport { Button, Modal, ModalUtils, useModalState } from 'sales-frontend-design-system';\n\nimport { JOB_SEARCH_TABS } from './constants';\nimport { JobSearch } from './job-search';\n\n/**\n * 초기값(많이 찾는 직종)\n * 회사 사무직 종사자\n * 경영지원 사무직 종사자\n * 주부\n * 주방장 및 조리사\n * 보험설계사(당사)\n */\nconst initData: OccupationResponseDto[] = [\n {\n occupationIndustryCode: '430101',\n occupationIndustryName: '회사 사무직 종사자',\n occupationTypeCode: null,\n historySequence: 0\n },\n {\n occupationIndustryCode: '400301',\n occupationIndustryName: '경영지원 사무직 관리자',\n occupationTypeCode: null,\n historySequence: 0\n },\n {\n occupationIndustryCode: '510201',\n occupationIndustryName: '전업주부',\n occupationTypeCode: null,\n historySequence: 0\n },\n {\n occupationIndustryCode: '442501',\n occupationIndustryName: '주방장 및 조리사(선박 조리사 제외)',\n occupationTypeCode: null,\n historySequence: 0\n },\n {\n occupationIndustryCode: '450303',\n occupationIndustryName: '보험설계사(당사)',\n occupationTypeCode: null,\n historySequence: 0\n }\n];\n\nconst useJobSearch = () => {\n const [activeTab, setActiveTab] = useState<string>(JOB_SEARCH_TABS[0]?.value ?? '');\n const [selectedJob, setSelectedJob] = useState<OccupationResponseDto | null>(null);\n // const [selectedJobDetail, setSelectedJobDetail] = useState<OccupationDetailResponseDto | null>(null);\n const [searchTerm, setSearchTerm] = useState<string>('');\n const [searchInput, setSearchInput] = useState<string>('');\n const handleJobSelect = (job: OccupationResponseDto) => {\n setSelectedJob(job);\n };\n const [firstCategory, setFirstCategory] = useState<string>('');\n const [secondCategory, setSecondCategory] = useState<string>('');\n const [jobList, setJobList] = useState<OccupationResponseDto[]>(initData);\n const [firstCategoryList, setFirstCategoryList] = useState<OccupationResponseDto[]>([]);\n const [secondCategoryList, setSecondCategoryList] = useState<OccupationResponseDto[]>([]);\n\n const { data: detail } = useSearchOccupationDetailQuery({\n occupationIndustryCode: selectedJob?.occupationIndustryCode || '',\n occupationIndustryTypeCode: '1'\n });\n\n const selectedJobDetail: OccupationDetailResponseDto | undefined = detail?.data;\n\n const { data, isLoading } = useSearchOccupationQuery({\n occupationMajorCategoryCode: firstCategory,\n occupationSearchTypeCode: searchTerm ? '4' : '3',\n occupationSubCategoryCode: secondCategory,\n searchOccupationIndustryName: searchTerm\n });\n const { data: firstCategoryData } = useSearchOccupationQuery({\n occupationMajorCategoryCode: '',\n occupationSearchTypeCode: '1',\n occupationSubCategoryCode: '',\n searchOccupationIndustryName: ''\n });\n const { data: secondCategoryData } = useSearchOccupationQuery({\n occupationMajorCategoryCode: firstCategory,\n occupationSearchTypeCode: '2',\n occupationSubCategoryCode: '',\n searchOccupationIndustryName: ''\n });\n\n const reset = () => {\n setSearchInput('');\n setSearchTerm('');\n setFirstCategory('');\n setSecondCategory('');\n };\n useEffect(() => {\n reset();\n }, [activeTab]);\n\n useEffect(() => {\n setSelectedJob(null);\n\n if (data && searchTerm && activeTab === 'jobName') {\n /** 검색어가 있고, 검색된 데이터가 있는 경우 */\n const filteredJobs = data.data.occupationList.filter((job) => job.occupationIndustryName.includes(searchTerm));\n setJobList(filteredJobs);\n } else if (!data && searchTerm && activeTab === 'jobName') {\n /** 검색어가 있고, 검색된 데이터가 없는 경우 */\n setJobList([]);\n } else if (!searchTerm && activeTab === 'jobName') {\n /** 검색어가 없고, 검색된 데이터가 없는 경우 , 많이 찾는 직종 노출 */\n setJobList(initData);\n } else if (activeTab === 'jobCode' && firstCategory && secondCategory) {\n /** 대분류, 중분류 선택된 경우 */\n setJobList(data?.data.occupationList || []);\n }\n }, [searchTerm, data, firstCategory, secondCategory, secondCategoryData, activeTab]);\n\n useEffect(() => {\n if (firstCategoryData) {\n setFirstCategoryList(firstCategoryData.data.occupationList);\n }\n }, [firstCategoryData]);\n\n useEffect(() => {\n if (secondCategoryData) {\n setSecondCategoryList(secondCategoryData.data.occupationList);\n }\n }, [secondCategoryData]);\n\n return {\n activeTab,\n setActiveTab,\n selectedJob,\n setSelectedJob,\n searchTerm,\n setSearchTerm,\n handleJobSelect,\n filteredJobs: jobList,\n searchInput,\n setSearchInput,\n firstCategory,\n setFirstCategory,\n secondCategory,\n setSecondCategory,\n secondCategoryList,\n firstCategoryList,\n reset,\n isLoading,\n selectedJobDetail\n };\n};\n\nexport function useJobSearchModal() {\n const {\n activeTab,\n setActiveTab,\n searchTerm,\n setSearchTerm,\n filteredJobs,\n handleJobSelect,\n selectedJob,\n searchInput,\n setSearchInput,\n firstCategory,\n setFirstCategory,\n secondCategory,\n setSecondCategory,\n firstCategoryList,\n secondCategoryList,\n setSelectedJob,\n selectedJobDetail,\n reset,\n isLoading\n } = useJobSearch();\n\n const { isOpen, openModal, closeModal } = useModalState();\n const [isConfirmed, setIsConfirmed] = useState<boolean>(false);\n const onTabChange = (value: string) => {\n reset();\n setActiveTab(value);\n };\n\n const openInitModal = () => {\n reset();\n setSelectedJob(null);\n setActiveTab('jobName');\n setIsConfirmed(false);\n openModal();\n };\n\n const closeModalWithCheck = () => {\n setIsConfirmed(true);\n if (!selectedJob) {\n ModalUtils.alert('직종을 선택하지 않았습니다. 직종 선택 후 다시 시도해주세요.', '직종을 선택해주세요.', {\n modalId: 'job-search-alert-no-selected'\n });\n\n return;\n }\n closeModal();\n };\n\n return {\n JobSearchModal: (\n <Modal.Root isOpen={isOpen} onClose={closeModal} modalSize=\"xlarge\">\n <Modal.Overlay />\n <Modal.Content style={{ height: '697px' }}>\n <Modal.Header headerTitle=\"직종 검색\" showCloseButton />\n <Modal.Body raw>\n <JobSearch\n firstCategory={firstCategory}\n firstCategoryList={firstCategoryList}\n secondCategoryList={secondCategoryList}\n setFirstCategory={setFirstCategory}\n secondCategory={secondCategory}\n activeTab={activeTab}\n onTabChange={onTabChange}\n searchTerm={searchTerm}\n setSearchInput={setSearchInput}\n filteredJobs={filteredJobs || []}\n onJobSelect={handleJobSelect}\n searchInput={searchInput}\n setSearchTerm={setSearchTerm}\n setSecondCategory={setSecondCategory}\n isLoading={isLoading}\n />\n </Modal.Body>\n <Modal.Footer>\n <Button\n variant=\"primary\"\n size=\"medium\"\n appearance=\"filled\"\n width=\"full\"\n onClick={closeModalWithCheck}\n // disabled={!selectedJob}\n >\n 확인\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n ),\n JobSearchComponent: (\n <JobSearch\n firstCategoryList={firstCategoryList}\n secondCategoryList={secondCategoryList}\n firstCategory={firstCategory}\n setFirstCategory={setFirstCategory}\n secondCategory={secondCategory}\n setSecondCategory={setSecondCategory}\n activeTab={activeTab}\n onTabChange={onTabChange}\n searchTerm={searchTerm}\n setSearchInput={setSearchInput}\n filteredJobs={filteredJobs || []}\n onJobSelect={handleJobSelect}\n searchInput={searchInput}\n setSearchTerm={setSearchTerm}\n isLoading={isLoading}\n />\n ),\n isJobSearchOpen: isOpen,\n isConfirmed,\n setIsConfirmed,\n openJobSearchModal: openInitModal,\n closeJobSearchModal: closeModal,\n selectedJob,\n selectedJobDetail,\n resetJobSearch: reset,\n setSelectedJob\n };\n}\n","import React from 'react';\n\nimport classNames from 'classnames/bind';\nimport { IconIllustGrade } from 'sales-frontend-assets';\n\nimport styles from './job-vehicle-search-modal.module.scss';\nconst cx = classNames.bind(styles);\n\ninterface JobVehicleSearchGradeProps {\n riskGrade?: string | number;\n hospitalizationGrade?: string | number;\n}\n\nexport const JobVehicleSearchGrade = ({ riskGrade, hospitalizationGrade }: JobVehicleSearchGradeProps) => {\n return (\n <div className={cx('grade-section')}>\n <div className={cx('icon-title')}>\n <IconIllustGrade />\n <span className=\"typo-title5 text-body\">등급</span>\n </div>\n <p className=\"typo-body2 text-body_3\">직종, 운전 여부 선택시 자동으로 산정됩니다.</p>\n\n <div className={cx('grade-list')}>\n <div className={cx('grade')}>\n <span>위험등급</span>\n <span className=\"text-primary typo-subtitle3\">{riskGrade || '-'}</span>\n </div>\n <div className={cx('grade')}>\n <span>입원등급</span>\n <span className=\"text-primary typo-subtitle3\">{hospitalizationGrade || '-'}</span>\n </div>\n </div>\n </div>\n );\n};\n","import classNames from 'classnames/bind';\nimport { VehicleTypeResponseDto } from 'sales-frontend-api/method';\nimport { Radio } from 'sales-frontend-design-system';\n\nimport styles from './vehicle-search-modal.module.scss';\nconst cx = classNames.bind(styles);\ninterface VehicleSearchProps {\n vehicles: VehicleTypeResponseDto[];\n onVehicleSelect: (vehicle: VehicleTypeResponseDto) => void;\n selectedVehicle?: VehicleTypeResponseDto;\n}\n\nexport function VehicleSearch({ vehicles, onVehicleSelect, selectedVehicle }: VehicleSearchProps) {\n return (\n <div className={cx('vehicle-search-section')}>\n <p>운전 차종</p>\n <Radio.Root\n name=\"vehicle-selection\"\n size=\"small\"\n className={cx('vehicle-radio-root')}\n defaultValue={selectedVehicle?.integrationCodeValue || ''}\n >\n {vehicles.map((vehicle, index) => (\n <Radio.Item\n key={`item-${vehicle.integrationCodeValue}-${index}`}\n id={`item-${vehicle.integrationCodeValue}`}\n size=\"small\"\n value={vehicle.integrationCodeValue || ''}\n onChange={(e) => {\n const { value } = e.target;\n const selected = vehicles.find((v) => v.integrationCodeValue === value);\n if (selected) {\n onVehicleSelect(selected);\n }\n }}\n className={cx('item')}\n >\n {vehicle.integrationCodeValueName}({vehicle.integrationCodeValue})\n </Radio.Item>\n ))}\n </Radio.Root>\n </div>\n );\n}\n","import { useState } from 'react';\n\nimport { useSearchVehicleQuery, VehicleTypeResponseDto } from 'sales-frontend-api/method';\n\nimport { VehicleSearch } from './vehicle-search';\n\nexport const useVehicleSearch = () => {\n const [selectedVehicle, setSelectedVehicle] = useState<VehicleTypeResponseDto>();\n const { data } = useSearchVehicleQuery();\n\n // useSearchVehicleQuery\n return {\n VehicleSearchComponent: (\n <VehicleSearch\n vehicles={data?.data?.vehicleTypeList || []}\n onVehicleSelect={setSelectedVehicle}\n selectedVehicle={selectedVehicle}\n />\n ),\n selectedVehicle,\n setSelectedVehicle,\n vehicleList: data\n };\n};\n","import { useEffect, useState } from 'react';\n\nimport { useSearchRiskGradeQuery } from 'sales-frontend-api/method';\n\nimport { useJobSearchModal } from '../job-search-modal/use-job-search';\nimport { useVehicleSearch } from '../vehicle-search-modal/use-vehicle-search';\n\nexport const useJobVehicleSearch = () => {\n const [rightPanelView, setRightPanelView] = useState('jobSearch'); // 'jobSearch' or 'vehicleSelection'\n const [riskGrade, setRiskGrade] = useState<string>('');\n const [hospitalizationGrade, setHospitalizationGrade] = useState<string>('');\n const { selectedJob, JobSearchComponent, selectedJobDetail, resetJobSearch, setSelectedJob } = useJobSearchModal();\n\n const { selectedVehicle, VehicleSearchComponent, setSelectedVehicle } = useVehicleSearch();\n const { data: riskGradeData } = useSearchRiskGradeQuery(\n {\n occupationIndustryCode: selectedJob?.occupationIndustryCode || '',\n vehicleTypeCode: selectedVehicle?.integrationCodeValue || ''\n },\n {\n enabled: !!selectedJob && !!selectedVehicle\n }\n );\n\n const reset = () => {\n setSelectedJob(null);\n resetJobSearch();\n setSelectedVehicle(undefined);\n setRiskGrade('');\n setHospitalizationGrade('');\n };\n\n useEffect(() => {\n if (selectedJob && selectedVehicle && riskGradeData) {\n const { riskGradeCode, riskGradeName } = riskGradeData.data;\n /**\n * 직종,차종이 모두 선택된 경우 등급 계산 API 호출\n * @todo 입원등급 조회 불가한 상태라 고정값으로 일단 노출합니다.\n * RiskGradeResponseDto\n riskGradeCode?: string;\n riskGradeName?: string;\n */\n\n setRiskGrade(`${riskGradeName}(${riskGradeCode})`);\n setHospitalizationGrade(\n `${selectedJobDetail?.hospitalizationGradeCodeName}(${selectedJobDetail?.hospitalizationGradeCode})`\n );\n }\n }, [selectedJob, selectedVehicle, riskGradeData, selectedJobDetail]);\n\n return {\n selectedVehicle,\n rightPanelView,\n setRightPanelView,\n selectedJob,\n selectedJobDetail,\n JobSearch: JobSearchComponent,\n VehicleSearch: VehicleSearchComponent,\n riskGrade,\n riskGradeCode: riskGradeData?.data?.riskGradeCode,\n hospitalizationGrade,\n resetJobVehicleSearch: reset\n };\n};\n","import { useState } from 'react';\n\nimport classNames from 'classnames/bind';\nimport { IconIllustJob, IconIllustVehicle, IconSubUiArrowRight } from 'sales-frontend-assets';\nimport { ModalUtils, useModalState } from 'sales-frontend-design-system';\nimport { Button, Modal } from 'sales-frontend-design-system';\n\nimport { JobVehicleSearchGrade } from './job-vehicle-search-grade';\nconst cx = classNames.bind(styles);\nimport styles from './job-vehicle-search-modal.module.scss';\nimport { useJobVehicleSearch } from './use-job-vehicle-search';\n\n\n\nexport function useJobVehicleSearchModal() {\n const {\n selectedVehicle,\n rightPanelView,\n setRightPanelView,\n selectedJob,\n JobSearch,\n VehicleSearch,\n riskGrade,\n riskGradeCode,\n hospitalizationGrade,\n resetJobVehicleSearch,\n selectedJobDetail\n } = useJobVehicleSearch();\n const { isOpen, openModal, closeModal } = useModalState();\n const [isConfirmed, setIsConfirmed] = useState<boolean>(false);\n const validate = () => {\n if (!selectedJob && !selectedVehicle) {\n return ModalUtils.alert(\n '직종과 운전 여부·차종을 모두 선택해야 등급 산정이 가능합니다.',\n '직종과 운전 여부·차종을 선택해주세요',\n {\n modalSize: 'small'\n }\n );\n }\n if (!selectedJob) {\n return ModalUtils.alert('직종을 선택해야 등급 산정이 가능합니다.', '직종을 선택해주세요', {\n modalSize: 'small'\n });\n }\n if (!selectedVehicle) {\n return ModalUtils.alert('운전 여부·차종을 선택해야 등급 산정이 가능합니다.', '운전 여부·차종을 선택해주세요', {\n modalSize: 'small'\n });\n }\n closeModal();\n };\n\n const openInitModal = () => {\n resetJobVehicleSearch();\n setIsConfirmed(false);\n openModal();\n };\n\n return {\n selectedJob,\n selectedJobDetail,\n selectedVehicle,\n riskGrade,\n riskGradeCode,\n hospitalizationGrade,\n isOpenJobVehicleModal: isOpen,\n isConfirmed,\n setIsConfirmed,\n openJobVehicleModal: openInitModal,\n closeJobVehicleModal: closeModal,\n JobVehicleSearchModalComponent: (\n <Modal.Root isOpen={isOpen} onClose={closeModal} modalSize=\"xlarge\">\n <Modal.Overlay />\n <Modal.Content style={{ height: '697px' }}>\n <Modal.Header headerTitle=\"직종·운전차종 검색\" showCloseButton />\n <Modal.Body className={cx('job-vehicle-search-modal')} raw>\n <>\n <div className={cx('left-panel')}>\n <div className={cx('card-section')}>\n <div\n className={cx('card-menu', { 'card-selected': rightPanelView === 'jobSearch' })}\n onClick={() => setRightPanelView('jobSearch')}\n >\n <div className={cx('card-title')}>\n <IconIllustJob className={cx('card-icon')} />\n <span className={cx('card-text', 'typo-title5', 'text-body')}>직종</span>\n <IconSubUiArrowRight />\n </div>\n <div className=\"typo-body2 text-body_2\">\n {selectedJob ? selectedJob.occupationIndustryName : '미선택'}\n </div>\n </div>\n <div\n className={cx('card-menu', { 'card-selected': rightPanelView === 'vehicleSelection' })}\n onClick={() => setRightPanelView('vehicleSelection')}\n >\n <div className={cx('card-title')}>\n <IconIllustVehicle className={cx('card-icon')} />\n <span className={cx('card-text', 'typo-title5', 'text-body')}>운전 여부·차종</span>\n <IconSubUiArrowRight />\n </div>\n <div className=\"typo-body2 text-body_2\">\n {selectedVehicle?.integrationCodeValueName}\n {selectedVehicle?.integrationCodeValue || '미선택'}\n </div>\n </div>\n </div>\n <JobVehicleSearchGrade riskGrade={riskGrade} hospitalizationGrade={hospitalizationGrade} />\n </div>\n <div className={cx('right-panel')}>{rightPanelView === 'jobSearch' ? JobSearch : VehicleSearch}</div>\n </>\n </Modal.Body>\n <Modal.Footer style={{ marginTop: 0 }}>\n <Button variant=\"primary\" size=\"medium\" appearance=\"filled\" width=\"full\" onClick={() => {\n validate();\n setIsConfirmed(true);\n }}>\n 확인\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n )\n };\n}\n","import classNames from 'classnames/bind';\nimport { OrganizationProfileResponse } from 'sales-frontend-api/method';\nimport { IconGraphicsFeedbackEmpty } from 'sales-frontend-assets';\nimport { Table } from 'sales-frontend-design-system';\n\nimport styles from './organization-search-modal.module.scss';\n\ninterface OrganizationSearchResultProps {\n filteredOrganizations: OrganizationProfileResponse[];\n onOrganizationSelect: (organization: OrganizationProfileResponse) => void;\n searchTerm: string;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function OrganizationSearchResult({\n filteredOrganizations,\n onOrganizationSelect\n}: OrganizationSearchResultProps) {\n return (\n <div className={cx('result-section')}>\n <p className={cx('result-title')}>\n 총 <span className=\"text-primary\">{filteredOrganizations.length}</span>건의 검색결과\n </p>\n {filteredOrganizations.length > 0 ? (\n <Table variant=\"horizontal\">\n <thead>\n <tr>\n <th className={cx('th-padding')}>선택</th>\n <th className={cx('th-padding')}>기관코드</th>\n <th className={cx('th-padding')}>기관명</th>\n </tr>\n </thead>\n <tbody>\n {filteredOrganizations.map((organization, index) => {\n return (\n <tr key={`${organization.organizationCode}-${index}`}>\n <td>\n <input\n type=\"radio\"\n name=\"organization\"\n value={organization.organizationCode || ''}\n onChange={() => onOrganizationSelect(organization)}\n />\n </td>\n <td>{organization.organizationCode}</td>\n <td>{organization.organizationName}</td>\n </tr>\n );\n })}\n </tbody>\n </Table>\n ) : (\n <Table variant=\"horizontal\">\n <thead>\n <tr>\n <th className={cx('th-padding')}>선택</th>\n <th className={cx('th-padding')}>기관코드</th>\n <th className={cx('th-padding')}>기관명</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td colSpan={3}>\n <div className={cx('no-result')}>\n <IconGraphicsFeedbackEmpty />\n <p>조회 결과가 없습니다.</p>\n <p>입력한 정보를 다시 확인해주세요.</p>\n </div>\n </td>\n </tr>\n </tbody>\n </Table>\n )}\n </div>\n );\n}\n","import React from 'react';\n\nimport classNames from 'classnames/bind';\nimport { OrganizationProfileResponse } from 'sales-frontend-api/method';\nimport { Button, FormField } from 'sales-frontend-design-system';\n\nimport styles from './organization-search-modal.module.scss';\nimport { OrganizationSearchResult } from './organization-search-result';\n\nconst { TextField } = FormField;\n\ninterface OrganizationSearchProps {\n searchTerm: string;\n setSearchTerm: (value: string) => void;\n searchInput: string;\n setSearchInput: (value: string) => void;\n organizationList: OrganizationProfileResponse[];\n onOrganizationSelect: (organization: OrganizationProfileResponse) => void;\n}\n\nconst cx = classNames.bind(styles);\n\nexport function OrganizationSearch({\n searchTerm,\n setSearchTerm,\n searchInput,\n setSearchInput,\n organizationList,\n onOrganizationSelect\n}: OrganizationSearchProps) {\n const handleSearch = () => {\n setSearchTerm(searchInput);\n };\n\n const handleReset = () => {\n setSearchTerm('');\n setSearchInput('');\n };\n\n return (\n <>\n <div className={cx('search-section')}>\n <div className={cx('search-filters')}>\n <div className={cx('search-filter-section')}>\n <FormField.Label className=\"subtitle3 text-body-1\">기관명/코드</FormField.Label>\n <TextField\n value={searchInput}\n onChange={(e) => setSearchInput(e.target.value)}\n size=\"medium\"\n onKeyUp={(e) => e.key === 'Enter' && handleSearch()}\n rootProps={{\n className: cx('search-input'),\n clearable: true,\n onClear: handleReset\n }}\n />\n </div>\n <div className={cx('search-buttons')}>\n <Button appearance=\"outline\" size=\"medium\" variant=\"secondary\" onClick={handleReset}>\n 초기화\n </Button>\n <Button appearance=\"filled\" size=\"medium\" variant=\"primary\" onClick={handleSearch}>\n 조회\n </Button>\n </div>\n </div>\n </div>\n <div className={cx('divider')}></div>\n {searchTerm && (\n <OrganizationSearchResult\n filteredOrganizations={organizationList}\n onOrganizationSelect={onOrganizationSelect}\n searchTerm={searchTerm}\n />\n )}\n </>\n );\n}\n","import React, { useState, useEffect } from 'react';\n\nimport { OrganizationProfileResponse, useSearchOrganizationQuery } from 'sales-frontend-api/method';\nimport { Button, Modal } from 'sales-frontend-design-system';\n\nimport { OrganizationSearch } from './organization-search';\n\ninterface OrganizationSearchModalProps {\n isOpen: boolean;\n onClose: () => void;\n onSelect: (organization: OrganizationProfileResponse) => void;\n}\n\nexport const OrganizationSearchModal: React.FC<OrganizationSearchModalProps> = ({ isOpen, onClose, onSelect }) => {\n const [selectedOrganization, setSelectedOrganization] = useState<OrganizationProfileResponse | null>(null);\n const [searchTerm, setSearchTerm] = useState<string>('');\n const [searchInput, setSearchInput] = useState<string>('');\n\n const { data } = useSearchOrganizationQuery({\n searchWord: searchTerm\n });\n\n const [organizationList, setOrganizationList] = useState<OrganizationProfileResponse[]>([]);\n\n useEffect(() => {\n if (data?.data) {\n setOrganizationList(data.data);\n } else {\n setOrganizationList([]);\n }\n }, [data]);\n\n const handleOrganizationSelect = (organization: OrganizationProfileResponse) => {\n setSelectedOrganization(organization);\n };\n\n const handleSelect = () => {\n if (selectedOrganization) {\n onSelect(selectedOrganization);\n onClose();\n }\n };\n\n return (\n <Modal.Root isOpen={isOpen} onClose={onClose} modalSize=\"xlarge\">\n <Modal.Overlay />\n <Modal.Content style={{ height: '697px' }}>\n <Modal.Header headerTitle=\"기관 검색\" showCloseButton />\n <Modal.Body>\n <OrganizationSearch\n searchTerm={searchTerm}\n setSearchTerm={setSearchTerm}\n searchInput={searchInput}\n setSearchInput={setSearchInput}\n organizationList={organizationList}\n onOrganizationSelect={handleOrganizationSelect}\n />\n </Modal.Body>\n <Modal.Footer>\n <Button\n variant=\"primary\"\n size=\"medium\"\n appearance=\"filled\"\n width=\"full\"\n onClick={handleSelect}\n disabled={!selectedOrganization}\n >\n 저장하기\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n );\n};\n","import React from 'react';\n\nimport classNames from 'classnames/bind';\nimport { Button, Modal } from 'sales-frontend-design-system';\n\nimport { useVehicleSearch } from './use-vehicle-search';\nimport styles from './vehicle-search-modal.module.scss';\nconst cx = classNames.bind(styles);\ninterface JobVehicleSearchModalProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\nexport function JobVehicleSearchModal({ onClose }: JobVehicleSearchModalProps) {\n const { selectedVehicle, VehicleSearchComponent } = useVehicleSearch();\n\n return (\n <Modal.Root isOpen={true} onClose={onClose} modalSize=\"xlarge\">\n <Modal.Overlay />\n <Modal.Content style={{ height: '697px' }}>\n <Modal.Header headerTitle=\"운전차종 검색\" showCloseButton />\n <Modal.Body className={cx('job-vehicle-search-modal')} raw>\n {VehicleSearchComponent}\n </Modal.Body>\n <Modal.Footer style={{ marginTop: 0 }}>\n <Button variant=\"primary\" size=\"medium\" appearance=\"filled\" width=\"full\" onClick={onClose}>\n 확인({selectedVehicle?.integrationCodeValueName || '미선택'})-{selectedVehicle?.integrationCodeValue}\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n );\n}\n","/* eslint-disable react-hooks/exhaustive-deps */\n\nimport { useEffect, useState } from 'react';\n\nimport { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { FormField, type SegmentItems } from 'sales-frontend-design-system';\n\nimport { useJobSearchModal } from '../modal';\n\nexport const FormSearchJobField = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n error,\n size = 'medium',\n placeholder = '직종 검색',\n onValueChange,\n defaultValue,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled'> &\n Omit<FormField.TextFieldProps, 'defaultValue'> & {\n onValueChange?: (value?: SegmentItems) => void;\n defaultValue?: SegmentItems;\n }) => {\n const [selected, setSelected] = useState<SegmentItems | undefined>(defaultValue);\n\n const { field, fieldState } = useController({ name, control, disabled });\n const { JobSearchModal, openJobSearchModal, selectedJob } = useJobSearchModal();\n\n useEffect(() => {\n if (selectedJob) {\n field.onChange(selectedJob.occupationIndustryName);\n setSelected({ label: selectedJob.occupationIndustryName, value: selectedJob.occupationIndustryCode });\n onValueChange?.({ label: selectedJob.occupationIndustryName, value: selectedJob.occupationIndustryCode });\n }\n }, [selectedJob]);\n\n return (\n <>\n <FormField.ComboBox\n {...props}\n {...field}\n id={field.name}\n error={fieldState.invalid || error}\n value={selected?.label ?? ''}\n icon=\"search\"\n size={size}\n placeholder={placeholder}\n autoComplete=\"off\"\n onClick={openJobSearchModal}\n />\n {JobSearchModal}\n </>\n );\n};\n","import { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { SegmentGroup, type SegmentGroupHtmlProps } from 'sales-frontend-design-system';\n\nexport interface FormSegmentGroupProps<TFormValues extends FieldValues>\n extends Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled'>,\n Omit<SegmentGroupHtmlProps, 'defaultValue'> {\n disabledItems?: string[];\n}\n\nexport const FormSegmentGroup = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n disabledItems,\n items,\n ...props\n}: FormSegmentGroupProps<TFormValues>) => {\n const { field, fieldState } = useController({ name, control, disabled });\n\n const itemList = items.map((item) => {\n return {\n ...item,\n disabled: disabledItems?.includes(item.value)\n };\n });\n\n return (\n <SegmentGroup\n {...props}\n tabIndex={0}\n id={field.name}\n ref={field.ref}\n defaultValue={field.value}\n disabled={field.disabled}\n error={fieldState.invalid}\n onBlur={field.onBlur}\n items={itemList}\n onValueChange={(selected) => {\n field.onChange(selected);\n props.onValueChange?.(selected);\n }}\n />\n );\n};\n","import React from 'react';\n\nimport { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { OptionProps, Select, SelectProps } from 'sales-frontend-design-system';\n\nimport type { SegmentItems } from 'sales-frontend-design-system';\n\n/**\n * 영업지원 시스템 셀렉트필드\n * @param param0\n * @returns\n */\n\ntype FormSelectProps<TFormValues extends FieldValues> = Pick<\n UseControllerProps<TFormValues>,\n 'name' | 'control' | 'disabled'\n> &\n Omit<SelectProps, 'defaultValue'>;\n\nexport const FormSelect = <TFormValues extends FieldValues>({\n name,\n control,\n disabled,\n error,\n children,\n ...props\n}: FormSelectProps<TFormValues>) => {\n const { field, fieldState } = useController({ name, control, disabled });\n\n return (\n <Select\n {...props}\n id={field.name}\n disabled={field.disabled}\n error={fieldState.invalid || error}\n onBlur={field.onBlur}\n value={field.value}\n onChange={(selected) => {\n field.onChange(selected);\n }}\n >\n {children}\n </Select>\n );\n};\n\nconst FormSelectOption = ({ children, value, ...rest }: OptionProps) => {\n return (\n <Select.Option value={value} {...rest}>\n {children}\n </Select.Option>\n );\n};\n\ninterface IFormSelectGroupProps<TFormValues extends FieldValues> extends FormSelectProps<TFormValues> {\n options: SegmentItems[];\n optionsProps?: Omit<OptionProps, 'children' | 'value'>;\n}\n\nconst FormSelectGroup = <TFormValues extends FieldValues>({\n options,\n optionsProps,\n ...props\n}: Omit<IFormSelectGroupProps<TFormValues>, 'children'>) => {\n return (\n <FormSelect {...props}>\n {options.map(\n (option) =>\n option.label && (\n <FormSelectOption key={option.value} value={option.value} {...optionsProps}>\n {option.label}\n </FormSelectOption>\n )\n )}\n </FormSelect>\n );\n};\n\nFormSelect.Option = FormSelectOption;\nFormSelect.Group = FormSelectGroup;\n","import { useController, type FieldValues, type UseControllerProps } from 'react-hook-form';\nimport { FormField } from 'sales-frontend-design-system';\n\nexport const FormTextField = <TFormValues extends FieldValues>({\n name,\n control,\n size = 'medium',\n disabled,\n error,\n onBlur,\n onChange,\n rootProps,\n ...props\n}: Pick<UseControllerProps<TFormValues>, 'name' | 'control' | 'disabled'> & FormField.TextFieldProps) => {\n const { field, fieldState } = useController({ name, control, disabled });\n\n return (\n <FormField.TextField\n {...props}\n id={field.name}\n size={size}\n autoComplete=\"off\"\n name={field.name}\n value={field.value ?? ''}\n disabled={field.disabled}\n error={fieldState.invalid || error}\n onChange={(e) => {\n field.onChange(e);\n onChange?.(e);\n }}\n onBlur={(e) => {\n field.onBlur();\n onBlur?.(e);\n }}\n rootProps={{\n ...rootProps,\n onClear: () => {\n field.onChange('');\n rootProps?.onClear?.();\n }\n }}\n />\n );\n};\n","import React from 'react';\n\nimport classNames from 'classnames/bind';\nimport { ModalUtils } from 'sales-frontend-design-system';\n\nimport styles from './step-indicator.module.scss';\n\nimport type { StepIndicatorProps, StepItem } from './step-indicator.types';\n\nconst cx = classNames.bind(styles);\n\nexport const StepIndicator = ({\n items,\n onClickItem,\n currentIndex = 0,\n defaultValue = '',\n dotCount = 3,\n isLoading\n}: StepIndicatorProps) => {\n const [steps, setSteps] = React.useState<StepItem[]>(\n Array.from({ length: 10 }).map(() => ({ label: '-', value: '' }))\n );\n const [current, setCurrent] = React.useState(currentIndex);\n\n React.useEffect(() => {\n if (items.length > 0) {\n setSteps(items);\n items.map((item, idx) => {\n if (item.value === defaultValue) {\n setCurrent(idx);\n }\n });\n }\n }, [items, defaultValue]);\n\n const handleClickStep = (item: StepItem) => {\n const index = steps.findIndex((step) => step.value === item.value);\n\n if (index === -1) {\n console.error('error not found index');\n\n return;\n }\n\n if (steps[index < 1 ? index : index - 1]?.isCompleted) {\n onClickItem?.(item);\n } else {\n ModalUtils.alert('이전 단계를 모두 완료해야 선택한 단계로\\n이동할 수 있습니다.', '이전 단계를 먼저 진행해주세요');\n }\n };\n\n return (\n <div className={cx('stepper-layout', { loading: isLoading })}>\n <div className={cx('stepper')}>\n {steps.map((item, idx) => (\n <React.Fragment key={`num-${idx}`}>\n <div\n className={cx(\n 'circle',\n { completed: item.isCompleted ?? false },\n { active: defaultValue === item.value || current === idx }\n )}\n onClick={() => handleClickStep?.(item)}\n >\n {item.isCompleted ? <span className={cx('completed-icon')} /> : idx + 1}\n </div>\n {/* 다음 단계가 있을 때만 dot 렌더링 */}\n {idx < steps.length - 1 &&\n Array.from({ length: dotCount }).map((_, dotIdx) => (\n <span key={`dot-${idx}-${dotIdx}`} className={cx('dot')} />\n ))}\n </React.Fragment>\n ))}\n </div>\n\n <ul className={cx('step-labels')}>\n {steps.map((item, idx) => (\n <li\n key={`label-${idx}`}\n className={cx(\n { completed: steps[idx < 1 ? idx : idx - 1]?.isCompleted ?? false },\n { active: defaultValue === item.value || current === idx }\n )}\n onClick={() => handleClickStep?.(item)}\n >\n <span className=\"text-ellipsis\">{item.label ?? item.value}</span>\n </li>\n ))}\n </ul>\n </div>\n );\n};\n","import classNames from 'classnames/bind';\nimport { IconIllustCamera } from 'sales-frontend-assets';\nimport { Icon } from 'sales-frontend-design-system';\n\nimport styles from './camera.module.scss';\nimport { AttachedPhoto, cameraItemType } from './camera.types';\n\nconst cx = classNames.bind(styles);\n\nexport interface AttachmentProps {\n photos: AttachedPhoto[];\n onAddPhoto: () => void;\n onRemovePhoto: (id: string) => void;\n /* false이면 사진이 1장 이상일 때만 표시 */\n show: boolean;\n type?: cameraItemType;\n buttonText?: string;\n}\n\nexport function Attachment({\n photos,\n onAddPhoto,\n onRemovePhoto,\n show,\n type = 'multiple',\n buttonText\n}: AttachmentProps) {\n const handleAddPhoto = () => {\n onAddPhoto();\n };\n\n const handleRemovePhoto = (id: string) => {\n onRemovePhoto(id);\n };\n\n const renderPhotoSingle = () => {\n if (photos.length === 0) {\n return (\n <div className={cx('single-photo-item', 'add-photo-item')}>\n <button className={cx('add-photo-button-single')} onClick={handleAddPhoto}>\n <IconIllustCamera />\n <span>{buttonText || '사진 첨부하기'}</span>\n </button>\n </div>\n );\n }\n\n return photos.map((photo) => (\n <div key={photo.id} className={cx('single-photo-item')}>\n <div className={cx('photo-placeholder')}>\n <img src={photo.src} alt={photo.name} className={cx('photo-image')} />\n </div>\n <button className={cx('remove-button')} onClick={() => handleRemovePhoto(photo.id)} aria-label=\"사진 삭제\">\n ×\n </button>\n </div>\n ));\n };\n\n const renderPhotoGrid = () => {\n const maxPhotos = type === 'single' ? 1 : 4;\n const gridItems = [];\n\n if (photos.length < maxPhotos) {\n gridItems.push(\n <div key=\"add-photo\" className={cx('photo-item', 'add-photo-item')}>\n <button className={cx('add-photo-button')} onClick={handleAddPhoto}>\n <IconIllustCamera />\n <span>{buttonText || '첨부하기'}</span>\n <span className={cx('photo-count')}>\n (<span className={cx('photo-count-number')}>{photos.length}</span>/{maxPhotos})\n </span>\n </button>\n </div>\n );\n }\n\n photos.forEach((photo) => {\n gridItems.push(\n <div key={photo.id} className={cx('photo-item')}>\n <div className={cx('photo-placeholder')}>\n <img src={photo.src} alt={photo.name} className={cx('photo-image')} />\n </div>\n <button className={cx('remove-button')} onClick={() => handleRemovePhoto(photo.id)} aria-label=\"사진 삭제\">\n ×\n </button>\n </div>\n );\n });\n\n return gridItems;\n };\n\n const isVisible = show || (!show && photos.length > 0);\n\n if (!isVisible) {\n return null;\n }\n\n if (type === 'single') {\n return <div className={cx('photo-single')}>{renderPhotoSingle()}</div>;\n }\n\n return <div className={cx('photo-grid', { linear: type === 'linear' })}>{renderPhotoGrid()}</div>;\n}\n","import { cameraOptions } from './camera.types';\n\n// 3mb\nconst maxImageSize = 3 * 1024 * 1024;\n/**\n *\n * 이미지를 파라미터로 전달하고, 설정한 리사이즈 옵션에 따라 이미지를 리사이징하고 리턴한다.\n * 리턴하는 데이터타입은 전달받은 데이터 타입과 동일하게 한다.\n * base64 string을 전달받은 경우는 base64 string을 리턴하고\n * file 타입을 전달받은 경우는 file 타입을 리턴한다.\n *\n * options 규칙\n * width 와 height 중 1개가 존재하는 경우 해당 사이즈에 맞게 원본비율유지하여 축소한다.\n * width 와 height 가 모두 존재하는 경우 해당 사이즈에 맞게 원본비율을 무시하고 리사이즈한다.\n *\n * filesize 옵션이 존재하는 경우는 width,height 옵션을 무시하고, filesize 이하로 원본비율 축소한다.\n *\n * width, height 의 단위는 px 이다.\n *\n * ext는 리턴데이터 타입이 파일인 경우, 사용할 파일확장자 이다.\n * ext가 설정된 값이 없는 경우는, 기본값으로 jpeg를 사용한다.\n *\n */\nexport function resize<T extends string | File>(\n image: T,\n options: cameraOptions['resize'] = { ext: 'jpeg', filesize: maxImageSize }\n): Promise<T> {\n return new Promise((resolve, reject) => {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n\n if (!ctx) {\n reject(new Error('Canvas context를 생성할 수 없습니다.'));\n\n return;\n }\n\n const img = new Image();\n img.crossOrigin = 'anonymous';\n\n img.onload = () => {\n let { width, height } = img;\n const { filesize, ext } = options;\n\n // filesize 옵션이 있는 경우 width, height 옵션을 무시하고 filesize 이하로 원본비율 축소\n if (filesize) {\n const originalSize = width * height * 4; // RGBA 4바이트\n if (originalSize > filesize) {\n const ratio = Math.sqrt(filesize / originalSize);\n width = Math.floor(width * ratio);\n height = Math.floor(height * ratio);\n }\n } else {\n // width, height 옵션 처리\n const { width: targetWidth, height: targetHeight } = options;\n\n if (targetWidth && targetHeight) {\n // width와 height가 모두 존재하는 경우 원본비율 무시하고 리사이즈\n width = targetWidth;\n height = targetHeight;\n } else if (targetWidth) {\n // width만 존재하는 경우 원본비율 유지하여 축소\n const ratio = targetWidth / width;\n width = targetWidth;\n height = Math.floor(height * ratio);\n } else if (targetHeight) {\n // height만 존재하는 경우 원본비율 유지하여 축소\n const ratio = targetHeight / height;\n height = targetHeight;\n width = Math.floor(width * ratio);\n }\n }\n\n // canvas 크기 설정\n canvas.width = width;\n canvas.height = height;\n\n // 이미지 그리기\n ctx.drawImage(img, 0, 0, width, height);\n\n // 결과 반환\n if (typeof image === 'string') {\n // base64 string인 경우\n const mimeType = ext === 'png' ? 'image/png' : 'image/jpeg';\n const quality = ext === 'png' ? 1.0 : 0.8;\n const base64 = canvas.toDataURL(mimeType, quality);\n resolve(base64 as T);\n } else {\n // File인 경우\n canvas.toBlob(\n (blob) => {\n if (!blob) {\n reject(new Error('Blob을 생성할 수 없습니다.'));\n\n return;\n }\n\n const mimeType = ext === 'png' ? 'image/png' : 'image/jpeg';\n const fileName = image.name ? `${image.name.replace(/\\.[^/.]+$/, '')}.${ext}` : `resized.${ext}`;\n\n const resizedFile = new File([blob], fileName, { type: mimeType });\n resolve(resizedFile as T);\n },\n ext === 'png' ? 'image/png' : 'image/jpeg',\n ext === 'png' ? 1.0 : 0.8\n );\n }\n };\n\n img.onerror = () => {\n reject(new Error('이미지를 로드할 수 없습니다.'));\n };\n\n // 이미지 소스 설정\n if (typeof image === 'string') {\n img.src = image;\n } else {\n const reader = new FileReader();\n reader.onload = (e) => {\n if (e.target?.result) {\n img.src = e.target.result as string;\n } else {\n reject(new Error('파일을 읽을 수 없습니다.'));\n }\n };\n reader.onerror = () => {\n reject(new Error('파일을 읽을 수 없습니다.'));\n };\n reader.readAsDataURL(image);\n }\n });\n}\n","import { useEffect, useState } from 'react';\n\nimport { Bridge } from 'sales-frontend-bridge';\nimport { base64ToBlob, base64ToFile, imageUrlToFile, isAndroidDevice } from 'sales-frontend-utils';\n\nimport { Attachment } from './attachment';\nimport { resize } from './resize';\n\nimport type { AttachedPhoto, cameraOptions } from './camera.types';\n\nconst genImageId = () => `camera-${Date.now()}-${Math.random()}`;\n\n/**\n * @param options Partial<cameraOptions>\n * initData\n * 화면최초 로딩시 초기값\n *\n * show\n * boolean\n * 화면진입시, Attachment 컴포넌트 노출여부, 별도의 버튼을 통해 호출할 경우 false.\n *\n * type\n * 'single' | 'multiple' | 'linear' Attachment 컴포넌트 타입\n *\n * onChange\n * (file: File) => void;\n *\n * onDelete\n * (id: string) => void;\n *\n * useNativeCamera\n * boolean\n * 앱환경에서, 네이티브의 카메라를 호출할경우 사용\n *\n * cameraOnly\n * boolean\n * useNativeCamera가 false인 경우에만 사용\n *\n * buttonText\n * string\n * Attachment 컴포넌트에 버튼을 표시할 경우에만 사용\n *\n * resize\n * 이미지가 입력된후 리사이즈를 할경우에만 사용\n * resize: {\n * width?: number;\n * height?: number;\n * filesize?: number;\n * ext?: string;\n * };\n *\n * responseFileType fetch로 이미지자원을 가져올때 ios이슈가 있어서,\n * scheme, base64 두가지 타입으로 설정가능하도록 변경됨\n */\nexport function useCamera({\n onChange,\n resize: resizeOption,\n cameraOnly,\n onDelete,\n show,\n type = 'multiple',\n buttonText,\n initData,\n useNativeCamera = false,\n responseFileType\n}: Partial<cameraOptions> = {}) {\n const convertedInitData = initData?.map((data, index) => ({ ...data, id: String(index + 1) }));\n const [attachedPhotos, setAttachedPhotos] = useState<AttachedPhoto[]>(convertedInitData || []);\n\n const findImage = (imageId: string) => {\n return attachedPhotos.find((image) => image.id === imageId);\n };\n\n const imageHandler = async (file: File) => {\n const newPhoto: AttachedPhoto = {\n id: genImageId(),\n src: URL.createObjectURL(resizeOption ? await resize(file, resizeOption) : file),\n name: `서류사진_${attachedPhotos.length + 1}`\n };\n\n if (type === 'single') {\n setAttachedPhotos([newPhoto]);\n } else {\n setAttachedPhotos([...attachedPhotos, newPhoto]);\n }\n\n if (onChange) {\n onChange(file);\n }\n };\n\n const processImage = async (uri: string) => {\n if (responseFileType === 'scheme') {\n const file = await imageUrlToFile(uri);\n await imageHandler(file);\n } else {\n const file = await base64ToFile(uri, 'image.jpg');\n await imageHandler(file);\n }\n };\n\n /**\n * onClick시, input File생성후 카메라 또는 파일선택 호출\n */\n const onClick = () => {\n if (useNativeCamera) {\n if (isAndroidDevice()) {\n Bridge.native.documentCapture({ responseFileType: responseFileType || 'scheme' }).then(async ({ uri }) => {\n processImage(uri);\n });\n } else {\n Bridge.native.documentCapture({ responseFileType: responseFileType || 'base64' }).then(async ({ uri }) => {\n processImage(uri);\n });\n }\n } else {\n // input을 dom으로 생성, type='file' , cameraOnly 가 true이면 카메라만 실행가능하도록 input 을 설정\n // true가 아니면 이미지확장자파일과, 카메라선택 둘다 가능하도록 설정\n const input = document.createElement('input');\n input.type = 'file';\n input.accept = 'image/*';\n\n if (cameraOnly) {\n // 카메라만 실행 가능하도록 설정\n input.capture = 'camera';\n }\n\n // 파일 선택 이벤트 리스너 추가\n input.addEventListener('change', async (event) => {\n const target = event.target as HTMLInputElement;\n const { files } = target;\n\n if (files && files.length > 0) {\n const file = files[0];\n // onChange 콜백 호출\n if (file) {\n await imageHandler(file);\n }\n }\n\n // input 요소 제거\n document.body.removeChild(input);\n });\n\n // input을 body에 추가하고 click 이벤트 발생\n input.style.display = 'none';\n document.body.appendChild(input);\n input.click();\n }\n };\n\n /**\n * 선택한 이미지 삭제\n * @param imageId 이미지아이디\n */\n const deleteImage = (imageId: string) => {\n const imageIndex = attachedPhotos.findIndex((image) => image.id === imageId);\n if (imageIndex > -1) {\n const item = attachedPhotos.splice(imageIndex, 1);\n item[0] && URL.revokeObjectURL(item[0].src);\n setAttachedPhotos([...attachedPhotos]);\n onDelete && onDelete(imageId);\n }\n };\n\n const CameraComponent = () => (\n <Attachment\n show={!!show}\n onAddPhoto={onClick}\n onRemovePhoto={deleteImage}\n photos={attachedPhotos}\n type={type}\n buttonText={buttonText}\n />\n );\n\n useEffect(() => {\n return () => {\n // revoke all images url\n attachedPhotos.forEach((image) => {\n URL.revokeObjectURL(image.src);\n });\n };\n }, []);\n\n return {\n onClick,\n getImage: findImage,\n deleteImage,\n attachedPhotos,\n Attachment: CameraComponent,\n addImage: (data: Blob | string, name?: string) => {\n let blobUrl = '';\n if (data instanceof Blob) {\n blobUrl = URL.createObjectURL(data);\n } else if (typeof data === 'string') {\n blobUrl = URL.createObjectURL(base64ToBlob(data));\n }\n\n const newPhoto: AttachedPhoto = {\n id: genImageId(),\n src: blobUrl,\n name: name || `서류사진_${attachedPhotos.length + 1}`\n };\n setAttachedPhotos([...attachedPhotos, newPhoto]);\n }\n };\n}\n","import { useRef, useEffect, useState, useCallback } from 'react';\n\nimport { DownloadProps, PaintProps } from './canvas-paint.types';\n\n/** undo, redo 가능한 히스토리 최대 저장 갯수 */\nconst HISTORY_SIZE = 100;\n\n/** 기본 다운로드 값 */\nconst DEFAULT_DOWNLOAD_PROPS: Required<DownloadProps> = {\n fileExtendsion: 'png',\n fileName: 'image',\n transparent: true,\n backgroundColor: 'white',\n width: 500,\n height: 500\n};\nexport function useCanvasPaint(paintProps: PaintProps = {}) {\n const { pen = { strokeWeight: 5, strokeColor: 'black' }, onChange, onStart, onEnd } = paintProps;\n const [canvasRefState, setCanvasRefState] = useState<HTMLCanvasElement | null>(null);\n const contextRef = useRef<CanvasRenderingContext2D | null>(null);\n\n const [isPainting, setIsPainting] = useState(false);\n const [history, setHistory] = useState<string[]>([]);\n const [historyIndex, setHistoryIndex] = useState(-1);\n\n const saveState = useCallback(() => {\n if (!canvasRefState) {\n return;\n }\n const dataUrl = canvasRefState.toDataURL();\n\n const newHistory = history.slice(0, historyIndex + 1);\n if (newHistory.length >= HISTORY_SIZE) {\n newHistory.shift();\n }\n newHistory.push(dataUrl);\n\n setHistory(newHistory);\n setHistoryIndex(newHistory.length - 1);\n onChange && onChange();\n }, [history, historyIndex, onChange, canvasRefState]);\n\n const restoreState = useCallback(\n (index: number) => {\n const context = contextRef.current;\n if (!canvasRefState || !context || !history[index]) {\n return;\n }\n\n const dataUrl = history[index];\n const img = new Image();\n img.onload = () => {\n context.clearRect(0, 0, canvasRefState.width, canvasRefState.height);\n context.drawImage(img, 0, 0);\n };\n img.src = dataUrl;\n onChange && onChange();\n },\n [history, onChange, canvasRefState]\n );\n\n useEffect(() => {\n if (!canvasRefState) {\n return;\n }\n const context = canvasRefState.getContext('2d', { willReadFrequently: true });\n if (!context) {\n return;\n }\n contextRef.current = context;\n\n const initialDataUrl = canvasRefState.toDataURL();\n setHistory([initialDataUrl]);\n setHistoryIndex(0);\n }, [canvasRefState]);\n\n useEffect(() => {\n const context = contextRef.current;\n if (context) {\n context.lineWidth = pen.strokeWeight;\n context.strokeStyle = pen.strokeColor;\n }\n }, [pen]);\n\n /**\n * @description canvas의 크기가 동적으로 생성되는 경우,\n * 포인터의 위치가 맞지않는 이슈를 해결하기위한,\n * scale조정하는 함수입니다.\n */\n const getEventPosition = useCallback(\n (event: MouseEvent | TouchEvent) => {\n if (!canvasRefState) {\n return null;\n }\n\n const rect = canvasRefState.getBoundingClientRect();\n const scaleX = canvasRefState.width / rect.width;\n const scaleY = canvasRefState.height / rect.height;\n\n let clientX;\n let clientY;\n\n if (event instanceof MouseEvent) {\n clientX = event.clientX;\n clientY = event.clientY;\n } else if (event instanceof TouchEvent) {\n const touch = event.touches[0];\n if (!touch) {\n return null;\n }\n clientX = touch.clientX;\n clientY = touch.clientY;\n } else {\n return null;\n }\n\n const offsetX = (clientX - rect.left) * scaleX;\n const offsetY = (clientY - rect.top) * scaleY;\n\n return { offsetX, offsetY };\n },\n [canvasRefState]\n );\n\n const startPainting = useCallback(\n (event: MouseEvent | TouchEvent) => {\n event.preventDefault();\n const context = contextRef.current;\n if (!context) {\n return;\n }\n const pos = getEventPosition(event);\n if (!pos) {\n return;\n }\n onStart && onStart();\n const { offsetX, offsetY } = pos;\n context.beginPath();\n context.moveTo(offsetX, offsetY);\n setIsPainting(true);\n },\n [onStart, getEventPosition]\n );\n\n const stopPainting = useCallback(() => {\n const context = contextRef.current;\n if (!context || !isPainting) {\n return;\n }\n context.closePath();\n setIsPainting(false);\n onEnd && onEnd();\n saveState();\n }, [isPainting, onEnd, saveState]);\n\n const paint = useCallback(\n (event: MouseEvent | TouchEvent) => {\n event.preventDefault();\n if (!isPainting || !contextRef.current) {\n return;\n }\n const pos = getEventPosition(event);\n if (!pos) {\n return;\n }\n const { offsetX, offsetY } = pos;\n contextRef.current.lineTo(offsetX, offsetY);\n contextRef.current.stroke();\n },\n [isPainting, getEventPosition]\n );\n\n useEffect(() => {\n if (!canvasRefState) {\n return;\n }\n\n canvasRefState.addEventListener('mousedown', startPainting);\n canvasRefState.addEventListener('mouseup', stopPainting);\n canvasRefState.addEventListener('mousemove', paint);\n canvasRefState.addEventListener('mouseleave', stopPainting);\n\n canvasRefState.addEventListener('touchstart', startPainting);\n canvasRefState.addEventListener('touchend', stopPainting);\n canvasRefState.addEventListener('touchmove', paint);\n canvasRefState.addEventListener('touchcancel', stopPainting);\n\n return () => {\n canvasRefState.removeEventListener('mousedown', startPainting);\n canvasRefState.removeEventListener('mouseup', stopPainting);\n canvasRefState.removeEventListener('mousemove', paint);\n canvasRefState.removeEventListener('mouseleave', stopPainting);\n\n canvasRefState.removeEventListener('touchstart', startPainting);\n canvasRefState.removeEventListener('touchend', stopPainting);\n canvasRefState.removeEventListener('touchmove', paint);\n canvasRefState.removeEventListener('touchcancel', stopPainting);\n };\n }, [startPainting, stopPainting, paint, canvasRefState]);\n\n const clear = () => {\n const context = contextRef.current;\n if (canvasRefState && context) {\n context.clearRect(0, 0, canvasRefState.width, canvasRefState.height);\n const initialDataUrl = canvasRefState.toDataURL();\n setHistory([initialDataUrl]);\n setHistoryIndex(0);\n onChange && onChange();\n }\n };\n\n const undo = () => {\n if (historyIndex > 0) {\n const newIndex = historyIndex - 1;\n setHistoryIndex(newIndex);\n restoreState(newIndex);\n }\n };\n\n const redo = () => {\n if (historyIndex < history.length - 1) {\n const newIndex = historyIndex + 1;\n setHistoryIndex(newIndex);\n restoreState(newIndex);\n }\n };\n\n const loadImage = (base64String: string) => {\n const context = contextRef.current;\n if (!canvasRefState || !context) {\n return;\n }\n\n const img = new Image();\n img.onload = () => {\n context.clearRect(0, 0, canvasRefState.width, canvasRefState.height);\n context.drawImage(img, 0, 0, canvasRefState.width, canvasRefState.height);\n saveState();\n };\n img.src = base64String;\n };\n\n const getBase64String = (imageProps: DownloadProps) => {\n const props = { ...DEFAULT_DOWNLOAD_PROPS, ...imageProps };\n const { fileExtendsion, transparent, backgroundColor, width, height } = props;\n const originalCanvas = canvasRefState;\n if (!originalCanvas) {\n return;\n }\n\n const tempCanvas = document.createElement('canvas');\n tempCanvas.width = width;\n tempCanvas.height = height;\n const tempCtx = tempCanvas.getContext('2d');\n\n if (tempCtx) {\n if (!transparent) {\n tempCtx.fillStyle = backgroundColor || 'white';\n tempCtx.fillRect(0, 0, width, height);\n }\n tempCtx.drawImage(originalCanvas, 0, 0, width, height);\n\n return tempCanvas.toDataURL(`image/${fileExtendsion}`);\n }\n };\n\n const download = (downloadProps: DownloadProps) => {\n const props = { ...DEFAULT_DOWNLOAD_PROPS, ...downloadProps };\n const { fileName, fileExtendsion, transparent, backgroundColor, width, height } = props;\n const originalCanvas = canvasRefState;\n if (!originalCanvas) {\n return;\n }\n\n const tempCanvas = document.createElement('canvas');\n tempCanvas.width = width;\n tempCanvas.height = height;\n const tempCtx = tempCanvas.getContext('2d');\n\n if (tempCtx) {\n if (!transparent) {\n tempCtx.fillStyle = backgroundColor || 'white';\n tempCtx.fillRect(0, 0, width, height);\n }\n tempCtx.drawImage(originalCanvas, 0, 0, width, height);\n\n const link = document.createElement('a');\n link.download = `${fileName}.${fileExtendsion}`;\n link.href = tempCanvas.toDataURL(`image/${fileExtendsion}`);\n link.click();\n }\n };\n /**\n * canvasRef.current canvas 에 데이터가 있는지 확인후 boolean 리턴\n * @returns boolean\n */\n const isCanvasBlank = () => {\n if (!canvasRefState) {\n return true;\n }\n\n // 캔버스 크기 가져오기\n const { width, height } = canvasRefState;\n\n // 2D 렌더링 컨텍스트 가져오기\n const ctx = canvasRefState.getContext('2d');\n if (!ctx) {\n console.error('2D context not available');\n\n return true; // 컨텍스트가 없으면 비어있는 것으로 간주\n }\n\n // 캔버스 전체 영역의 픽셀 데이터 가져오기\n const imageData = ctx.getImageData(0, 0, width, height);\n const { data } = imageData;\n\n // 픽셀 데이터의 알파(alpha) 값을 순회하며 확인\n // RGBA 순서이므로 알파 값은 3, 7, 11, ... 인덱스에 위치\n for (let i = 0; i < data.length; i += 4) {\n // 알파 값이 0이 아니면 (불투명한 부분이 있으면)\n if (data[i + 3] !== 0) {\n return false; // 캔버스가 비어있지 않음\n }\n }\n\n // 모든 픽셀의 알파 값이 0이면 (모두 투명하면)\n return true; // 캔버스가 비어있음\n };\n\n return {\n clear,\n undo,\n redo,\n loadImage,\n download,\n getBase64String,\n isCanvasBlank,\n setCanvasRefState,\n canvasRefState\n };\n}\n","/**\n * 서명로드용 base64 string\n */\nexport const testSignatureBase64Data =\n 'data:image/png;base64,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';\n","import { useState, useEffect, useRef } from 'react';\n\nimport { getRemoteIdentityVerificationSystemToken } from 'sales-frontend-api/method';\nimport { Modal, useModalState, Loading, ModalUtils } from 'sales-frontend-design-system';\nimport { MessageEventManager } from 'sales-frontend-utils';\n\nimport { VerificationResponse } from './remote-identity-verification.types';\nimport {\n UseRemoteIdentityVerificationProps,\n RemoteIdentityVerificationSuccess\n} from './remote-identity-verification.types';\n\nconst VERIFICATION_CODES = {\n SUCCESS: '0000',\n USER_CANCEL: '9000',\n TOKEN_ERROR: '9001',\n CAMERA_PERMISSION: '9002',\n ATTEMPT_EXCEEDED: '9003',\n SERVER_ERROR: '9999'\n} as const;\n\nexport const RIV_SEARCH_PARAM_MAP = {\n NATIONALITY_TYPE: {\n /** 내국인 */\n DOMESTIC: 'D',\n /** 외국인 */\n FOREIGN: 'F'\n },\n DOCUMENT_FORMAT: {\n /** 일반 주민등록증 */\n GENERAL: 'NC202001',\n /** 외국인등록증 */\n FOREIGN_REGISTRATION: 'NC020048'\n },\n DOCUMENT_TYPE: {\n /** 일반 주민등록증 */\n GENERAL: 'IT148',\n /** 외국인등록증 */\n FOREIGN_REGISTRATION: 'IT321'\n }\n} as const;\n\n/**\n * 비대면인증시스템 기본 로직\n * @param config\n */\nexport const useRemoteIdentityVerification = ({\n rivEnv,\n rivOrigin,\n tokenRequestParams,\n apiConfig,\n onCancel,\n onError,\n onSuccess,\n rivSearchParams\n}: UseRemoteIdentityVerificationProps) => {\n const rivHost = rivOrigin ?? `https://${rivEnv === 'prd' ? '' : rivEnv === 'stg' ? 'qa' : 'dev'}riv.hanwhalife.com`;\n\n // RIV URL 생성\n const createRemoteIdentityVerificationUrl = async () => {\n const response = await getRemoteIdentityVerificationSystemToken(tokenRequestParams, apiConfig);\n const { accessToken, remoteIdentityVerificationSystemRequestId } = response.data;\n\n const urlParams = new URLSearchParams({\n authorization: accessToken,\n rivsRqstId: remoteIdentityVerificationSystemRequestId,\n ...rivSearchParams\n });\n\n return { fullUrl: `${rivHost}/?${urlParams.toString()}`, rivsRequestId: remoteIdentityVerificationSystemRequestId };\n };\n\n // PostMessage 핸들러 생성\n const createMessageHandler = ({ rivsRequestId }: RemoteIdentityVerificationSuccess, cleanup?: () => void) => {\n return (event: MessageEvent) => {\n try {\n const response: VerificationResponse =\n typeof event.data === 'string' ? JSON.parse(decodeURIComponent(event.data)) : event.data;\n\n if (response.command !== 'webClose') {\n return;\n }\n\n const { result, code } = response.args;\n\n switch (code) {\n case VERIFICATION_CODES.USER_CANCEL:\n console.log('=====사용자 종료!=====', { result, code });\n onCancel?.({ result, code });\n cleanup?.();\n break;\n\n case VERIFICATION_CODES.TOKEN_ERROR:\n case VERIFICATION_CODES.CAMERA_PERMISSION:\n case VERIFICATION_CODES.ATTEMPT_EXCEEDED:\n case VERIFICATION_CODES.SERVER_ERROR:\n console.log('=====비대면인증 실패!=====', { result, code });\n onError?.({ result, code }, { rivsRequestId });\n cleanup?.();\n break;\n\n case VERIFICATION_CODES.SUCCESS:\n console.log('=====비대면인증 성공!=====', { result, code });\n onSuccess?.({ result, code }, { rivsRequestId });\n cleanup?.();\n break;\n\n default:\n console.warn('Unknown verification code:', code);\n }\n } catch (error) {\n console.error('Failed to parse postMessage:', error);\n }\n };\n };\n\n return {\n createRemoteIdentityVerificationUrl,\n createMessageHandler\n };\n};\n\n/**\n * Iframe용 비대면인증시스템 훅\n * @param config\n * @returns\n */\nexport const useRemoteIdentityVerificationIframe = (config: UseRemoteIdentityVerificationProps) => {\n const { createMessageHandler, createRemoteIdentityVerificationUrl } = useRemoteIdentityVerification(config);\n const { isOpen, openModal, closeModal } = useModalState();\n const [remoteIdentityVerificationUrl, setRemoteIdentityVerificationUrl] = useState('');\n const [rivsRequestId, setRivsRequestId] = useState('');\n const [isCreatingUrl, setIsCreatingUrl] = useState(false);\n const [isIframeLoaded, setIsIframeLoaded] = useState(false);\n\n // iframe용 URL 생성\n const createIframeUrl = async () => {\n if (remoteIdentityVerificationUrl || isCreatingUrl) {\n return;\n }\n\n setIsCreatingUrl(true);\n setIsIframeLoaded(false);\n\n try {\n const { fullUrl, rivsRequestId } = await createRemoteIdentityVerificationUrl();\n setRemoteIdentityVerificationUrl(fullUrl);\n setRivsRequestId(rivsRequestId);\n } catch (error) {\n console.error('Failed to create URL:', error);\n throw error;\n } finally {\n setIsCreatingUrl(false);\n }\n };\n\n const openRivIframe = async () => {\n try {\n await createIframeUrl();\n openModal();\n } catch (error) {\n console.error('openRivIframe error::', error);\n\n await ModalUtils.alert('비대면 인증 URL 생성에 실패했습니다. 다시 시도해주세요.');\n config.onError?.(\n {\n result: 'N',\n code: VERIFICATION_CODES.TOKEN_ERROR\n },\n { rivsRequestId: '' }\n );\n }\n };\n\n const closeRivIframe = () => {\n setRemoteIdentityVerificationUrl('');\n setRivsRequestId('');\n setIsIframeLoaded(false);\n closeModal();\n };\n\n useEffect(() => {\n if (!remoteIdentityVerificationUrl) {\n return;\n }\n\n const messageHandler = createMessageHandler({ rivsRequestId }, closeRivIframe);\n MessageEventManager.getInstance().registerHandler('riv-iframe-handler', messageHandler);\n\n return () => MessageEventManager.getInstance().unregisterHandler('riv-iframe-handler');\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [remoteIdentityVerificationUrl, rivsRequestId]);\n\n // Iframe 컴포넌트\n const RivIframe = ({\n width = '100%',\n height = '100%',\n ...iframeProps\n }: React.IframeHTMLAttributes<HTMLIFrameElement> & {\n width?: string;\n height?: string;\n }) => {\n if (!remoteIdentityVerificationUrl) {\n return null;\n }\n\n return (\n <iframe\n src={remoteIdentityVerificationUrl}\n width={width}\n height={height}\n allow=\"camera *;\"\n onLoad={() => setIsIframeLoaded(true)}\n {...iframeProps}\n />\n );\n };\n\n // Modal + Iframe 컴포넌트\n const RivModalIframe = ({\n width = '100%',\n height = '100%',\n loadingComponent,\n ...iframeProps\n }: React.IframeHTMLAttributes<HTMLIFrameElement> & {\n width?: string;\n height?: string;\n loadingComponent?: React.ReactNode;\n }) => {\n const isLoading = isCreatingUrl || (!!remoteIdentityVerificationUrl && !isIframeLoaded);\n\n return (\n <>\n <Modal.Root isOpen={isOpen}>\n {isLoading && (loadingComponent || <Loading.Wait bodyText={'불러오는 중'} />)}\n <RivIframe\n width={width}\n height={height}\n allow=\"camera *;\"\n {...iframeProps}\n style={{\n background: 'var(--sales-color-background-100, #ffffff)',\n ...iframeProps?.style\n }}\n />\n </Modal.Root>\n </>\n );\n };\n\n return {\n RivModalIframe,\n RivIframe,\n\n openRivIframe,\n closeRivIframe,\n\n remoteIdentityVerificationUrl,\n isCreatingUrl,\n isFullyLoaded: isIframeLoaded\n };\n};\n\n/**\n * 팝업용 비대면인증시스템 훅\n * @param config\n * @returns\n */\nexport const useRemoteIdentityVerificationPopup = (config: UseRemoteIdentityVerificationProps) => {\n const { createRemoteIdentityVerificationUrl, createMessageHandler } = useRemoteIdentityVerification(config);\n const [isCreatingUrl, setIsCreatingUrl] = useState(false);\n const [rivsRequestId, setRivsRequestId] = useState('');\n const popupRef = useRef<Window | null>(null);\n\n const openPopup = async (target = '_blank', features?: string) => {\n // 이전 팝업이 열려있으면 닫기\n if (popupRef.current && !popupRef.current.closed) {\n popupRef.current.close();\n }\n\n setIsCreatingUrl(true);\n try {\n const { fullUrl, rivsRequestId } = await createRemoteIdentityVerificationUrl();\n\n const popup = window.open(fullUrl, target, features);\n\n if (!popup) {\n await ModalUtils.alert('팝업이 차단되었습니다. 팝업을 허용해주세요.');\n\n return;\n }\n\n setRivsRequestId(rivsRequestId);\n popupRef.current = popup;\n } catch (error) {\n console.error('openPopup error::', error);\n await ModalUtils.alert('비대면 인증 URL 생성에 실패했습니다. 다시 시도해주세요.');\n } finally {\n setIsCreatingUrl(false);\n }\n };\n const cleanPopup = () => {\n popupRef.current = null;\n };\n\n useEffect(() => {\n const messageHandler = createMessageHandler({ rivsRequestId }, cleanPopup);\n\n MessageEventManager.getInstance().registerHandler('riv-popup-handler', messageHandler);\n\n return () => MessageEventManager.getInstance().unregisterHandler('riv-popup-handler');\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [rivsRequestId]);\n\n return {\n openPopup,\n isCreatingUrl\n };\n};\n","import { useState } from 'react';\n\nimport { useDudExternalFileUploadMutation } from 'sales-frontend-api/method';\nimport { base64ToFile, fileToBase64 } from 'sales-frontend-utils';\n\nexport function DudUpload() {\n const [test, setTest] = useState<any>();\n const { mutateAsync, data } = useDudExternalFileUploadMutation();\n const up = async () => {\n //변환테스트\n const b = await fileToBase64(test.target.files[0]);\n const f = base64ToFile(b, 'test.png');\n\n mutateAsync({\n data: f,\n //테스트시, 가능한 증번 입력\n fileIdentifierValue: '123123123',\n preservationTerm: 1\n });\n };\n\n return (\n <>\n <input type=\"file\" onChange={setTest} />\n <input type=\"button\" value=\"up\" onClick={up} />\n <br />\n {JSON.stringify(data)}\n </>\n );\n}\n","import { useEffect, useState } from 'react';\n\nimport { useDudExternalFileDownloadQuery } from 'sales-frontend-api/method';\nimport { downloadBlob } from 'sales-frontend-utils';\n\nexport function DudDownload() {\n const [fileId, setFileId] = useState<string>('');\n const [enabled, setEnable] = useState<boolean>(false);\n const { data, isError, isSuccess } = useDudExternalFileDownloadQuery(\n {\n fileMgmtId: fileId,\n outputType: 'BINARY'\n },\n {\n enabled\n }\n );\n\n useEffect(() => {\n //타입체크\n console.log('data', data, data instanceof Blob, data instanceof File);\n\n //download file\n if (data instanceof Blob) {\n downloadBlob(data, 'test');\n\n return;\n }\n }, [data]);\n\n return (\n <>\n <input type=\"text\" value={fileId} onChange={(e) => setFileId(e.target.value)} />\n <input type=\"button\" value=\"down\" onClick={() => setEnable(true)} />\n {JSON.stringify(data)}\n {isError && <div>에러</div>}\n {isSuccess && <div>성공</div>}\n </>\n );\n}\n","import { useState } from 'react';\n\n/**\n * @property downloadTarget - 다운로드 대상 주소 또는, 주소를 리턴하는 함수\n * @property onSuccess - 다운로드 성공했을 때 호출\n * @property onError - 다운로드 실패했을 때 호출\n * @property fileName - 다운로드 파일명 , 없으면 자동생성\n */\nexport interface DownloadTargetInfo {\n downloadTarget: string | (() => Promise<string>);\n onSuccess?: () => void;\n onError?: () => void;\n fileName?: string;\n}\n\n/**\n * @property downloadTargetInfo - 다운로드 대상 정보\n * @property onAllSuccess - 모든 다운로드가 성공했을 때 호출\n * @property onAnyError - 하나라도 실패했을 때 호출\n * @property startIndex - 다운로드 시작 인덱스 또는 다운로드할 인덱스배열\n * @property keepGoingOnError - 하나라도 실패했을 때도 계속 다운로드를 수행할지 여부\n */\nexport interface DownloaderProps {\n downloadTargetInfo: DownloadTargetInfo[];\n onAllSuccess?: () => void;\n onAnyError?: () => void;\n startIndex?: number | number[];\n keepGoingOnError?: boolean;\n}\n\nexport const useDownloader = () => {\n const [isError, setIsError] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n\n\n /**\n * 파일 다운로드 헬퍼 함수\n */\n const downloadFile = async (url: string, fileName?: string) => {\n try {\n let downloadUrl = '';\n\n if (url.startsWith('http')) {\n //url type : http, https\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`Failed to download ${url}`);\n }\n const blob = await response.blob();\n downloadUrl = window.URL.createObjectURL(blob);\n } else if (url.startsWith('blob')) {\n //url type : blob\n downloadUrl = url;\n } else {\n //unknown type\n throw new Error(`unknown type : ${url}`);\n }\n\n\n const a = document.createElement('a');\n a.href = downloadUrl;\n a.download = fileName || url.split('/').pop() || 'download';\n document.body.appendChild(a);\n a.click();\n a.remove();\n window.URL.revokeObjectURL(downloadUrl);\n } catch (e) {\n console.error(e);\n throw e;\n }\n };\n\n /**\n * @description downloadTargetInfo 배열에 있는 정보를 루프를 돌면서 순차적으로 다운로드 받습니다.\n * 설정에 따라,\n * 실패하는 경우는 중단 또는 스킵하고,\n * 실패한 인덱스번호 또는 인덱스번호배열을 리턴한다.\n * @returns number[] | number\n * 실패한 인덱스번호 또는 인덱스번호배열 \n */\n const onClick = async (downloaderProps: DownloaderProps) => {\n const { downloadTargetInfo, onAllSuccess, onAnyError, startIndex = 0 } = downloaderProps;\n setIsLoading(true);\n setIsError(false);\n\n const failedIndex: number[] = [];\n const targetIndices: number[] = [];\n\n if (typeof startIndex === 'number') {\n for (let i = startIndex; i < downloadTargetInfo.length; i++) {\n targetIndices.push(i);\n }\n } else if (Array.isArray(startIndex)) {\n for (let i = 0; i < downloadTargetInfo.length; i++) {\n if (startIndex.includes(i)) {\n targetIndices.push(i);\n }\n }\n }\n\n for (const i of targetIndices) {\n const info = downloadTargetInfo[i];\n if (!info) {\n continue;\n }\n\n try {\n let url: string;\n if (typeof info.downloadTarget === 'function') {\n url = await info.downloadTarget();\n } else {\n url = info.downloadTarget;\n }\n\n if (!url) {\n throw new Error('Download URL is empty');\n }\n\n await downloadFile(url, info.fileName);\n info.onSuccess?.();\n } catch (error) {\n console.error(`Download failed at index ${i}`, error);\n info.onError?.();\n onAnyError?.();\n setIsError(true);\n\n failedIndex.push(i);\n\n if (downloaderProps.keepGoingOnError) {\n continue;\n }\n\n break; // Stop on error\n }\n }\n\n if (failedIndex.length === 0) {\n onAllSuccess?.();\n }\n\n setIsLoading(false);\n\n return failedIndex.length === 1 ? failedIndex[0] : failedIndex;\n };\n\n return {\n onClick,\n isLoading,\n isError\n };\n};\n","\n\nexport function GaIframe() {\n console.log('GaIframe');\n\n return <noscript><iframe src=\"https://www.googletagmanager.com/ns.html?id=GTM-PPT3LJ56\" height=\"0\" width=\"0\" style={{ display: 'none', visibility: 'hidden' }}></iframe></noscript>;\n\n}"],"names":["this","_MessageEventManager","cx","InputBox","Input","styles","chunk","filterList","nxlOnePropsState","TextField","rivsRequestId"],"mappings":"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AAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,C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","x_google_ignoreList":[2,3,7]}
|