sales-frontend-debug 0.0.65 โ 0.0.66
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 +4 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/styles/styles.ts","../src/components/floating-button.tsx","../src/features/change-host/index.tsx","../src/features/filter/index.tsx","../src/features/form-factor/index.tsx","../src/features/init-refresh/index.tsx","../src/components/menu-panel.tsx","../src/debug-utils.ts","../src/features/console-log/use-console-log.ts","../src/features/console-log/console-log-panel.tsx","../src/features/login-dsp/login-panel.tsx","../src/features/network-log/index.tsx","../src/features/page-navigation/page-navigation-panel.tsx","../src/features/script-executor/script-executor-panel.tsx","../src/features/storage/use-storage.ts","../src/features/storage/storage-panel.tsx","../src/config.tsx","../src/hooks/use-environment.ts","../src/debug-tool.tsx","../src/interceptor-function.ts"],"names":["React","useEffect","filterName","getCookie","setCookie","deleteCookie","menuItems","useState","useRef","useMemo","logTypeStyles","safeStringify","useCallback","MAX_LOGS","isClient","getEnvironmentFromHostname","useDebugStore"],"mappings":";;;;;;;;AAIO,IAAM,wBAAgD,GAAA;AAAA,EAC3D,QAAU,EAAA,OAAA;AAAA,EACV,KAAO,EAAA,MAAA;AAAA,EACP,MAAQ,EAAA,MAAA;AAAA,EACR,YAAc,EAAA,KAAA;AAAA,EACd,eAAiB,EAAA,SAAA;AAAA,EACjB,MAAQ,EAAA,gBAAA;AAAA,EACR,OAAS,EAAA,UAAA;AAAA,EACT,UAAY,EAAA,MAAA;AAAA,EACZ,MAAQ,EAAA;AACV,CAAA;AAEO,IAAM,mBAA2C,GAAA;AAAA,EACtD,QAAU,EAAA,OAAA;AAAA,EACV,KAAO,EAAA,MAAA;AAAA,EACP,MAAQ,EAAA,MAAA;AAAA,EACR,OAAS,EAAA,MAAA;AAAA,EACT,aAAe,EAAA,QAAA;AAAA,EACf,SAAW,EAAA,OAAA;AAAA,EACX,eAAiB,EAAA,SAAA;AAAA,EACjB,MAAQ,EAAA,mBAAA;AAAA,EACR,YAAc,EAAA,KAAA;AAAA,EACd,SAAW,EAAA,8BAAA;AAAA,EACX,MAAQ,EAAA,GAAA;AAAA,EACR,SAAW,EAAA;AACb,CAAA;AAEO,IAAM,gBAAwC,GAAA;AAAA,EACnD,OAAS,EAAA,MAAA;AAAA,EACT,UAAY,EAAA,QAAA;AAAA,EACZ,cAAgB,EAAA,eAAA;AAAA,EAChB,OAAS,EAAA,WAAA;AAAA,EACT,eAAiB,EAAA,SAAA;AAAA,EACjB,YAAc,EAAA,mBAAA;AAAA,EACd,UAAY,EAAA;AACd,CAAA;AAEO,IAAM,OAA+B,GAAA;AAAA,EAC1C,MAAQ,EAAA,CAAA;AAAA,EACR,QAAU,EAAA;AACZ,CAAA;AAEO,IAAM,iBAAyC,GAAA;AAAA,EACpD,QAAU,EAAA,OAAA;AAAA,EACV,GAAK,EAAA,CAAA;AAAA,EACL,IAAM,EAAA,CAAA;AAAA,EACN,KAAO,EAAA,MAAA;AAAA,EACP,MAAQ,EAAA,MAAA;AAAA,EACR,eAAiB,EAAA,oBAAA;AAAA,EACjB,MAAQ,EAAA;AACV,CAAA;AAEO,IAAM,sBAA8C,GAAA;AAAA,EACzD,MAAQ,EAAA,MAAA;AAAA,EACR,QAAU,EAAA,OAAA;AAAA,EACV,GAAK,EAAA,CAAA;AAAA,EACL,IAAM,EAAA,CAAA;AAAA,EACN,KAAO,EAAA,mBAAA;AAAA,EACP,MAAQ,EAAA,mBAAA;AAAA,EACR,eAAiB,EAAA,SAAA;AAAA,EACjB,MAAQ,EAAA,KAAA;AAAA,EACR,OAAS,EAAA,MAAA;AAAA,EACT,aAAe,EAAA;AACjB,CAAA;AAEO,IAAM,iBAAyC,GAAA;AAAA,EACpD,OAAS,EAAA,MAAA;AAAA,EACT,UAAY,EAAA,QAAA;AAAA,EACZ,OAAS,EAAA,MAAA;AAAA,EACT,YAAc,EAAA,mBAAA;AAAA,EACd,GAAK,EAAA,KAAA;AAAA,EACL,UAAY,EAAA;AACd,CAAA;AAEO,IAAM,qBAA6C,GAAA;AAAA,EACxD,IAAM,EAAA,CAAA;AAAA,EACN,OAAS,EAAA,MAAA;AAAA,EACT,SAAW,EAAA,MAAA;AAAA,EACX,UAAY,EAAA,WAAA;AAAA,EACZ,QAAU,EAAA,MAAA;AAAA,EACV,eAAiB,EAAA;AACnB,CAAA;AAEO,IAAM,YAAoC,GAAA;AAAA,EAC/C,OAAS,EAAA,MAAA;AAAA,EACT,UAAY,EAAA,YAAA;AAAA,EACZ,OAAS,EAAA,OAAA;AAAA,EACT,YAAc,EAAA;AAChB,CAAA;AAEO,IAAM,iBAAyC,GAAA;AAAA,EACpD,WAAa,EAAA,MAAA;AAAA,EACb,KAAO,EAAA;AACT,CAAA;AAEO,IAAM,eAAuC,GAAA;AAAA,EAClD,MAAQ,EAAA,CAAA;AAAA,EACR,SAAW,EAAA,WAAA;AAAA,EACX,UAAY,EAAA;AACd,CAAA;AAEO,IAAM,aAAsE,GAAA;AAAA,EACjF,GAAA,EAAK,EAAE,KAAA,EAAO,SAAU,EAAA;AAAA,EACxB,IAAA,EAAM,EAAE,KAAA,EAAO,SAAU,EAAA;AAAA,EACzB,IAAA,EAAM,EAAE,KAAA,EAAO,SAAU,EAAA;AAAA,EACzB,KAAA,EAAO,EAAE,KAAA,EAAO,SAAU,EAAA;AAAA,EAC1B,KAAA,EAAO,EAAE,KAAA,EAAO,SAAU,EAAA;AAAA,EAC1B,MAAA,EAAQ,EAAE,KAAA,EAAO,SAAU;AAC7B,CAAA;AAEO,IAAM,uBAA+C,GAAA;AAAA,EAC1D,OAAS,EAAA,MAAA;AAAA,EACT,IAAM,EAAA,CAAA;AAAA,EACN,aAAe,EAAA,QAAA;AAAA,EACf,GAAK,EAAA,MAAA;AAAA,EACL,OAAS,EAAA,MAAA;AAAA,EACT,SAAW,EAAA;AACb,CAAA;AAEO,IAAM,gBAAwC,GAAA;AAAA,EACnD,OAAS,EAAA,MAAA;AAAA,EACT,cAAgB,EAAA,YAAA;AAAA,EAChB,SAAW,EAAA;AACb,CAAA;AAEO,IAAM,oBAA4C,GAAA;AAAA,EACvD,OAAS,EAAA,MAAA;AAAA,EACT,GAAK,EAAA,KAAA;AAAA,EACL,YAAc,EAAA,MAAA;AAAA,EACd,UAAY,EAAA;AACd,CAAA;AAEO,IAAM,YAAoC,GAAA;AAAA,EAC/C,SAAW,EAAA;AACb,CAAA;AAEO,IAAM,eAAuC,GAAA;AAAA,EAClD,SAAW,EAAA,WAAA;AAAA,EACX,MAAQ,EAAA,CAAA;AAAA,EACR,MAAQ,EAAA;AACV,CAAA;AAEO,IAAM,eAAuC,GAAA;AAAA,EAClD,OAAS,EAAA,KAAA;AAAA,EACT,SAAW,EAAA,WAAA;AAAA,EACX,UAAY,EAAA,UAAA;AAAA,EACZ,eAAiB,EAAA,SAAA;AAAA,EACjB,YAAc,EAAA;AAChB,CAAA;AAEO,IAAM,0BAAkD,GAAA;AAAA,EAC7D,OAAS,EAAA,MAAA;AAAA,EACT,aAAe,EAAA,QAAA;AAAA,EACf,GAAK,EAAA,MAAA;AAAA,EACL,OAAS,EAAA;AACX,CAAA;AAEO,IAAM,OAA+B,GAAA;AAAA,EAC1C,MAAQ,EAAA,CAAA;AAAA,EACR,QAAU,EAAA;AACZ,CAAA;AAEO,IAAM,0BAAkD,GAAA;AAAA,EAC7D,OAAS,EAAA,MAAA;AAAA,EACT,IAAM,EAAA,CAAA;AAAA,EACN,aAAe,EAAA,QAAA;AAAA,EACf,QAAU,EAAA;AACZ,CAAA;AAEO,IAAM,uBAA+C,GAAA;AAAA,EAC1D,OAAS,EAAA,MAAA;AAAA,EACT,IAAM,EAAA,CAAA;AAAA,EACN,aAAe,EAAA,QAAA;AAAA,EACf,SAAW,EAAA,OAAA;AAAA,EACX,YAAc,EAAA;AAChB,CAAA;AAEO,IAAM,mBAA2C,GAAA;AAAA,EACtD,IAAM,EAAA,CAAA;AAAA,EACN,KAAO,EAAA,MAAA;AAAA,EACP,OAAS,EAAA,MAAA;AAAA,EACT,UAAY,EAAA,WAAA;AAAA,EACZ,QAAU,EAAA,MAAA;AAAA,EACV,MAAQ,EAAA,MAAA;AAAA,EACR,OAAS,EAAA,MAAA;AAAA,EACT,MAAQ,EAAA;AACV,CAAA;AAEO,IAAM,kBAA0C,GAAA;AAAA,EACrD,OAAS,EAAA,MAAA;AAAA,EACT,cAAgB,EAAA,UAAA;AAAA,EAChB,GAAK,EAAA,KAAA;AAAA,EACL,OAAS,EAAA,KAAA;AAAA,EACT,SAAW,EAAA;AACb,CAAA;AAEO,IAAM,wBAAgD,GAAA;AAAA,EAC3D,OAAS,EAAA,MAAA;AAAA,EACT,IAAM,EAAA,CAAA;AAAA,EACN,aAAe,EAAA,QAAA;AAAA,EACf,QAAU,EAAA;AACZ,CAAA;AAEO,IAAM,uBAA+C,GAAA;AAAA,EAC1D,KAAO,EAAA,MAAA;AAAA,EACP,OAAS,EAAA,KAAA;AAAA,EACT,MAAQ,EAAA,gBAAA;AAAA,EACR,YAAc,EAAA;AAChB,CAAA;AAEO,IAAM,0BAAkD,GAAA;AAAA,EAC7D,IAAM,EAAA,CAAA;AAAA,EACN,SAAW,EAAA,MAAA;AAAA,EACX,OAAS,EAAA;AACX,CAAA;AAEO,IAAM,aAAqC,GAAA;AAAA,EAChD,MAAQ,EAAA,SAAA;AAAA,EACR,OAAS,EAAA;AACX,CAAA;AAEO,IAAM,gBAAwC,GAAA;AAAA,EACnD,UAAY,EAAA;AACd,CAAA;AAEO,IAAM,wBAAgD,GAAA;AAAA,EAC3D,OAAS,EAAA,MAAA;AAAA,EACT,OAAS,EAAA,MAAA;AAAA,EACT,aAAe,EAAA,QAAA;AAAA,EACf,IAAM,EAAA,CAAA;AAAA,EACN,QAAU,EAAA;AACZ,CAAA;AAEO,IAAM,UAAkC,GAAA;AAAA,EAC7C,IAAM,EAAA;AACR,CAAA;AAEO,IAAM,yBAAiD,GAAA;AAAA,EAC5D,OAAS,EAAA,MAAA;AAAA,EACT,aAAe,EAAA,KAAA;AAAA,EACf,GAAK,EAAA,KAAA;AAAA,EACL,YAAc,EAAA;AAChB,CAAA;AAEO,IAAM,aAAqC,GAAA;AAAA,EAChD,KAAO,EAAA,MAAA;AAAA,EACP,SAAW,EAAA;AACb,CAAA;;;AC7OA,IAAM,cAAgD,GAAA,CAAC,EAAE,OAAA,EAAc,KAAA;AACrE,EAAM,MAAA,CAAC,QAAU,EAAA,WAAW,CAAI,GAAA,QAAA,CAAS,EAAE,CAAG,EAAA,CAAA,EAAG,CAAG,EAAA,CAAA,EAAG,CAAA;AACvD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,KAAK,CAAA;AAGhD,EAAM,MAAA,WAAA,GAAc,OAAe,CAAC,CAAA;AACpC,EAAM,MAAA,cAAA,GAAiB,OAA8B,IAAI,CAAA;AACzD,EAAM,MAAA,eAAA,GAAkB,OAAwC,IAAI,CAAA;AAEpE,EAAM,MAAA,YAAA,GAAe,OAAO,KAAK,CAAA;AACjC,EAAA,MAAM,eAAe,MAAO,CAAA,EAAE,GAAG,CAAG,EAAA,CAAA,EAAG,GAAG,CAAA;AAC1C,EAAA,MAAM,kBAAkB,MAAO,CAAA,EAAE,GAAG,CAAG,EAAA,CAAA,EAAG,GAAG,CAAA;AAG7C,EAAM,MAAA,UAAA,GAAa,OAAO,CAAC,CAAA;AAC3B,EAAM,MAAA,YAAA,GAAe,OAA8B,IAAI,CAAA;AAGvD,EAAA,SAAA,CAAU,MAAM;AACd,IAAM,MAAA,qBAAA,GAAwB,CAAC,CAAkB,KAAA;AAC/C,MAAA,eAAA,CAAgB,UAAU,EAAE,CAAA,EAAG,EAAE,OAAS,EAAA,CAAA,EAAG,EAAE,OAAQ,EAAA;AAAA,KACzD;AAEA,IAAM,MAAA,mBAAA,GAAsB,CAAC,CAAkB,KAAA;AAC7C,MAAI,IAAA,CAAC,gBAAgB,OAAS,EAAA;AAC5B,QAAA;AAAA;AAGF,MAAA,MAAM,EAAK,GAAA,CAAA,CAAE,OAAU,GAAA,eAAA,CAAgB,OAAQ,CAAA,CAAA;AAC/C,MAAA,MAAM,EAAK,GAAA,CAAA,CAAE,OAAU,GAAA,eAAA,CAAgB,OAAQ,CAAA,CAAA;AAC/C,MAAM,MAAA,KAAA,GAAQ,IAAK,CAAA,GAAA,CAAI,EAAE,CAAA;AACzB,MAAM,MAAA,KAAA,GAAQ,IAAK,CAAA,GAAA,CAAI,EAAE,CAAA;AAGzB,MAAA,MAAM,SAAY,GAAA,GAAA;AAGlB,MAAI,IAAA,EAAA,GAAK,SAAa,IAAA,KAAA,GAAQ,KAAO,EAAA;AACnC,QAAI,IAAA,WAAA,CAAY,YAAY,CAAG,EAAA;AAC7B,UAAA,WAAA,CAAY,OAAU,GAAA,CAAA;AAEtB,UAAA,IAAI,eAAe,OAAS,EAAA;AAC1B,YAAA,YAAA,CAAa,eAAe,OAAO,CAAA;AAAA;AAErC,UAAe,cAAA,CAAA,OAAA,GAAU,WAAW,MAAM;AACxC,YAAA,WAAA,CAAY,OAAU,GAAA,CAAA;AAAA,aACrB,GAAI,CAAA;AAAA;AACT,OACS,MAAA,IAAA,EAAA,GAAK,SAAa,IAAA,KAAA,GAAQ,KAAO,EAAA;AAE1C,QAAI,IAAA,WAAA,CAAY,YAAY,CAAG,EAAA;AAC7B,UAAa,YAAA,CAAA,CAAC,IAAS,KAAA,CAAC,IAAI,CAAA;AAC5B,UAAA,WAAA,CAAY,OAAU,GAAA,CAAA;AACtB,UAAA,IAAI,eAAe,OAAS,EAAA;AAC1B,YAAA,YAAA,CAAa,eAAe,OAAO,CAAA;AAAA;AACrC,SACK,MAAA;AAEL,UAAA,WAAA,CAAY,OAAU,GAAA,CAAA;AAAA;AACxB,OACK,MAAA;AAKP,MAAA,eAAA,CAAgB,OAAU,GAAA,IAAA;AAAA,KAC5B;AAEA,IAAO,MAAA,CAAA,gBAAA,CAAiB,aAAa,qBAAqB,CAAA;AAC1D,IAAO,MAAA,CAAA,gBAAA,CAAiB,WAAW,mBAAmB,CAAA;AAEtD,IAAA,OAAO,MAAM;AACX,MAAO,MAAA,CAAA,mBAAA,CAAoB,aAAa,qBAAqB,CAAA;AAC7D,MAAO,MAAA,CAAA,mBAAA,CAAoB,WAAW,mBAAmB,CAAA;AACzD,MAAA,IAAI,eAAe,OAAS,EAAA;AAC1B,QAAA,YAAA,CAAa,eAAe,OAAO,CAAA;AAAA;AACrC,KACF;AAAA,GACF,EAAG,EAAE,CAAA;AAGL,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,oBAAoB,MAAM;AAC9B,MAAA,UAAA,CAAW,OAAW,IAAA,CAAA;AAEtB,MAAI,IAAA,UAAA,CAAW,YAAY,CAAG,EAAA;AAC5B,QAAa,YAAA,CAAA,OAAA,GAAU,WAAW,MAAM;AACtC,UAAA,UAAA,CAAW,OAAU,GAAA,CAAA;AAAA,WACpB,GAAI,CAAA;AAAA;AAGT,MAAI,IAAA,UAAA,CAAW,WAAW,EAAI,EAAA;AAC5B,QAAa,YAAA,CAAA,CAAC,IAAS,KAAA,CAAC,IAAI,CAAA;AAC5B,QAAA,UAAA,CAAW,OAAU,GAAA,CAAA;AACrB,QAAA,IAAI,aAAa,OAAS,EAAA;AACxB,UAAA,YAAA,CAAa,aAAa,OAAO,CAAA;AAAA;AACnC;AACF,KACF;AAEA,IAAO,MAAA,CAAA,gBAAA,CAAiB,SAAS,iBAAiB,CAAA;AAElD,IAAA,OAAO,MAAM;AACX,MAAO,MAAA,CAAA,mBAAA,CAAoB,SAAS,iBAAiB,CAAA;AACrD,MAAA,IAAI,aAAa,OAAS,EAAA;AACxB,QAAA,YAAA,CAAa,aAAa,OAAO,CAAA;AAAA;AACnC,KACF;AAAA,GACF,EAAG,EAAE,CAAA;AAEL,EAAM,MAAA,eAAA,GAAkB,CAAC,CAA2C,KAAA;AAClE,IAAI,IAAA,CAAA,CAAE,WAAW,CAAG,EAAA;AAClB,MAAA;AAAA;AAEF,IAAA,YAAA,CAAa,OAAU,GAAA,KAAA;AACvB,IAAA,aAAA,CAAc,IAAI,CAAA;AAClB,IAAA,YAAA,CAAa,UAAU,EAAE,CAAA,EAAG,EAAE,OAAS,EAAA,CAAA,EAAG,EAAE,OAAQ,EAAA;AACpD,IAAgB,eAAA,CAAA,OAAA,GAAU,EAAE,GAAG,QAAS,EAAA;AAExC,IAAM,MAAA,eAAA,GAAkB,CAAC,KAAsB,KAAA;AAC7C,MAAA,MAAM,EAAK,GAAA,KAAA,CAAM,OAAU,GAAA,YAAA,CAAa,OAAQ,CAAA,CAAA;AAChD,MAAA,MAAM,EAAK,GAAA,KAAA,CAAM,OAAU,GAAA,YAAA,CAAa,OAAQ,CAAA,CAAA;AAEhD,MAAA,IAAI,CAAC,YAAA,CAAa,OAAY,KAAA,IAAA,CAAK,GAAI,CAAA,EAAE,CAAI,GAAA,CAAA,IAAK,IAAK,CAAA,GAAA,CAAI,EAAE,CAAA,GAAI,CAAI,CAAA,EAAA;AACnE,QAAA,YAAA,CAAa,OAAU,GAAA,IAAA;AAAA;AAGzB,MAAY,WAAA,CAAA;AAAA,QACV,CAAA,EAAG,eAAgB,CAAA,OAAA,CAAQ,CAAI,GAAA,EAAA;AAAA,QAC/B,CAAA,EAAG,eAAgB,CAAA,OAAA,CAAQ,CAAI,GAAA;AAAA,OAChC,CAAA;AAAA,KACH;AAEA,IAAA,MAAM,gBAAgB,MAAM;AAC1B,MAAO,MAAA,CAAA,mBAAA,CAAoB,aAAa,eAAe,CAAA;AACvD,MAAO,MAAA,CAAA,mBAAA,CAAoB,WAAW,aAAa,CAAA;AACnD,MAAA,aAAA,CAAc,KAAK,CAAA;AAAA,KACrB;AAEA,IAAO,MAAA,CAAA,gBAAA,CAAiB,aAAa,eAAe,CAAA;AACpD,IAAO,MAAA,CAAA,gBAAA,CAAiB,WAAW,aAAa,CAAA;AAAA,GAClD;AAEA,EAAM,MAAA,WAAA,GAAc,CAAC,CAA2C,KAAA;AAC9D,IAAA,IAAI,aAAa,OAAS,EAAA;AACxB,MAAA,CAAA,CAAE,cAAe,EAAA;AACjB,MAAA,CAAA,CAAE,eAAgB,EAAA;AAElB,MAAA;AAAA;AAEF,IAAQ,OAAA,EAAA;AAAA,GACV;AAEA,EAAA,MAAM,WAAmC,GAAA;AAAA,IACvC,GAAG,wBAAA;AAAA,IACH,WAAW,CAAa,UAAA,EAAA,QAAA,CAAS,CAAC,CAAA,IAAA,EAAO,SAAS,CAAC,CAAA,GAAA,CAAA;AAAA,IACnD,MAAA,EAAQ,aAAa,UAAa,GAAA,MAAA;AAAA,IAClC,OAAA,EAAS,YAAY,MAAS,GAAA;AAAA;AAAA,GAChC;AAEA,EACE,uBAAAA,MAAA,CAAA,aAAA,CAAC,YAAO,KAAO,EAAA,WAAA,EAAa,aAAa,eAAiB,EAAA,OAAA,EAAS,eAAa,OAEhF,CAAA;AAEJ,CAAA;AAEA,IAAO,uBAAQ,GAAA,cAAA;AChLR,SAAS,UAAa,GAAA;AAC3B,EAAM,MAAA,UAAA,GAAa,CAAC,IAA0C,KAAA;AAC5D,IAAA,SAAA,CAAU,sBAAsB,IAAI,CAAA;AACpC,IAAM,KAAA,CAAA,CAAA,qEAAA,EAAsB,IAAI,CAAE,CAAA,CAAA;AAClC,IAAA,OAAA,CAAQ,IAAI,sEAAiB,EAAA;AAAA,MAC3B,oBAAA,EAAsB,UAAU,oBAAoB;AAAA,KACrD,CAAA;AAAA,GACH;AAEA,EAAA,uBACEA,MAAAA,CAAA,aAAAA,CAAAA,MAAAA,CAAA,QACE,EAAA,IAAA,kBAAAA,MAAA,CAAA,aAAA,CAAC,KAAI,EAAA,EAAA,KAAA,EAAO,gBACV,EAAA,kBAAAA,MAAA,CAAA,aAAA,CAAC,IAAG,EAAA,EAAA,KAAA,EAAO,OAAS,EAAA,EAAA,uBAAM,CAC5B,CAAA,kBACAA,MAAAA,CAAA,aAAC,CAAA,IAAA,EAAA,IAAA,kBACCA,MAAAA,CAAA,aAAC,CAAA,IAAA,EAAA,EAAG,OAAO,aAAe,EAAA,OAAA,EAAS,MAAM,UAAA,CAAW,OAAO,CAAA,EAAA,EAAG,OAE9D,CAAA,kBACAA,MAAAA,CAAA,aAAC,CAAA,IAAA,EAAA,EAAG,KAAO,EAAA,aAAA,EAAe,OAAS,EAAA,MAAM,WAAW,KAAK,CAAA,EAAA,EAAG,KAE5D,CAAA,kBACAA,MAAAA,CAAA,aAAC,CAAA,IAAA,EAAA,EAAG,KAAO,EAAA,aAAA,EAAe,OAAS,EAAA,MAAM,UAAW,CAAA,KAAK,CAAG,EAAA,EAAA,KAE5D,CAIF,CACF,CAAA;AAEJ;AC9BO,IAAM,mBAAsB,GAAA,4BAAA;AAanC,IAAM,UAA2B,GAAA;AAAA,EAC/B;AAAA,IACE,GAAK,EAAA,YAAA;AAAA,IACL,WAAa,EAAA;AAAA,GACf;AAAA,EACA;AAAA,IACE,GAAK,EAAA,aAAA;AAAA,IACL,WAAa,EAAA;AAAA,GACf;AAAA,EACA;AAAA,IACE,GAAK,EAAA,YAAA;AAAA,IACL,WAAa,EAAA;AAAA,GACf;AAAA,EACA;AAAA,IACE,GAAK,EAAA,gBAAA;AAAA,IACL,WAAa,EAAA;AAAA,GACf;AAAA,EACA;AAAA,IACE,GAAK,EAAA,UAAA;AAAA,IACL,WAAa,EAAA;AAAA,GACf;AAAA,EACA;AAAA,IACE,GAAK,EAAA,kBAAA;AAAA,IACL,WAAa,EAAA;AAAA;AAEjB,CAAA;AAEO,SAAS,MAAS,GAAA;AACvB,EAAA,MAAM,CAAC,UAAY,EAAA,aAAa,CAAIA,GAAAA,MAAAA,CAAM,SAAS,EAAE,CAAA;AAErD,EAAAC,UAAU,MAAM;AACd,IAAMC,MAAAA,WAAAA,GAAaC,UAAU,mBAAmB,CAAA;AAChD,IAAA,aAAA,CAAcD,WAAU,CAAA;AAAA,GAC1B,EAAG,EAAE,CAAA;AAEL,EAAA,uBACEF,MAAA,CAAA,aAAA,CAAAA,MAAA,CAAA,QAAA,EAAA,IAAA,kBACEA,MAAA,CAAA,aAAA,CAAC,KAAI,EAAA,EAAA,KAAA,EAAO,oCACVA,MAAAA,CAAA,cAAC,IAAG,EAAA,EAAA,KAAA,EAAO,WAAS,iCAAM,CAC5B,CACA,kBAAAA,OAAA,aAAC,CAAA,IAAA,EAAA,IAAA,EAEE,UAAW,CAAA,GAAA,CAAI,CAAC,MACf,qBAAAA,MAAA,CAAA,aAAA,CAAC,QAAG,KAAO,EAAA,aAAA,EAAe,KAAK,MAAO,CAAA,GAAA,EAAA,kBACpCA,MAAA,CAAA,aAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,IAAK,EAAA,UAAA;AAAA,MACL,OAAS,EAAA,UAAA,CAAW,QAAS,CAAA,MAAA,CAAO,GAAG,CAAA;AAAA,MACvC,QAAA,EAAU,CAAC,CAAM,KAAA;AACf,QAAI,IAAA,CAAA,CAAE,OAAO,OAAS,EAAA;AAEpB,UAAA,aAAA,CAAc,CAAC,IAAS,KAAA;AACtB,YAAA,IAAI,IAAM,EAAA;AACR,cAAA,MAAM,aAAgB,GAAA,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,OAAO,GAAG,CAAA,CAAA;AAC3C,cAAAI,SAAAA,CAAU,qBAAqB,aAAa,CAAA;AAE5C,cAAO,OAAA,aAAA;AAAA,aACF,MAAA;AACL,cAAAA,SAAAA,CAAU,mBAAqB,EAAA,MAAA,CAAO,GAAG,CAAA;AAEzC,cAAA,OAAO,MAAO,CAAA,GAAA;AAAA;AAChB,WACD,CAAA;AAAA,SACI,MAAA;AAEL,UAAA,aAAA,CAAc,CAAC,IAAS,KAAA;AAEtB,YAAI,IAAA,IAAA,CAAK,QAAS,CAAA,GAAG,CAAG,EAAA;AAEtB,cAAM,MAAA,GAAA,GAAM,IAAK,CAAA,KAAA,CAAM,GAAG,CAAA;AAE1B,cAAM,MAAA,aAAA,GAAgB,GAAI,CAAA,MAAA,CAAO,CAAC,IAAA,KAAS,SAAS,MAAO,CAAA,GAAG,CAAE,CAAA,IAAA,CAAK,GAAG,CAAA;AACxE,cAAAA,SAAAA,CAAU,qBAAqB,aAAa,CAAA;AAE5C,cAAO,OAAA,aAAA;AAAA,aACF,MAAA;AACL,cAAAC,cAAA,CAAa,mBAAmB,CAAA;AAEhC,cAAO,OAAA,EAAA;AAAA;AACT,WACD,CAAA;AAAA;AACH;AACF;AAAA,GAED,EAAA,MAAA,CAAO,GACV,CACD,CACH,CACF,CAAA;AAEJ;ACtGO,SAAS,UAAa,GAAA;AAC3B,EAAM,MAAA,gBAAA,GAAmB,CAAC,UAAuB,KAAA;AAC/C,IAAAD,SAAAA,CAAU,wBAAwB,UAAU,CAAA;AAC5C,IAAM,KAAA,CAAA,CAAA,qEAAA,EAAsB,UAAU,CAAE,CAAA,CAAA;AACxC,IAAA,OAAA,CAAQ,IAAI,sEAAiB,EAAA;AAAA,MAC3B,sBAAA,EAAwBD,UAAU,sBAAsB;AAAA,KACzD,CAAA;AAAA,GACH;AAEA,EAAA,uBACEH,MAAAA,CAAA,aAAAA,CAAAA,MAAAA,CAAA,QACE,EAAA,IAAA,kBAAAA,MAAA,CAAA,aAAA,CAAC,KAAI,EAAA,EAAA,KAAA,EAAO,gBACV,EAAA,kBAAAA,MAAA,CAAA,aAAA,CAAC,IAAG,EAAA,EAAA,KAAA,EAAO,OAAS,EAAA,EAAA,oBAAG,CACzB,CAAA,kBACAA,MAAAA,CAAA,aAAC,CAAA,IAAA,EAAA,IAAA,kBACCA,MAAAA,CAAA,aAAC,CAAA,IAAA,EAAA,EAAG,OAAO,aAAe,EAAA,OAAA,EAAS,MAAM,gBAAA,CAAiB,QAAQ,CAAA,EAAA,EAAG,QAErE,CAAA,kBACAA,MAAAA,CAAA,aAAC,CAAA,IAAA,EAAA,EAAG,KAAO,EAAA,aAAA,EAAe,OAAS,EAAA,MAAM,iBAAiB,OAAO,CAAA,EAAA,EAAG,OAEpE,CAAA,kBACAA,MAAAA,CAAA,aAAC,CAAA,IAAA,EAAA,EAAG,KAAO,EAAA,aAAA,EAAe,OAAS,EAAA,MAAM,gBAAiB,CAAA,IAAI,CAAG,EAAA,EAAA,IAEjE,CACF,CACF,CAAA;AAEJ;AC3BO,SAAS,WAAc,GAAA;AAC5B,EAAA,MAAM,yBAAyB,MAAM;AACnC,IAAAK,eAAa,oBAAoB,CAAA;AACjC,IAAA,KAAA,CAAM,sEAAe,CAAA;AACrB,IAAA,OAAA,CAAQ,IAAI,sEAAiB,EAAA;AAAA,MAC3B,oBAAA,EAAsBF,UAAU,oBAAoB;AAAA,KACrD,CAAA;AAAA,GACH;AAEA,EAAA,MAAM,0BAA0B,MAAM;AACpC,IAAAE,eAAa,aAAa,CAAA;AAC1B,IAAA,KAAA,CAAM,4EAAgB,CAAA;AACtB,IAAA,OAAA,CAAQ,IAAI,4EAAkB,EAAA;AAAA,MAC5B,WAAA,EAAaF,UAAU,aAAa;AAAA,KACrC,CAAA;AAAA,GACH;AACA,EAAA,MAAM,2BAA2B,MAAM;AACrC,IAAAE,eAAa,sBAAsB,CAAA;AACnC,IAAAA,eAAa,oBAAoB,CAAA;AACjC,IAAAA,eAAa,uBAAuB,CAAA;AACpC,IAAAA,eAAa,sBAAsB,CAAA;AACnC,IAAAA,eAAa,wBAAwB,CAAA;AACrC,IAAAA,eAAa,qBAAqB,CAAA;AAClC,IAAAA,eAAa,wBAAwB,CAAA;AACrC,IAAAA,eAAa,2BAA2B,CAAA;AACxC,IAAAA,eAAa,oBAAoB,CAAA;AACjC,IAAAA,eAAa,uCAAuC,CAAA;AACpD,IAAA,KAAA,CAAM,kFAAiB,CAAA;AACvB,IAAA,OAAA,CAAQ,IAAI,kFAAmB,EAAA;AAAA,MAC7B,sBAAA,EAAwBF,UAAU,sBAAsB,CAAA;AAAA,MACxD,oBAAA,EAAsBA,UAAU,oBAAoB,CAAA;AAAA,MACpD,uBAAA,EAAyBA,UAAU,uBAAuB,CAAA;AAAA,MAC1D,sBAAA,EAAwBA,UAAU,sBAAsB,CAAA;AAAA,MACxD,wBAAA,EAA0BA,UAAU,wBAAwB,CAAA;AAAA,MAC5D,qBAAA,EAAuBA,UAAU,qBAAqB,CAAA;AAAA,MACtD,wBAAA,EAA0BA,UAAU,wBAAwB,CAAA;AAAA,MAC5D,2BAAA,EAA6BA,UAAU,2BAA2B,CAAA;AAAA,MAClE,oBAAA,EAAsBA,UAAU,oBAAoB,CAAA;AAAA,MACpD,uCAAA,EAAyCA,UAAU,uCAAuC;AAAA,KAC3F,CAAA;AAAA,GACH;AAEA,EAAA,uBACEH,MAAAA,CAAA,aAAAA,CAAAA,MAAAA,CAAA,QACE,EAAA,IAAA,kBAAAA,MAAA,CAAA,aAAA,CAAC,KAAI,EAAA,EAAA,KAAA,EAAO,gBACV,EAAA,kBAAAA,OAAA,aAAC,CAAA,IAAA,EAAA,EAAG,KAAO,EAAA,OAAA,EAAA,EAAS,oBAAG,CACzB,CACA,kBAAAA,OAAA,aAAC,CAAA,IAAA,EAAA,IAAA,kBACCA,MAAAA,CAAA,aAAC,CAAA,IAAA,EAAA,EAAG,KAAO,EAAA,aAAA,EAAA,kBACTA,MAAA,CAAA,aAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,SAAS,MAAM;AACb,QAAA,MAAA,CAAO,SAAS,MAAO,EAAA;AAAA;AACzB,KAAA;AAAA,IACD;AAAA,GAGH,mBACAA,MAAAA,CAAA,cAAC,IAAG,EAAA,EAAA,KAAA,EAAO,iCACTA,MAAAA,CAAA,cAAC,QAAO,EAAA,EAAA,OAAA,EAAS,0BAAwB,mBAAO,CAClD,mBACAA,MAAAA,CAAA,aAAC,CAAA,IAAA,EAAA,EAAG,KAAO,EAAA,aAAA,EAAA,kBACTA,MAAA,CAAA,aAAA,CAAC,YAAO,OAAS,EAAA,wBAAA,EAAA,EAA0B,6CAAkB,CAC/D,CAAA,kBACAA,MAAAA,CAAA,aAAC,CAAA,IAAA,EAAA,EAAG,OAAO,aACT,EAAA,kBAAAA,OAAA,aAAC,CAAA,QAAA,EAAA,EAAO,SAAS,uBAAyB,EAAA,EAAA,2BAAK,CACjD,CACF,CACF,CAAA;AAEJ;;;ACnDA,IAAM,SAAA,GAAsC,CAAC,EAAE,SAAA,EAAAM,YAAW,eAAiB,EAAA,OAAA,EAAS,aAAkB,KAAA;AACpG,EACE,uBAAAN,OAAA,aAAAA,CAAAA,MAAAA,CAAA,gCACEA,MAAAA,CAAA,cAAC,KAAI,EAAA,EAAA,KAAA,EAAO,mBAAmB,OAAS,EAAA,OAAA,EAAS,mBACjDA,MAAAA,CAAA,cAAC,KAAI,EAAA,EAAA,KAAA,EAAO,mBACV,EAAA,kBAAAA,MAAA,CAAA,aAAA,CAAC,SAAI,KAAO,EAAA,gBAAA,EAAA,kBACVA,MAAA,CAAA,aAAA,CAAC,QAAG,KAAO,EAAA,OAAA,EAAA,EAAS,YAAU,CAAA,kBAC9BA,MAAAA,CAAA,cAAC,QAAO,EAAA,EAAA,OAAA,EAAS,WAAS,GAAC,CAC7B,mBACAA,MAAAA,CAAA,aAAC,CAAA,IAAA,EAAA,IAAA,EACEM,UAAU,CAAA,GAAA,CAAI,CAAC,IACd,qBAAAN,OAAA,aAAC,CAAA,IAAA,EAAA,EAAG,KAAK,IAAK,CAAA,EAAA,EAAI,OAAS,EAAA,MAAM,eAAgB,CAAA,IAAA,CAAK,SAAS,CAAG,EAAA,KAAA,EAAO,iBACtE,IAAK,CAAA,KACR,CACD,CACH,CAAA,EACC,WAAgB,KAAA,KAAA,oBACfA,MAAAA,CAAA,cAAAA,MAAA,CAAA,QAAA,EAAA,IAAA,kBACEA,MAAA,CAAA,aAAA,CAAC,YAAO,CACR,kBAAAA,MAAA,CAAA,aAAA,CAAC,UAAW,EAAA,IAAA,CAAA,kBACZA,MAAA,CAAA,aAAA,CAAC,gBAAW,CACZ,kBAAAA,OAAA,aAAC,CAAA,WAAA,EAAA,IAAY,CACf,CAEJ,CACF,CAAA;AAEJ,CAAA;AAEA,IAAO,kBAAQ,GAAA,SAAA;AC5CR,SAAS,wBAAoC,GAAA;AAClD,EAAA,OAAO,oBAAoB,gBAAgB,CAAA;AAC7C;AAOO,SAAS,oBAAoB,IAA+B,EAAA;AACjE,EAAA,MAAM,WAAcG,GAAAA,SAAAA,CAAU,mBAAmB,CAAA,EAAG,MAAM,GAAG,CAAA;AAE7D,EAAO,OAAA,WAAA,EAAa,QAAS,CAAA,IAAI,CAAK,IAAA,KAAA;AAExC;;;ACPA,IAAI,aAAyB,EAAC;AAE9B,IAAI,YAAgE,EAAC;AAGrE,IAAM,yBAA0E,EAAC;AAEjF,IAAI,mBAAsB,GAAA,KAAA;AAG1B,IAAM,QAAW,GAAA,EAAA;AAGjB,IAAM,MAAA,GAAS,CAAC,IAAA,EAAA,GAAkB,IAAgB,KAAA;AAChD,EAAA,MAAM,MAAmB,GAAA;AAAA,IACvB,EAAI,EAAA,IAAA,CAAK,GAAI,EAAA,GAAI,KAAK,MAAO,EAAA;AAAA,IAC7B,IAAA;AAAA,IACA,SAAW,EAAA,iBAAA,IAAI,IAAK,EAAA,EAAE,kBAAmB,EAAA;AAAA,IACzC,OAAS,EAAA;AAAA,GACX;AAGA,EAAI,IAAA,UAAA,CAAW,UAAU,QAAU,EAAA;AAGjC,IAAI,IAAA,CAAC,mBAAoB,CAAA,aAAa,CAAG,EAAA;AACvC,MAAA,UAAA,CAAW,KAAM,EAAA;AAAA;AACnB;AAEF,EAAa,UAAA,GAAA,CAAC,GAAG,UAAA,EAAY,MAAM,CAAA;AACnC,EAAU,SAAA,CAAA,OAAA,CAAQ,CAAC,QAAa,KAAA,QAAA,CAAS,CAAC,GAAG,UAAU,CAAC,CAAC,CAAA;AAC3D,CAAA;AAMO,IAAM,+BAA+B,MAAM;AAChD,EAAI,IAAA,CAAC,QAAS,EAAA,IAAK,mBAAqB,EAAA;AACtC,IAAA;AAAA;AAEF,EAAA,MAAM,WAAsB,CAAC,KAAA,EAAO,MAAQ,EAAA,MAAA,EAAQ,SAAS,OAAO,CAAA;AAEpE,EAAS,QAAA,CAAA,OAAA,CAAQ,CAAC,IAAS,KAAA;AAEzB,IAAuB,sBAAA,CAAA,IAAI,CAAI,GAAA,OAAA,CAAQ,IAAI,CAAA;AAG3C,IAAQ,OAAA,CAAA,IAAI,CAAI,GAAA,CAAA,GAAI,IAAgB,KAAA;AAElC,MAAI,IAAA,sBAAA,CAAuB,IAAI,CAAG,EAAA;AAChC,QAAA,sBAAA,CAAuB,IAAI,CAAA,EAAG,KAAM,CAAA,OAAA,EAAS,IAAI,CAAA;AAAA;AAGnD,MAAO,MAAA,CAAA,IAAA,EAAM,GAAG,IAAI,CAAA;AAAA,KACtB;AAAA,GACD,CAAA;AAED,EAAsB,mBAAA,GAAA,IAAA;AACxB,CAAA;AAMO,IAAM,oBAAoB,MAAM;AACrC,EAAA,IAAI,CAAC,QAAA,EAAc,IAAA,CAAC,mBAAqB,EAAA;AACvC,IAAA;AAAA;AAGF,EAAA,MAAM,WAAsB,CAAC,KAAA,EAAO,MAAQ,EAAA,MAAA,EAAQ,SAAS,OAAO,CAAA;AACpE,EAAS,QAAA,CAAA,OAAA,CAAQ,CAAC,IAAS,KAAA;AACzB,IAAI,IAAA,sBAAA,CAAuB,IAAI,CAAG,EAAA;AAChC,MAAQ,OAAA,CAAA,IAAI,CAAI,GAAA,sBAAA,CAAuB,IAAI,CAAA;AAAA;AAC7C,GACD,CAAA;AACD,EAAsB,mBAAA,GAAA,KAAA;AACxB,CAAA;AAMO,IAAM,gBAAgB,MAAM;AACjC,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAII,SAAqB,UAAU,CAAA;AAEvD,EAAAN,UAAU,MAAM;AAEd,IAAA,SAAA,CAAU,KAAK,OAAO,CAAA;AAGtB,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,GAAY,SAAU,CAAA,MAAA,CAAO,CAAC,CAAA,KAAM,MAAM,OAAO,CAAA;AAAA,KACnD;AAAA,GACF,EAAG,EAAE,CAAA;AAGL,EAAM,MAAA,SAAA,GAAY,YAAY,MAAM;AAClC,IAAA,UAAA,GAAa,EAAC;AACd,IAAA,SAAA,CAAU,QAAQ,CAAC,QAAA,KAAa,QAAS,CAAA,EAAE,CAAC,CAAA;AAAA,GAC9C,EAAG,EAAE,CAAA;AAEL,EAAO,OAAA,EAAE,MAAM,SAAU,EAAA;AAC3B,CAAA;;;ACpGA,IAAM,aAAA,GAAgB,CAAC,GAAqB,KAAA;AAC1C,EAAI,IAAA;AACF,IAAA,OAAO,IAAK,CAAA,SAAA,CAAU,GAAK,EAAA,IAAA,EAAM,CAAC,CAAA;AAAA,WAC3B,CAAG,EAAA;AACV,IAAO,OAAA,yBAAA;AAAA;AAEX,CAAA;AAEA,IAAM,UAA4C,GAAA,CAAC,EAAE,KAAA,EAAiC,KAAA;AACpF,EAAA,MAAM,YAAe,GAAA,KAAA,CAAM,OAAQ,CAAA,GAAA,CAAI,CAAC,IAAS,KAAA;AAC/C,IAAA,IAAI,OAAO,IAAA,KAAS,QAAY,IAAA,IAAA,KAAS,IAAM,EAAA;AAC7C,MAAA,OAAO,cAAc,IAAI,CAAA;AAAA;AAG3B,IAAA,OAAO,OAAO,IAAI,CAAA;AAAA,GACnB,CAAA;AAED,EAAM,MAAA,KAAA,GAAQ,EAAE,GAAG,eAAA,EAAiB,GAAG,aAAc,CAAA,KAAA,CAAM,IAAI,CAAE,EAAA;AAEjE,EAAO,uBAAAD,OAAA,aAAC,CAAA,KAAA,EAAA,EAAI,SAAe,YAAa,CAAA,IAAA,CAAK,GAAG,CAAE,CAAA;AACpD,CAAA;AAEA,IAAM,eAA+C,GAAA,CAAC,EAAE,OAAA,EAAuC,KAAA;AAC7F,EAAA,MAAM,EAAE,IAAA,EAAM,SAAU,EAAA,GAAI,aAAc,EAAA;AAC1C,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIO,SAA0B,KAAK,CAAA;AAC3D,EAAM,MAAA,eAAA,GAAkBC,OAAuB,IAAI,CAAA;AAEnD,EAAM,MAAA,YAAA,GAAe,QAAQ,MAAM;AACjC,IAAA,IAAI,WAAW,KAAO,EAAA;AACpB,MAAO,OAAA,IAAA;AAAA;AAGT,IAAA,OAAO,KAAK,MAAO,CAAA,CAAC,GAAQ,KAAA,GAAA,CAAI,SAAS,MAAM,CAAA;AAAA,GAC9C,EAAA,CAAC,IAAM,EAAA,MAAM,CAAC,CAAA;AAEjB,EAAAP,UAAU,MAAM;AACd,IAAA,IAAI,gBAAgB,OAAS,EAAA;AAC3B,MAAgB,eAAA,CAAA,OAAA,CAAQ,SAAY,GAAA,eAAA,CAAgB,OAAQ,CAAA,YAAA;AAAA;AAC9D,GACF,EAAG,CAAC,YAAY,CAAC,CAAA;AAEjB,EAAA,MAAM,cAAsC,GAAA,CAAC,KAAO,EAAA,KAAA,EAAO,QAAQ,OAAO,CAAA;AAE1E,EAAA,uBACED,MAAAA,CAAA,aAAAA,CAAAA,MAAAA,CAAA,QACE,EAAA,IAAA,kBAAAA,MAAA,CAAA,aAAA,CAAC,KAAI,EAAA,EAAA,KAAA,EAAO,iBAAmB,EAAA,OAAA,EAAS,SAAS,CACjD,kBAAAA,MAAA,CAAA,aAAA,CAAC,KAAI,EAAA,EAAA,KAAA,EAAO,sBACV,EAAA,kBAAAA,MAAA,CAAA,aAAA,CAAC,KAAI,EAAA,EAAA,KAAA,EAAO,gBACV,EAAA,kBAAAA,MAAA,CAAA,aAAA,CAAC,QAAG,KAAO,EAAA,OAAA,EAAA,EAAS,cAAY,CAAA,kBAChCA,MAAAA,CAAA,aAAC,CAAA,QAAA,EAAA,EAAO,OAAS,EAAA,OAAA,EAAA,EAAS,GAAC,CAC7B,CACA,kBAAAA,MAAA,CAAA,aAAA,CAAC,SAAI,KAAO,EAAA,iBAAA,EAAA,kBACVA,MAAAA,CAAA,aAAC,CAAA,KAAA,EAAA,IAAA,EACE,cAAe,CAAA,GAAA,CAAI,CAAC,MACnB,qBAAAA,MAAA,CAAA,aAAA,CAAC,QAAO,EAAA,EAAA,GAAA,EAAK,MAAQ,EAAA,OAAA,EAAS,MAAM,SAAU,CAAA,MAAM,CAAG,EAAA,QAAA,EAAU,MAAW,KAAA,MAAA,EAAA,EACzE,MAAO,CAAA,MAAA,CAAO,CAAC,CAAA,CAAE,WAAY,EAAA,GAAI,MAAO,CAAA,KAAA,CAAM,CAAC,CAClD,CACD,CACH,CAAA,kBACAA,MAAAA,CAAA,aAAC,CAAA,QAAA,EAAA,EAAO,OAAS,EAAA,SAAA,EAAW,OAAO,gBAAkB,EAAA,EAAA,OAErD,CACF,CAAA,kBACAA,MAAAA,CAAA,aAAC,CAAA,KAAA,EAAA,EAAI,OAAO,qBAAuB,EAAA,GAAA,EAAK,eACrC,EAAA,EAAA,YAAA,CAAa,GAAI,CAAA,CAAC,GACjB,qBAAAA,MAAA,CAAA,aAAA,CAAC,KAAI,EAAA,EAAA,GAAA,EAAK,GAAI,CAAA,EAAA,EAAI,KAAO,EAAA,YAAA,EAAA,kBACvBA,MAAA,CAAA,aAAA,CAAC,MAAK,EAAA,EAAA,KAAA,EAAO,iBAAoB,EAAA,EAAA,GAAA,CAAI,SAAU,CAAA,kBAC/CA,MAAA,CAAA,aAAA,CAAC,UAAW,EAAA,EAAA,KAAA,EAAO,GAAK,EAAA,CAC1B,CACD,CACH,CACF,CACF,CAAA;AAEJ,CAAA;AAEA,IAAO,yBAAQ,GAAA,eAAA;ACpEf,IAAM,UAAwC,GAAA,CAAC,EAAE,OAAA,EAAS,SAAc,KAAA;AACtE,EAAM,MAAA,CAAC,gBAAgB,iBAAiB,CAAA,GAAIO,SAAiB,UAAW,CAAA,CAAC,CAAG,EAAA,EAAA,IAAM,EAAE,CAAA;AACpF,EAAA,MAAM,CAAC,QAAU,EAAA,WAAW,CAAIA,GAAAA,QAAAA,CAAiC,EAAE,CAAA;AACnE,EAAA,MAAM,YAAeE,GAAAA,OAAAA,CAAQ,MAAM,UAAA,CAAW,IAAK,CAAA,CAAC,CAAM,KAAA,CAAA,CAAE,EAAO,KAAA,cAAc,CAAG,EAAA,CAAC,cAAc,CAAC,CAAA;AAEpG,EAAM,MAAA,iBAAA,GAAoB,CAAC,CAA2C,KAAA;AACpE,IAAA,MAAM,EAAE,IAAA,EAAM,KAAM,EAAA,GAAI,CAAE,CAAA,MAAA;AAC1B,IAAY,WAAA,CAAA,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,IAAI,GAAG,KAAA,EAAQ,CAAA,CAAA;AAAA,GACpD;AAEA,EAAM,MAAA,YAAA,GAAe,CAAC,CAAuB,KAAA;AAC3C,IAAA,CAAA,CAAE,cAAe,EAAA;AACjB,IAAA,IAAI,YAAc,EAAA;AAEhB,MAAAJ,aAAa,aAAa,CAAA;AAC1B,MAAQ,OAAA,CAAA,YAAA,CAAa,IAAI,QAAQ,CAAA;AACjC,MAAQ,OAAA,EAAA;AAAA;AACV,GACF;AAEA,EAAAJ,UAAU,MAAM;AACd,IAAA,WAAA,CAAY,EAAE,CAAA;AAAA,GAChB,EAAG,CAAC,YAAY,CAAC,CAAA;AAEjB,EACE,uBAAAD,MAAA,CAAA,aAAA,CAAAA,MAAA,CAAA,QAAA,EAAA,IAAA,kBACEA,MAAAA,CAAA,aAAC,CAAA,KAAA,EAAA,EAAI,KAAO,EAAA,iBAAA,EAAmB,OAAS,EAAA,OAAA,EAAS,CACjD,kBAAAA,MAAA,CAAA,aAAA,CAAC,KAAI,EAAA,EAAA,KAAA,EAAO,sBACV,EAAA,kBAAAA,MAAA,CAAA,aAAA,CAAC,KAAI,EAAA,EAAA,KAAA,EAAO,gBACV,EAAA,kBAAAA,MAAA,CAAA,aAAA,CAAC,IAAG,EAAA,EAAA,KAAA,EAAO,OAAS,EAAA,EAAA,iCAAM,CAC1B,kBAAAA,MAAA,CAAA,aAAA,CAAC,QAAO,EAAA,EAAA,OAAA,EAAS,OAAS,EAAA,EAAA,GAAC,CAC7B,CAAA,kBAEAA,MAAAA,CAAA,aAAC,CAAA,MAAA,EAAA,EAAK,KAAO,EAAA,uBAAA,EAAyB,QAAU,EAAA,YAAA,EAAA,kBAC9CA,MAAAA,CAAA,aAAC,CAAA,KAAA,EAAA,IAAA,kBACCA,MAAAA,CAAA,aAAC,CAAA,OAAA,EAAA,EAAM,OAAQ,EAAA,mBAAA,EAAA,EAAoB,iCAAM,CACzC,kBAAAA,MAAA,CAAA,aAAA,CAAC,QAAO,EAAA,EAAA,EAAA,EAAG,mBAAoB,EAAA,KAAA,EAAO,cAAgB,EAAA,QAAA,EAAU,CAAC,CAAA,KAAM,iBAAkB,CAAA,CAAA,CAAE,MAAO,CAAA,KAAK,CACpG,EAAA,EAAA,UAAA,CAAW,GAAI,CAAA,CAAC,IACf,qBAAAA,MAAA,CAAA,aAAA,CAAC,QAAO,EAAA,EAAA,GAAA,EAAK,IAAK,CAAA,EAAA,EAAI,KAAO,EAAA,IAAA,CAAK,EAC/B,EAAA,EAAA,IAAA,CAAK,KACR,CACD,CACH,CACF,CAEC,EAAA,YAAA,EAAc,MAAO,CAAA,GAAA,CAAI,CAAC,KAAA,qBACzBA,MAAAA,CAAA,aAAC,CAAA,KAAA,EAAA,EAAI,GAAK,EAAA,KAAA,CAAM,IACd,EAAA,kBAAAA,MAAA,CAAA,aAAA,CAAC,OAAM,EAAA,EAAA,OAAA,EAAS,KAAM,CAAA,IAAA,EAAA,EAAO,KAAM,CAAA,KAAM,CACzC,kBAAAA,MAAA,CAAA,aAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,MAAM,KAAM,CAAA,IAAA;AAAA,MACZ,IAAI,KAAM,CAAA,IAAA;AAAA,MACV,MAAM,KAAM,CAAA,IAAA;AAAA,MACZ,aAAa,KAAM,CAAA,WAAA;AAAA,MACnB,KAAO,EAAA,QAAA,CAAS,KAAM,CAAA,IAAI,CAAK,IAAA,EAAA;AAAA,MAC/B,QAAU,EAAA,iBAAA;AAAA,MACV,QAAQ,EAAA;AAAA;AAAA,GAEZ,CACD,CAAA,kBAEDA,MAAA,CAAA,aAAA,CAAC,SAAI,KAAO,EAAA,gBAAA,EAAA,kBACVA,MAAA,CAAA,aAAA,CAAC,YAAO,IAAK,EAAA,QAAA,EAAA,EAAS,oBAAG,CAC3B,CACF,CACF,CACF,CAAA;AAEJ,CAAA;AAEA,IAAO,mBAAQ,GAAA,UAAA;AClEf,IAAM,eAAkB,GAAA;AAAA,EACtB,EAAE,KAAA,EAAO,KAAO,EAAA,KAAA,EAAO,cAAK,EAAA;AAAA,EAC5B,EAAE,KAAA,EAAO,KAAO,EAAA,KAAA,EAAO,cAAK,EAAA;AAAA,EAC5B,EAAE,KAAA,EAAO,SAAW,EAAA,KAAA,EAAO,cAAK,EAAA;AAAA,EAChC,EAAE,KAAA,EAAO,QAAU,EAAA,KAAA,EAAO,0BAAO,EAAA;AAAA,EACjC,EAAE,KAAA,EAAO,MAAQ,EAAA,KAAA,EAAO,cAAK,EAAA;AAAA,EAC7B,EAAE,KAAA,EAAO,UAAY,EAAA,KAAA,EAAO,cAAK,EAAA;AAAA,EACjC,EAAE,KAAA,EAAO,OAAS,EAAA,KAAA,EAAO,cAAK;AAChC,CAAA;AAOA,IAAM,UAAA,GAAa,CAAC,GAAqD,KAAA;AACvE,EAAI,IAAA,GAAA,CAAI,eAAe,MAAQ,EAAA;AAC7B,IAAA,IAAI,aAAa,GAAK,EAAA;AACpB,MAAA,OAAQ,GAAoB,CAAA,OAAA;AAAA;AAE9B,IAAA,IAAI,cAAc,GAAK,EAAA;AACrB,MAAA,OAAQ,GAAqB,CAAA,QAAA;AAAA;AAE/B,IAAA,IAAI,WAAW,GAAK,EAAA;AAClB,MAAA,OAAQ,GAAkB,CAAA,KAAA;AAAA;AAC5B;AAGF,EAAO,OAAA,GAAA;AACT,CAAA;AAEA,IAAM,UAAwC,GAAA,CAAC,EAAE,OAAA,EAAc,KAAA;AAC7D,EAAM,MAAA;AAAA,IACJ,QAAA;AAAA,IACA,SAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,MACE,aAAc,EAAA;AAClB,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIO,SAAS,EAAE,CAAA;AAC/C,EAAM,MAAA,CAAC,eAAe,gBAAgB,CAAA,GAAIA,SAAS,eAAgB,CAAA,CAAC,GAAG,KAAK,CAAA;AAE5E,EAAM,MAAA,OAAA,GAAUE,QAAQ,MAAM;AAC5B,IAAA,MAAM,OAAc,EAAC;AACrB,IAAS,QAAA,CAAA,OAAA,CAAQ,CAAC,GAAA,KAAqB,IAAK,CAAA,IAAA,CAAK,EAAE,GAAG,GAAK,EAAA,IAAA,EAAM,SAAU,EAAC,CAAC,CAAA;AAC7E,IAAU,SAAA,CAAA,OAAA,CAAQ,CAAC,GAAA,KAAsB,IAAK,CAAA,IAAA,CAAK,EAAE,GAAG,GAAK,EAAA,IAAA,EAAM,UAAW,EAAC,CAAC,CAAA;AAChF,IAAO,MAAA,CAAA,OAAA,CAAQ,CAAC,GAAA,KAAmB,IAAK,CAAA,IAAA,CAAK,EAAE,GAAG,GAAK,EAAA,IAAA,EAAM,OAAQ,EAAC,CAAC,CAAA;AACvE,IAAA,YAAA,CAAa,OAAQ,CAAA,CAAC,GAAqB,KAAA,IAAA,CAAK,IAAK,CAAA,EAAE,GAAG,GAAA,EAAK,IAAM,EAAA,SAAA,EAAW,UAAY,EAAA,MAAA,EAAQ,CAAC,CAAA;AACrG,IAAA,aAAA,CAAc,OAAQ,CAAA,CAAC,GAAsB,KAAA,IAAA,CAAK,IAAK,CAAA,EAAE,GAAG,GAAA,EAAK,IAAM,EAAA,UAAA,EAAY,UAAY,EAAA,MAAA,EAAQ,CAAC,CAAA;AACxG,IAAA,UAAA,CAAW,OAAQ,CAAA,CAAC,GAAmB,KAAA,IAAA,CAAK,IAAK,CAAA,EAAE,GAAG,GAAA,EAAK,IAAM,EAAA,OAAA,EAAS,UAAY,EAAA,MAAA,EAAQ,CAAC,CAAA;AAE/F,IAAK,IAAA,CAAA,IAAA,CAAK,CAAC,CAAA,EAAG,CAAM,KAAA;AAClB,MAAM,MAAA,KAAA,GAAQ,WAAW,CAAC,CAAA;AAC1B,MAAM,MAAA,KAAA,GAAQ,WAAW,CAAC,CAAA;AAC1B,MAAA,MAAM,KAAQ,GAAA,WAAA,IAAe,KAAQ,GAAA,KAAA,CAAM,SAAY,GAAA,CAAA;AACvD,MAAA,MAAM,KAAQ,GAAA,WAAA,IAAe,KAAQ,GAAA,KAAA,CAAM,SAAY,GAAA,CAAA;AAEvD,MAAA,OAAO,KAAQ,GAAA,KAAA;AAAA,KAChB,CAAA;AAED,IAAO,OAAA,IAAA;AAAA,GACT,EAAG,CAAC,QAAU,EAAA,SAAA,EAAW,QAAQ,YAAc,EAAA,aAAA,EAAe,UAAU,CAAC,CAAA;AAEzE,EAAM,MAAA,YAAA,GAAeA,QAAQ,MAAM;AACjC,IAAA,IAAI,CAAC,UAAY,EAAA;AACf,MAAO,OAAA,OAAA;AAAA;AAET,IAAM,MAAA,cAAA,GAAiB,WAAW,WAAY,EAAA;AAE9C,IAAO,OAAA,OAAA,CAAQ,MAAO,CAAA,CAAC,GAAa,KAAA;AAClC,MAAM,MAAA,OAAA,GAAU,WAAW,GAAG,CAAA;AAC9B,MAAA,QAAQ,aAAe;AAAA,QACrB,KAAK,KAAA;AACH,UAAA,OAAO,OAAQ,CAAA,GAAA,EAAK,WAAY,EAAA,CAAE,SAAS,cAAc,CAAA;AAAA,QAC3D,KAAK,SAAA;AACH,UAAA,OACE,SAAa,IAAA,OAAA,IACb,OAAQ,CAAA,OAAA,IACR,IAAK,CAAA,SAAA,CAAU,OAAQ,CAAA,OAAO,CAAG,EAAA,WAAA,EAAc,CAAA,QAAA,CAAS,cAAc,CAAA;AAAA,QAE1E,KAAK,QAAA;AACH,UAAA,OACE,QAAY,IAAA,OAAA,IACZ,OAAQ,CAAA,MAAA,IACR,IAAK,CAAA,SAAA,CAAU,OAAQ,CAAA,MAAM,CAAG,EAAA,WAAA,EAAc,CAAA,QAAA,CAAS,cAAc,CAAA;AAAA,QAEzE,KAAK,MAAA;AACH,UAAA,OACE,MAAU,IAAA,OAAA,IACV,OAAQ,CAAA,IAAA,IACR,IAAI,IAAS,KAAA,SAAA,IACb,IAAK,CAAA,SAAA,CAAU,QAAQ,IAAI,CAAA,EAAG,WAAY,EAAA,CAAE,SAAS,cAAc,CAAA;AAAA,QAEvE,KAAK,UAAA;AACH,UAAA,OACE,MAAU,IAAA,OAAA,IACV,OAAQ,CAAA,IAAA,IACR,IAAI,IAAS,KAAA,UAAA,IACb,IAAK,CAAA,SAAA,CAAU,QAAQ,IAAI,CAAA,EAAG,WAAY,EAAA,CAAE,SAAS,cAAc,CAAA;AAAA,QAEvE,KAAK,OAAA;AACH,UAAO,OAAA,GAAA,CAAI,IAAS,KAAA,OAAA,IAAW,IAAK,CAAA,SAAA,CAAU,OAAO,CAAG,EAAA,WAAA,EAAc,CAAA,QAAA,CAAS,cAAc,CAAA;AAAA,QAC/F,KAAK,KAAA;AAAA,QACL;AACE,UAAA,OAAO,KAAK,SAAU,CAAA,OAAO,EAAE,WAAY,EAAA,CAAE,SAAS,cAAc,CAAA;AAAA;AACxE,KACD,CAAA;AAAA,GACA,EAAA,CAAC,OAAS,EAAA,UAAA,EAAY,aAAa,CAAC,CAAA;AAEvC,EAAM,MAAA,gBAAA,GAAmB,CAAC,GAAa,KAAA;AACrC,IAAM,MAAA,OAAA,GAAU,WAAW,GAAG,CAAA;AAC9B,IAAA,MAAM,MAAS,GAAA,GAAA,CAAI,UAAe,KAAA,MAAA,GAAS,SAAY,GAAA,EAAA;AACvD,IAAI,IAAA,GAAA,CAAI,SAAS,SAAW,EAAA;AAC1B,MAAO,OAAA,CAAA,EAAG,MAAM,CAAS,MAAA,EAAA,OAAA,CAAQ,OAAO,WAAY,EAAC,CAAI,CAAA,EAAA,OAAA,CAAQ,GAAG,CAAA,CAAA;AAAA;AAEtE,IAAA,IAAI,GAAI,CAAA,IAAA,KAAS,UAAc,IAAA,QAAA,IAAY,OAAS,EAAA;AAClD,MAAA,OAAO,CAAG,EAAA,MAAM,CAAS,MAAA,EAAA,OAAA,CAAQ,MAAO,CAAA,WAAA,EAAa,CAAA,CAAA,EAAI,OAAQ,CAAA,GAAG,CAAM,GAAA,EAAA,OAAA,CAAQ,MAAM,CAAA,CAAA;AAAA;AAE1F,IAAA,IAAI,GAAI,CAAA,IAAA,KAAS,OAAW,IAAA,SAAA,IAAa,OAAS,EAAA;AAChD,MAAA,OAAO,CAAG,EAAA,MAAM,CAAS,MAAA,EAAA,OAAA,CAAQ,MAAO,CAAA,WAAA,EAAa,CAAA,CAAA,EAAI,OAAQ,CAAA,GAAG,CAAM,GAAA,EAAA,OAAA,CAAQ,OAAO,CAAA,CAAA;AAAA;AAG3F,IAAO,OAAA,aAAA;AAAA,GACT;AAEA,EAAM,MAAA,gBAAA,GAAmB,CAAC,GAAa,KAAA;AACrC,IAAM,MAAA,OAAA,GAAU,WAAW,GAAG,CAAA;AAE9B,IAAO,uBAAAT,OAAA,aAAC,CAAA,KAAA,EAAA,IAAA,EAAK,KAAK,SAAU,CAAA,OAAA,EAAS,IAAM,EAAA,CAAC,CAAE,CAAA;AAAA,GAChD;AAEA,EAAA,uBACEA,MAAA,CAAA,aAAA,CAAAA,OAAA,QACE,EAAA,IAAA,kBAAAA,OAAA,aAAC,CAAA,KAAA,EAAA,EAAI,OAAO,iBAAmB,EAAA,OAAA,EAAS,SAAS,CACjD,kBAAAA,OAAA,aAAC,CAAA,KAAA,EAAA,EAAI,OAAO,sBACV,EAAA,kBAAAA,MAAA,CAAA,aAAA,CAAC,SAAI,KAAO,EAAA,gBAAA,EAAA,kBACVA,MAAA,CAAA,aAAA,CAAC,QAAG,KAAO,EAAA,OAAA,EAAA,EAAS,uCAAO,CAC3B,kBAAAA,OAAA,aAAC,CAAA,QAAA,EAAA,EAAO,SAAS,OAAS,EAAA,EAAA,GAAC,CAC7B,CACA,kBAAAA,MAAA,CAAA,aAAA,CAAC,SAAI,KAAO,EAAA,wBAAA,EAAA,kBACVA,MAAA,CAAA,aAAA,CAAC,SAAI,KAAO,EAAA,oBAAA,EAAA,kBACVA,MAAA,CAAA,aAAA,CAAC,YAAO,KAAO,EAAA,aAAA,EAAe,UAAU,CAAC,CAAA,KAAM,iBAAiB,CAAE,CAAA,MAAA,CAAO,KAAK,CAC3E,EAAA,EAAA,eAAA,CAAgB,IAAI,CAAC,MAAA,qBACpBA,MAAA,CAAA,aAAA,CAAC,YAAO,GAAK,EAAA,MAAA,CAAO,OAAO,KAAO,EAAA,MAAA,CAAO,SACtC,MAAO,CAAA,KACV,CACD,CACH,CAAA,kBACAA,MAAA,CAAA,aAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,IAAK,EAAA,MAAA;AAAA,MACL,WAAY,EAAA,iBAAA;AAAA,MACZ,KAAO,EAAA,UAAA;AAAA,MACP,UAAU,CAAC,CAAA,KAA2C,aAAc,CAAA,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,MAClF,KAAO,EAAA;AAAA;AAAA,GACT,kBACAA,MAAAA,CAAA,aAAC,CAAA,OAAA,EAAA,IAAA,kBACCA,MAAA,CAAA,aAAA,CAAC,OAAM,EAAA,EAAA,IAAA,EAAK,UAAW,EAAA,EAAA,EAAG,iBAAgB,OAAS,EAAA,MAAA,EAAQ,QAAU,EAAA,UAAA,EAAY,CAAE,EAAA,MAErF,CACA,kBAAAA,MAAA,CAAA,aAAA,CAAC,QAAO,EAAA,EAAA,OAAA,EAAS,KAAO,EAAA,EAAA,OAAK,CAC/B,CACC,EAAA,MAAA,oBACCA,MAAAA,CAAA,aAAC,CAAA,KAAA,EAAA,EAAI,OAAO,yBACV,EAAA,kBAAAA,MAAA,CAAA,aAAA,CAAC,QAAO,EAAA,EAAA,OAAA,EAAS,MAAM,eAAgB,EAAA,EAAA,EAAG,aAAW,CAAA,kBACrDA,MAAAA,CAAA,aAAC,CAAA,QAAA,EAAA,EAAO,OAAS,EAAA,MAAM,gBAAiB,EAAA,EAAA,EAAG,aAAW,CACxD,mBAEFA,MAAAA,CAAA,aAAC,CAAA,KAAA,EAAA,EAAI,KAAO,EAAA,YAAA,EAAA,EACT,aAAa,MAAW,KAAA,CAAA,mBACvBA,MAAAA,CAAA,aAAC,CAAA,GAAA,EAAA,IAAA,EAAE,iEAAa,CAEhB,mBAAAA,MAAA,CAAA,aAAA,CAAC,KACE,EAAA,IAAA,EAAA,YAAA,CAAa,GAAI,CAAA,CAAC,GAAK,EAAA,KAAA,qBACtBA,MAAAA,CAAA,aAAC,CAAA,SAAA,EAAA,EAAQ,KAAK,KACZ,EAAA,kBAAAA,MAAA,CAAA,aAAA,CAAC,SAAQ,EAAA,EAAA,KAAA,EAAO,mBAAkB,gBAAiB,CAAA,GAAG,CAAE,CAAA,kBACxDA,MAAAA,CAAA,cAAC,KAAI,EAAA,EAAA,KAAA,EAAO,eAAkB,EAAA,EAAA,gBAAA,CAAiB,GAAG,CAAE,CACtD,CACD,CACH,CAEJ,CACF,CACF,CACF,CAAA;AAEJ,CAAA;AAEA,IAAO,mBAAQ,GAAA,UAAA;AC5Mf,IAAM,eAAe,MAAM;AACzB,EAAA,OAAO,MAAO,CAAA,IAAA,CAAK,QAAQ,CAAA,CAAE,IAAI,CAAO,GAAA,KAAA;AACtC,IAAM,MAAA,GAAA,GAAM,SAAS,GAAqB,CAAA;AAC1C,IAAI,IAAA,OAAO,QAAQ,QAAU,EAAA;AAC3B,MAAO,uBAAAA,OAAA,aAAC,CAAA,KAAA,EAAA,EAAI,OAAW,GAAI,EAAA,IAAA,EAAG,GAAI,EAAA,GAAA,EAAE,GAAO,oBAAAA,OAAA,aAAC,CAAA,QAAA,EAAA,EAAO,SAAS,MAAM,SAAA,CAAU,UAAU,SAAU,CAAA,GAAG,CAAI,EAAA,EAAA,cAAE,CAAU,CAAA;AAAA;AACrH,GACD,CAAA;AACH,CAAA;AAOA,IAAM,mBAAmD,GAAA,CAAC,EAAE,OAAA,EAAc,KAAA;AACxE,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,CAAA,GAAIO,SAAiB,EAAE,CAAA;AAEzC,EAAA,MAAM,iBAAiB,MAAM;AAC3B,IAAA,IAAI,GAAK,EAAA;AACP,MAAA,IAAA,CAAK,SAAS,IAAO,GAAA,GAAA;AAAA;AACvB,GACF;AAGA,EAAA,uBACEP,MAAA,CAAA,aAAA,CAAAA,OAAA,QACE,EAAA,IAAA,kBAAAA,OAAA,aAAC,CAAA,KAAA,EAAA,EAAI,KAAO,EAAA,iBAAA,EAAmB,SAAS,OAAS,EAAA,CAAA,kBACjDA,MAAA,CAAA,aAAA,CAAC,SAAI,KAAO,EAAA,sBAAA,EAAA,kBACVA,MAAAA,CAAA,cAAC,KAAI,EAAA,EAAA,KAAA,EAAO,oCACVA,MAAAA,CAAA,cAAC,IAAG,EAAA,EAAA,KAAA,EAAO,WAAS,iCAAM,CAAA,kBAC1BA,MAAA,CAAA,aAAA,CAAC,YAAO,OAAS,EAAA,OAAA,EAAA,EAAS,GAAC,CAC7B,CAAA,kBACAA,MAAAA,CAAA,cAAC,KAAI,EAAA,EAAA,KAAA,EAAO,8CACVA,MAAAA,CAAA,cAAC,IAAG,EAAA,IAAA,CAAA,kBAAEA,MAAAA,CAAA,cAAC,IAAG,EAAA,IAAA,CAAA,EAAE,oDAEZA,MAAAA,CAAA,cAAC,MAAK,EAAA,EAAA,KAAA,EAAO,EAAE,UAAA,EAAY,UAAU,SAAW,EAAA,WAAA,MAAgB,YAAa,EAAE,mBAC/EA,MAAAA,CAAA,cAAC,IAAG,EAAA,IAAA,CAAA,kBAAEA,MAAA,CAAA,aAAA,CAAC,UAAG,CAAE,EAAA,kCAAA,kBAEZA,MAAA,CAAA,aAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,IAAK,EAAA,MAAA;AAAA,MACL,KAAO,EAAA,GAAA;AAAA,MACP,UAAU,CAAC,CAAA,KAAM,MAAO,CAAA,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,MACtC,WAAY,EAAA,6EAAA;AAAA,MACZ,KAAO,EAAA;AAAA;AAAA,GACT,kBACAA,MAAAA,CAAA,aAAC,CAAA,QAAA,EAAA,EAAO,SAAS,cAAgB,EAAA,EAAA,cAAE,CACrC,CACF,CACF,CAAA;AAEJ,CAAA;AAEA,IAAO,6BAAQ,GAAA,mBAAA;ACrCf,IAAMU,cAAiE,GAAA;AAAA,EACrE,GAAA,EAAK,EAAE,KAAA,EAAO,SAAU,EAAA;AAAA,EACxB,IAAA,EAAM,EAAE,KAAA,EAAO,SAAU,EAAA;AAAA,EACzB,KAAA,EAAO,EAAE,KAAA,EAAO,SAAU,EAAA;AAAA,EAC1B,MAAA,EAAQ,EAAE,KAAA,EAAO,SAAU;AAC7B,CAAA;AAEA,IAAMC,cAAAA,GAAgB,CAAC,GAAqB,KAAA;AAC1C,EAAI,IAAA;AACF,IAAM,MAAA,QAAA,GAAW,CAAC,GAAU,EAAA,KAAA,KAAgB,OAAO,KAAU,KAAA,QAAA,GAAW,KAAM,CAAA,QAAA,EAAa,GAAA,KAAA;AAE3F,IAAA,OAAO,IAAK,CAAA,SAAA,CAAU,GAAK,EAAA,QAAA,EAAU,CAAC,CAAA;AAAA,WAC/B,CAAG,EAAA;AACV,IAAO,OAAA,yBAAA;AAAA;AAEX,CAAA;AAEA,IAAM,aAA8C,GAAA,CAAC,EAAE,GAAA,EAAU,KAAA;AAC/D,EAAA,MAAM,YAAe,GAAA,GAAA,CAAI,OAAQ,CAAA,GAAA,CAAI,CAAC,IAAS,KAAA;AAC7C,IAAA,IAAI,OAAO,IAAA,KAAS,QAAY,IAAA,IAAA,KAAS,IAAM,EAAA;AAC7C,MAAA,OAAOA,eAAc,IAAI,CAAA;AAAA;AAG3B,IAAA,OAAO,OAAO,IAAI,CAAA;AAAA,GACnB,CAAA;AAED,EAAA,MAAM,MAAS,GAAA,GAAA,CAAI,IAAS,KAAA,QAAA,GAAW,SAAO,GAAA,EAAA;AAC9C,EAAM,MAAA,KAAA,GAAQ,EAAE,GAAG,eAAA,EAAiB,GAAGD,cAAc,CAAA,GAAA,CAAI,IAAI,CAAE,EAAA;AAE/D,EACE,uBAAAV,OAAA,aAAC,CAAA,KAAA,EAAA,EAAI,SACF,MACA,EAAA,YAAA,CAAa,IAAK,CAAA,GAAG,CACxB,CAAA;AAEJ,CAAA;AAEO,IAAM,mBAAmD,GAAA,CAAC,EAAE,OAAA,EAAc,KAAA;AAC/E,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIO,SAAiB,2HAAqD,CAAA;AAC9F,EAAA,MAAM,CAAC,OAAS,EAAA,UAAU,CAAIA,GAAAA,QAAAA,CAAsB,EAAE,CAAA;AAEtD,EAAM,MAAA,SAAA,GAAY,CAAC,IAAA,EAAA,GAAwB,IAAgB,KAAA;AACzD,IAAA,UAAA,CAAW,CAAC,WAAgB,KAAA;AAAA,MAC1B,GAAG,WAAA;AAAA,MACH;AAAA,QACE,EAAI,EAAA,IAAA,CAAK,GAAI,EAAA,GAAI,KAAK,MAAO,EAAA;AAAA,QAC7B,IAAA;AAAA,QACA,SAAW,EAAA,iBAAA,IAAI,IAAK,EAAA,EAAE,kBAAmB,EAAA;AAAA,QACzC,OAAS,EAAA;AAAA;AACX,KACD,CAAA;AAAA,GACH;AAEA,EAAA,MAAM,gBAAgB,MAAM;AAC1B,IAAM,MAAA,eAAA,GAAkB,EAAE,GAAG,OAAQ,EAAA;AACrC,IAAA,MAAM,UAAa,GAAA;AAAA,MACjB,GAAA,EAAK,IAAI,IAAgB,KAAA;AACvB,QAAgB,eAAA,CAAA,GAAA,CAAI,GAAG,IAAI,CAAA;AAC3B,QAAU,SAAA,CAAA,KAAA,EAAO,GAAG,IAAI,CAAA;AAAA,OAC1B;AAAA,MACA,IAAA,EAAM,IAAI,IAAgB,KAAA;AACxB,QAAgB,eAAA,CAAA,IAAA,CAAK,GAAG,IAAI,CAAA;AAC5B,QAAU,SAAA,CAAA,MAAA,EAAQ,GAAG,IAAI,CAAA;AAAA,OAC3B;AAAA,MACA,KAAA,EAAO,IAAI,IAAgB,KAAA;AACzB,QAAgB,eAAA,CAAA,KAAA,CAAM,GAAG,IAAI,CAAA;AAC7B,QAAU,SAAA,CAAA,OAAA,EAAS,GAAG,IAAI,CAAA;AAAA;AAC5B,KACF;AAEA,IAAI,IAAA;AACF,MAAO,MAAA,CAAA,MAAA,CAAO,SAAS,UAAU,CAAA;AAEjC,MAAA,MAAM,MAAS,GAAA,IAAI,QAAS,CAAA,IAAI,CAAE,EAAA;AAClC,MAAA,IAAI,WAAW,KAAW,CAAA,EAAA;AACxB,QAAA,SAAA,CAAU,UAAU,MAAM,CAAA;AAAA;AAC5B,aACO,CAAQ,EAAA;AACf,MAAA,SAAA,CAAU,OAAS,EAAA,CAAA,CAAE,IAAM,EAAA,CAAA,CAAE,OAAO,CAAA;AAAA,KACpC,SAAA;AACA,MAAO,MAAA,CAAA,MAAA,CAAO,SAAS,eAAe,CAAA;AAAA;AACxC,GACF;AAEA,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,UAAA,CAAW,EAAE,CAAA;AAAA,GACf;AAEA,EAAA,uBACEP,MAAAA,CAAA,aAAAA,CAAAA,MAAAA,CAAA,QACE,EAAA,IAAA,kBAAAA,MAAA,CAAA,aAAA,CAAC,KAAI,EAAA,EAAA,KAAA,EAAO,iBAAmB,EAAA,OAAA,EAAS,OAAS,EAAA,CAAA,kBACjDA,MAAAA,CAAA,aAAC,CAAA,KAAA,EAAA,EAAI,KAAO,EAAA,EAAE,GAAG,sBAAA,EAAwB,GAAG,0BAAA,EAC1C,EAAA,kBAAAA,MAAA,CAAA,aAAA,CAAC,KAAI,EAAA,EAAA,KAAA,EAAO,gBACV,EAAA,kBAAAA,MAAA,CAAA,aAAA,CAAC,IAAG,EAAA,EAAA,KAAA,EAAO,OAAS,EAAA,EAAA,uCAAO,CAC3B,kBAAAA,MAAA,CAAA,aAAA,CAAC,QAAO,EAAA,EAAA,OAAA,EAAS,OAAS,EAAA,EAAA,GAAC,CAC7B,CAAA,kBACAA,MAAAA,CAAA,aAAC,CAAA,KAAA,EAAA,EAAI,KAAO,EAAA,0BAAA,EAAA,kBACVA,MAAAA,CAAA,aAAC,CAAA,KAAA,EAAA,EAAI,KAAO,EAAA,uBAAA,EAAA,kBACVA,MAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,KAAO,EAAA,mBAAA;AAAA,MACP,KAAO,EAAA,IAAA;AAAA,MACP,UAAU,CAAC,CAAA,KAAM,OAAQ,CAAA,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,MACvC,UAAW,EAAA;AAAA;AAAA,qBAEbA,MAAAA,CAAA,cAAC,KAAI,EAAA,EAAA,KAAA,EAAO,sCACVA,MAAAA,CAAA,aAAC,CAAA,QAAA,EAAA,EAAO,SAAS,aAAe,EAAA,EAAA,uBAAM,mBACtCA,MAAAA,CAAA,cAAC,QAAO,EAAA,EAAA,OAAA,EAAS,WAAa,EAAA,EAAA,iCAAM,CACtC,CACF,CAAA,kBACAA,MAAA,CAAA,aAAA,CAAC,SAAI,KAAO,EAAA,wBAAA,EAAA,kBACVA,MAAAA,CAAA,cAAC,KAAI,EAAA,EAAA,KAAA,EAAO,oCACVA,MAAAA,CAAA,cAAC,IAAG,EAAA,EAAA,KAAA,EAAO,OAAS,EAAA,EAAA,cAAE,CACxB,CACA,kBAAAA,OAAA,aAAC,CAAA,KAAA,EAAA,EAAI,OAAO,qBACT,EAAA,EAAA,OAAA,CAAQ,GAAI,CAAA,CAAC,wBACZA,MAAAA,CAAA,cAAC,KAAI,EAAA,EAAA,GAAA,EAAK,IAAI,EAAI,EAAA,KAAA,EAAO,YACvB,EAAA,kBAAAA,OAAA,aAAC,CAAA,MAAA,EAAA,EAAK,OAAO,iBAAoB,EAAA,EAAA,GAAA,CAAI,SAAU,CAC/C,kBAAAA,OAAA,aAAC,CAAA,aAAA,EAAA,EAAc,KAAU,CAC3B,CACD,CACH,CACF,CACF,CACF,CACF,CAAA;AAEJ,CAAA;AAEA,IAAO,6BAAQ,GAAA,mBAAA;AC9IR,IAAM,UAAA,GAAa,CAAC,WAA6B,KAAA;AACtD,EAAA,MAAM,CAAC,KAAO,EAAA,QAAQ,CAAIO,GAAAA,QAAAA,CAAwB,EAAE,CAAA;AAGpD,EAAM,MAAA,SAAA,GAAYK,YAAY,MAAM;AAClC,IAAA,MAAM,WAA0B,EAAC;AACjC,IAAA,IAAI,gBAAgB,cAAgB,EAAA;AAClC,MAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,YAAA,CAAa,QAAQ,CAAK,EAAA,EAAA;AAC5C,QAAM,MAAA,GAAA,GAAM,YAAa,CAAA,GAAA,CAAI,CAAC,CAAA;AAC9B,QAAA,IAAI,GAAK,EAAA;AACP,UAAS,QAAA,CAAA,IAAA,CAAK,EAAE,GAAK,EAAA,KAAA,EAAO,aAAa,OAAQ,CAAA,GAAG,CAAK,IAAA,EAAA,EAAI,CAAA;AAAA;AAC/D;AACF,KACK,MAAA;AACL,MAAA,MAAM,OAAU,GAAA,QAAA,CAAS,MAAO,CAAA,KAAA,CAAM,GAAG,CAAA;AACzC,MAAQ,OAAA,CAAA,OAAA,CAAQ,CAAC,MAAW,KAAA;AAC1B,QAAM,MAAA,KAAA,GAAQ,MAAO,CAAA,KAAA,CAAM,GAAG,CAAA;AAC9B,QAAA,MAAM,GAAM,GAAA,KAAA,CAAM,KAAM,EAAA,EAAG,IAAK,EAAA;AAChC,QAAA,IAAI,GAAK,EAAA;AACP,UAAS,QAAA,CAAA,IAAA,CAAK,EAAE,GAAA,EAAK,KAAO,EAAA,kBAAA,CAAmB,MAAM,IAAK,CAAA,GAAG,CAAC,CAAA,EAAG,CAAA;AAAA;AACnE,OACD,CAAA;AAAA;AAEH,IAAA,QAAA,CAAS,QAAQ,CAAA;AAAA,GACnB,EAAG,CAAC,WAAW,CAAC,CAAA;AAGhB,EAAAX,UAAU,MAAM;AACd,IAAU,SAAA,EAAA;AAAA,GACZ,EAAG,CAAC,SAAS,CAAC,CAAA;AAGd,EAAA,MAAM,OAAUW,GAAAA,WAAAA;AAAA,IACd,CAAC,KAAa,KAAkB,KAAA;AAC9B,MAAA,IAAI,gBAAgB,cAAgB,EAAA;AAClC,QAAa,YAAA,CAAA,OAAA,CAAQ,KAAK,KAAK,CAAA;AAAA,OAC1B,MAAA;AACL,QAAAR,SAAAA,CAAU,KAAK,KAAK,CAAA;AAAA;AAEtB,MAAU,SAAA,EAAA;AAAA,KACZ;AAAA,IACA,CAAC,aAAa,SAAS;AAAA,GACzB;AAGA,EAAA,MAAM,UAAaQ,GAAAA,WAAAA;AAAA,IACjB,CAAC,GAAgB,KAAA;AACf,MAAA,IAAI,gBAAgB,cAAgB,EAAA;AAClC,QAAA,YAAA,CAAa,WAAW,GAAG,CAAA;AAAA,OACtB,MAAA;AACL,QAAAP,eAAa,GAAG,CAAA;AAAA;AAElB,MAAU,SAAA,EAAA;AAAA,KACZ;AAAA,IACA,CAAC,aAAa,SAAS;AAAA,GACzB;AAEA,EAAA,OAAO,EAAE,KAAA,EAAO,OAAS,EAAA,UAAA,EAAY,SAAU,EAAA;AACjD,CAAA;;;ACrDA,IAAM,YAA4C,GAAA,CAAC,EAAE,KAAA,EAAY,KAAA;AAC/D,EAAI,IAAA;AACF,IAAM,MAAA,MAAA,GAAS,IAAK,CAAA,KAAA,CAAM,KAAK,CAAA;AAC/B,IAAA,IAAI,OAAO,MAAA,KAAW,QAAY,IAAA,MAAA,KAAW,IAAM,EAAA;AACjD,MAAO,uBAAAL,MAAA,CAAA,aAAA,CAAC,KAAI,EAAA,EAAA,KAAA,EAAO,eAAkB,EAAA,EAAA,IAAA,CAAK,SAAU,CAAA,MAAA,EAAQ,IAAM,EAAA,CAAC,CAAE,CAAA;AAAA;AACvE,WACO,CAAG,EAAA;AAAA;AAIZ,EAAA,uBAAOA,MAAA,CAAA,aAAA,CAAC,KAAI,EAAA,EAAA,KAAA,EAAO,mBAAkB,KAAM,CAAA;AAC7C,CAAA;AAEA,IAAM,cAID,CAAC,EAAE,IAAM,EAAA,MAAA,EAAQ,UAAe,KAAA;AACnC,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIO,SAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,KAAO,EAAA,QAAQ,CAAIA,GAAAA,QAAAA,CAAS,KAAK,KAAK,CAAA;AAE7C,EAAA,MAAM,aAAa,MAAM;AACvB,IAAO,MAAA,CAAA,IAAA,CAAK,KAAK,KAAK,CAAA;AACtB,IAAA,YAAA,CAAa,KAAK,CAAA;AAAA,GACpB;AAEA,EAAA,MAAM,aAAa,MAAM;AACvB,IAAA,QAAA,CAAS,KAAK,KAAK,CAAA;AACnB,IAAA,YAAA,CAAa,IAAI,CAAA;AAAA,GACnB;AAEA,EAAA,uBACEP,MAAAA,CAAA,aAAC,CAAA,SAAA,EAAA,IAAA,kBACCA,MAAA,CAAA,aAAA,CAAC,SAAS,EAAA,IAAA,EAAA,IAAA,CAAK,GAAI,CAAA,kBACnBA,MAAAA,CAAA,cAAC,KACE,EAAA,IAAA,EAAA,SAAA,mBAAYA,MAAAA,CAAA,aAAC,CAAA,QAAA,EAAA,EAAO,OAAS,EAAA,UAAA,EAAA,EAAY,MAAI,CAAY,mBAAAA,MAAA,CAAA,aAAA,CAAC,QAAO,EAAA,EAAA,OAAA,EAAS,UAAY,EAAA,EAAA,MAAI,mBAC3FA,MAAAA,CAAA,aAAC,CAAA,QAAA,EAAA,EAAO,OAAS,EAAA,MAAM,QAAS,CAAA,IAAA,CAAK,GAAG,CAAG,EAAA,EAAA,QAAM,CAChD,EAAA,SAAA,mBACCA,MAAAA,CAAA,aAAC,CAAA,UAAA,EAAA,EAAS,OAAc,QAAU,EAAA,CAAC,CAAM,KAAA,QAAA,CAAS,CAAE,CAAA,MAAA,CAAO,KAAK,CAAA,EAAG,OAAO,aAAe,EAAA,CAAA,mBAEzFA,MAAAA,CAAA,cAAC,YAAa,EAAA,EAAA,KAAA,EAAO,IAAK,CAAA,KAAA,EAAO,CAErC,CACF,CAAA;AAEJ,CAAA;AAEA,IAAM,YAA4C,GAAA,CAAC,EAAE,OAAA,EAAS,aAAkB,KAAA;AAC9E,EAAA,MAAM,EAAE,KAAO,EAAA,OAAA,EAAS,UAAW,EAAA,GAAI,WAAW,WAAW,CAAA;AAC7D,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIO,SAAS,EAAE,CAAA;AAEvC,EAAM,MAAA,aAAA,GAAgBE,QAAQ,MAAM;AAClC,IAAA,IAAI,CAAC,MAAQ,EAAA;AACX,MAAO,OAAA,KAAA;AAAA;AAGT,IAAA,OAAO,KAAM,CAAA,MAAA;AAAA,MACX,CAAC,IACC,KAAA,IAAA,CAAK,IAAI,WAAY,EAAA,CAAE,SAAS,MAAO,CAAA,WAAA,EAAa,CAAA,IAAK,KAAK,KAAM,CAAA,WAAA,GAAc,QAAS,CAAA,MAAA,CAAO,aAAa;AAAA,KACnH;AAAA,GACC,EAAA,CAAC,KAAO,EAAA,MAAM,CAAC,CAAA;AAElB,EACE,uBAAAT,MAAA,CAAA,aAAA,CAAAA,MAAA,CAAA,QAAA,EAAA,IAAA,kBACEA,MAAA,CAAA,aAAA,CAAC,KAAI,EAAA,EAAA,KAAA,EAAO,iBAAmB,EAAA,OAAA,EAAS,SAAS,CACjD,kBAAAA,MAAA,CAAA,aAAA,CAAC,KAAI,EAAA,EAAA,KAAA,EAAO,0CACVA,MAAAA,CAAA,aAAC,CAAA,KAAA,EAAA,EAAI,KAAO,EAAA,gBAAA,EAAA,kBACVA,MAAA,CAAA,aAAA,CAAC,IAAG,EAAA,EAAA,KAAA,EAAO,OAAU,EAAA,EAAA,WAAA,KAAgB,iBAAiB,eAAkB,GAAA,SAAU,CAClF,kBAAAA,MAAA,CAAA,aAAA,CAAC,YAAO,OAAS,EAAA,OAAA,EAAA,EAAS,GAAC,CAC7B,CACA,kBAAAA,MAAA,CAAA,aAAA,CAAC,KAAI,EAAA,EAAA,KAAA,EAAO,iBACV,EAAA,kBAAAA,MAAA,CAAA,aAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,IAAK,EAAA,MAAA;AAAA,MACL,WAAY,EAAA,wBAAA;AAAA,MACZ,KAAO,EAAA,MAAA;AAAA,MACP,UAAU,CAAC,CAAA,KAAM,SAAU,CAAA,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,MACzC,KAAO,EAAA;AAAA;AAAA,GAEX,CACA,kBAAAA,MAAA,CAAA,aAAA,CAAC,KAAI,EAAA,EAAA,KAAA,EAAO,0BACT,EAAA,EAAA,aAAA,CAAc,GAAI,CAAA,CAAC,IAClB,qBAAAA,MAAA,CAAA,aAAA,CAAC,WAAY,EAAA,EAAA,GAAA,EAAK,IAAK,CAAA,GAAA,EAAK,IAAY,EAAA,MAAA,EAAQ,OAAS,EAAA,QAAA,EAAU,UAAY,EAAA,CAChF,CACH,CACF,CACF,CAAA;AAEJ,CAAA;AAEA,IAAO,qBAAQ,GAAA,YAAA;;;AC9FR,IAAM,UAAgC,GAAA;AAAA,EAC3C;AAAA,IACE,EAAI,EAAA,IAAA;AAAA,IACJ,KAAO,EAAA,uBAAA;AAAA,IACP,MAAA,EAAQ,CAAC,EAAE,IAAM,EAAA,YAAA,EAAc,KAAO,EAAA,cAAA,EAAM,IAAM,EAAA,MAAA,EAAQ,WAAa,EAAA,mDAAA,EAAa;AAAA;AAExF,CAAA;AAWO,IAAM,SAAuF,GAAA;AAAA,EAClG;AAAA,IACE,EAAI,EAAA,aAAA;AAAA,IACJ,KAAO,EAAA,uCAAA;AAAA,IACP,SAAW,EAAA,mBAAA;AAAA,IACX,OAAS,EAAA;AAAA,GACX;AAAA,EACA;AAAA,IACE,EAAI,EAAA,aAAA;AAAA,IACJ,KAAO,EAAA,wCAAA;AAAA,IACP,SAAW,EAAA,yBAAA;AAAA,IACX,OAAS,EAAA;AAAA,GACX;AAAA,EACA;AAAA,IACE,EAAI,EAAA,eAAA;AAAA,IACJ,KAAO,EAAA,oDAAA;AAAA;AAAA,IAEP,SAAA,EAAW,CAAC,KAAA,qBAAUA,MAAAA,CAAA,cAAC,qBAAc,EAAA,EAAA,GAAG,KAAO,EAAA,WAAA,EAAY,cAAe,EAAA,CAAA;AAAA,IAC1E,OAAS,EAAA;AAAA,GACX;AAAA,EACA;AAAA,IACE,EAAI,EAAA,mBAAA;AAAA,IACJ,KAAO,EAAA,2BAAA;AAAA,IACP,SAAA,EAAW,CAAC,KAAA,qBAAUA,MAAAA,CAAA,cAAC,qBAAc,EAAA,EAAA,GAAG,KAAO,EAAA,WAAA,EAAY,QAAS,EAAA,CAAA;AAAA,IACpE,OAAS,EAAA;AAAA,GACX;AAAA,EACA;AAAA,IACE,EAAI,EAAA,aAAA;AAAA,IACJ,KAAO,EAAA,iCAAA;AAAA,IACP,SAAW,EAAA,mBAAA;AAAA,IACX,OAAS,EAAA;AAAA;AAAA,GACX;AAAA,EACA;AAAA,IACE,EAAI,EAAA,iBAAA;AAAA,IACJ,KAAO,EAAA,uCAAA;AAAA,IACP,SAAW,EAAA,6BAAA;AAAA,IACX,OAAS,EAAA;AAAA,GACX;AAAA,EACA;AAAA,IACE,EAAI,EAAA,iBAAA;AAAA,IACJ,KAAO,EAAA,iCAAA;AAAA,IACP,SAAW,EAAA,6BAAA;AAAA,IACX,OAAS,EAAA;AAAA;AAEb,CAAA;ACvEO,IAAM,iBAAiB,MAAuB;AACnD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIO,QAA0B,CAAA;AAAA,IACtD,GAAK,EAAA;AAAA,GACN,CAAA;AAED,EAAAN,UAAU,MAAM;AACd,IAAM,MAAA,EAAE,QAAS,EAAA,GAAI,MAAO,CAAA,QAAA;AAC5B,IAAA,UAAA,CAAW,EAAE,GAAA,EAAK,0BAA2B,CAAA,QAAQ,GAAG,CAAA;AAAA,GAC1D,EAAG,EAAE,CAAA;AAEL,EAAO,OAAA,OAAA;AACT,CAAA;;;ACSO,IAAM,YAAsC,CAAC;AAAA,EAClD,OAAA;AAAA,EACA,WAAA;AAAA,EACA,iBAAA;AAAA,EACA,WAAc,GAAA;AAChB,CAAM,KAAA;AAGJ,EAAAA,UAAU,MAAM;AACd,IAA6B,4BAAA,EAAA;AAE7B,IAAA,OAAO,MAAM;AACX,MAAkB,iBAAA,EAAA;AAAA,KACpB;AAAA,GACF,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,cAAc,cAAe,EAAA;AAEnC,EAAM,MAAA,GAAA,GAAM,eAAe,WAAY,CAAA,GAAA;AAGvC,EAAA,MAAMK,aAAY,iBAAqB,IAAA,SAAA;AACvC,EAAA,MAAM,CAAC,UAAA,EAAY,WAAW,CAAA,GAAIC,SAAS,KAAK,CAAA;AAEhD,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIA,SAA0C,IAAI,CAAA;AAGxF,EAAA,MAAM,YAAY,CAAC,OAAA,EAAS,OAAO,KAAK,CAAA,CAAE,SAAS,GAAG,CAAA;AAGtD,EAAM,MAAA,eAAA,GAAkB,CAAC,aAA4C,KAAA;AACnE,IAAA,gBAAA,CAAiB,MAAM,aAAa,CAAA;AACpC,IAAA,WAAA,CAAY,KAAK,CAAA;AAAA,GACnB;AAGA,EAAA,MAAM,qBAAqB,MAAM;AAC/B,IAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA,GACvB;AAGA,EAAA,IAAI,CAAC,SAAW,EAAA;AACd,IAAO,OAAA,IAAA;AAAA;AAIT,EAAA,MAAM,aAAa,MAAM;AACvB,IAAY,WAAA,CAAA,CAAC,IAAS,KAAA,CAAC,IAAI,CAAA;AAE3B,IAAA,IAAI,CAAC,UAAY,EAAA;AACf,MAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA;AACvB,GACF;AAGA,EAAA,MAAM,qBAAqBD,UAAU,CAAA,MAAA;AAAA,IACnC,CAAC,SACC,IAAK,CAAA,OAAA;AAAA;AAAA,KAEJ,IAAK,CAAA,EAAA,KAAO,aAAkB,IAAA,IAAA,CAAK,OAAO,aAAiB,IAAA,OAAA;AAAA,GAChE;AAGA,EAAA,IAAI,aAAe,EAAA;AACjB,IAAA,MAAM,gBAAmB,GAAA,aAAA;AAGzB,IAAA,uBAAON,MAAA,CAAA,aAAA,CAAC,gBAAiB,EAAA,EAAA,OAAA,EAAS,oBAAoB,OAAkB,EAAA,CAAA;AAAA;AAI1E,EAAA,uBACEA,MAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAO,EAAA;AAAA,QACL,QAAU,EAAA,OAAA;AAAA,QACV,KAAO,EAAA,MAAA;AAAA,QACP,MAAQ,EAAA,MAAA;AAAA,QACR,MAAQ,EAAA;AAAA;AACV,KAAA;AAAA,oBAEAA,MAAAA,CAAA,aAAC,CAAA,uBAAA,EAAA,EAAe,SAAS,UAAY,EAAA,CAAA;AAAA,IACpC,UAAA,oBACCA,MAAA,CAAA,aAAA;AAAA,MAAC,kBAAA;AAAA,MAAA;AAAA,QACC,SAAW,EAAA,kBAAA;AAAA,QACX,eAAiB,EAAA,eAAA;AAAA,QACjB,OAAA,EAAS,MAAM,WAAA,CAAY,KAAK,CAAA;AAAA,QAChC;AAAA;AAAA;AACF,GAEJ;AAEJ;AChHA,IAAMa,SAAW,GAAA,EAAA;AAGV,SAAS,cAAc,MAAoC,EAAA;AAChE,EAAI,IAAA,CAACC,UAAY,EAAA;AACf,IAAA;AAAA;AAGF,EAAM,MAAA,GAAA,GAAMC,0BAA2B,CAAA,QAAA,CAAS,QAAQ,CAAA;AAKxD,EAAA,IAAI,QAAQ,KAAO,EAAA;AACjB,IAAA,MAAM,EAAE,UAAY,EAAA,MAAA,EAAQ,aAAa,QAAS,EAAA,GAAIC,cAAc,QAAS,EAAA;AAG7E,IAAI,IAAA,QAAA,CAAS,UAAUH,SAAU,EAAA;AAG/B,MAAI,IAAA,CAAC,mBAAoB,CAAA,UAAU,CAAG,EAAA;AACpC,QAAA,QAAA,CAAS,KAAM,EAAA;AAAA;AACjB;AAKF,IAAM,MAAA,SAAA,GAAY,KAAK,GAAI,EAAA;AAC3B,IAAA,MAAM,WAAc,GAAA;AAAA,MAClB,GAAA,EAAK,OAAO,GAAO,IAAA,EAAA;AAAA,MACnB,MAAA,EAAQ,OAAO,MAAU,IAAA,EAAA;AAAA,MACzB,SAAS,MAAO,CAAA,OAAA;AAAA,MAChB,QAAQ,MAAO,CAAA,MAAA;AAAA,MACf,MAAM,MAAO,CAAA,IAAA;AAAA,MACb;AAAA,KACF;AAEA,IAAA,IAAI,MAAQ,EAAA;AACV,MAAO,OAAA,IAAI,OAAQ,CAAA,CAAC,QAAa,KAAA;AAC/B,QAAA,WAAA,CAAY,EAAE,OAAA,EAAS,WAAa,EAAA,QAAA,EAAU,CAAA;AAAA,OAC/C,CAAA;AAAA,KACI,MAAA;AACL,MAAA,UAAA,CAAW,WAAW,CAAA;AAAA;AACxB;AAEJ;AAGO,SAAS,eAAe,QAAyB,EAAA;AACtD,EAAI,IAAA,CAACC,UAAY,EAAA;AACf,IAAA;AAAA;AAGF,EAAM,MAAA,GAAA,GAAMC,0BAA2B,CAAA,QAAA,CAAS,QAAQ,CAAA;AAKxD,EAAA,IAAI,QAAQ,KAAO,EAAA;AACjB,IAAA,MAAM,EAAE,WAAa,EAAA,MAAA,EAAQ,cAAc,SAAU,EAAA,GAAIC,cAAc,QAAS,EAAA;AAGhF,IAAI,IAAA,SAAA,CAAU,UAAUH,SAAU,EAAA;AAGhC,MAAI,IAAA,CAAC,mBAAoB,CAAA,UAAU,CAAG,EAAA;AACpC,QAAA,SAAA,CAAU,KAAM,EAAA;AAAA;AAClB;AAIF,IAAM,MAAA,EAAE,QAAW,GAAA,QAAA;AACnB,IAAA,MAAM,YAAe,GAAA;AAAA,MACnB,GAAA,EAAK,OAAO,GAAO,IAAA,EAAA;AAAA,MACnB,MAAA,EAAQ,OAAO,MAAU,IAAA,EAAA;AAAA,MACzB,QAAQ,QAAS,CAAA,MAAA;AAAA,MACjB,YAAY,QAAS,CAAA,UAAA;AAAA,MACrB,SAAS,QAAS,CAAA,OAAA;AAAA,MAClB,MAAM,QAAS,CAAA;AAAA,KACjB;AAEA,IAAA,IAAI,MAAQ,EAAA;AACV,MAAO,OAAA,IAAI,OAAQ,CAAA,CAAC,QAAa,KAAA;AAC/B,QAAA,YAAA,CAAa,EAAE,QAAA,EAAU,YAAc,EAAA,QAAA,EAAU,CAAA;AAAA,OAClD,CAAA;AAAA,KACI,MAAA;AACL,MAAA,WAAA,CAAY,YAAY,CAAA;AAAA;AAC1B;AAEJ;AAEO,SAAS,YAAY,KAAmB,EAAA;AAC7C,EAAI,IAAA,CAACC,UAAY,EAAA;AACf,IAAA;AAAA;AAGF,EAAM,MAAA,GAAA,GAAMC,0BAA2B,CAAA,QAAA,CAAS,QAAQ,CAAA;AAKxD,EAAA,IAAI,QAAQ,KAAO,EAAA;AACjB,IAAA,MAAM,EAAE,QAAU,EAAA,MAAA,EAAQ,WAAW,MAAO,EAAA,GAAIC,cAAc,QAAS,EAAA;AAIvE,IAAI,IAAA,MAAA,CAAO,UAAUH,SAAU,EAAA;AAG7B,MAAI,IAAA,CAAC,mBAAoB,CAAA,UAAU,CAAG,EAAA;AACpC,QAAA,MAAA,CAAO,KAAM,EAAA;AAAA;AACf;AAIF,IAAM,MAAA,EAAE,QAAW,GAAA,KAAA;AACnB,IAAA,MAAM,SAAY,GAAA;AAAA,MAChB,GAAA,EAAK,QAAQ,GAAO,IAAA,EAAA;AAAA,MACpB,MAAA,EAAQ,QAAQ,MAAU,IAAA,EAAA;AAAA,MAC1B,SAAS,KAAM,CAAA,OAAA;AAAA,MACf,QAAQ,KAAM,CAAA,MAAA;AAAA,MACd,QAAA,EAAU,MAAM,QACZ,GAAA;AAAA,QACA,GAAK,EAAA,KAAA,CAAM,QAAS,CAAA,MAAA,EAAQ,GAAO,IAAA,EAAA;AAAA,QACnC,MAAQ,EAAA,KAAA,CAAM,QAAS,CAAA,MAAA,EAAQ,MAAU,IAAA,EAAA;AAAA,QACzC,MAAA,EAAQ,MAAM,QAAS,CAAA,MAAA;AAAA,QACvB,UAAA,EAAY,MAAM,QAAS,CAAA,UAAA;AAAA,QAC3B,OAAA,EAAS,MAAM,QAAS,CAAA,OAAA;AAAA,QACxB,IAAA,EAAM,MAAM,QAAS,CAAA;AAAA,OAErB,GAAA;AAAA,KACN;AAEA,IAAA,IAAI,MAAQ,EAAA;AACV,MAAO,OAAA,IAAI,OAAQ,CAAA,CAAC,QAAa,KAAA;AAC/B,QAAA,SAAA,CAAU,EAAE,KAAA,EAAO,SAAW,EAAA,QAAA,EAAU,CAAA;AAAA,OACzC,CAAA;AAAA,KACI,MAAA;AACL,MAAA,QAAA,CAAS,SAAS,CAAA;AAAA;AACpB;AAEJ","file":"index.js","sourcesContent":["import React from 'react';\n\nimport { LogType } from '../types';\n\nexport const debugFloatingButtonStyle: React.CSSProperties = {\n position: 'fixed',\n right: '10px',\n bottom: '80px',\n borderRadius: '50%',\n backgroundColor: '#f0f0f0',\n border: '1px solid #ccc',\n padding: '8px 12px',\n fontWeight: 'bold',\n zIndex: 9999\n};\n\nexport const debugMenuPanelStyle: React.CSSProperties = {\n position: 'fixed',\n right: '20px',\n bottom: '90px',\n display: 'flex',\n flexDirection: 'column',\n maxHeight: '400px',\n backgroundColor: '#ffffff',\n border: '1px solid #e0e0e0',\n borderRadius: '8px',\n boxShadow: '0 4px 8px rgba(0, 0, 0, 0.1)',\n zIndex: 10000,\n overflowY: 'auto'\n};\n\nexport const panelHeaderStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '10px 15px',\n backgroundColor: '#f5f5f5',\n borderBottom: '1px solid #e0e0e0',\n flexShrink: 0\n};\n\nexport const h2Style: React.CSSProperties = {\n margin: 0,\n fontSize: '16px'\n};\n\nexport const modalOverlayStyle: React.CSSProperties = {\n position: 'fixed',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n zIndex: 9999\n};\n\nexport const debugFeaturePanelStyle: React.CSSProperties = {\n margin: '20px',\n position: 'fixed',\n top: 0,\n left: 0,\n width: 'calc(100% - 40px)',\n height: 'calc(100% - 40px)',\n backgroundColor: '#ffffff',\n zIndex: 10001,\n display: 'flex',\n flexDirection: 'column'\n};\n\nexport const panelToolbarStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n padding: '10px',\n borderBottom: '1px solid #e0e0e0',\n gap: '8px',\n flexShrink: 0\n};\n\nexport const logListContainerStyle: React.CSSProperties = {\n flex: 1,\n padding: '10px',\n overflowY: 'auto',\n fontFamily: 'monospace',\n fontSize: '12px',\n backgroundColor: '#ffffff'\n};\n\nexport const logItemStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'flex-start',\n padding: '4px 0',\n borderBottom: '1px solid #e0e0e0'\n};\n\nexport const logTimestampStyle: React.CSSProperties = {\n marginRight: '10px',\n color: '#888888'\n};\n\nexport const logMessageStyle: React.CSSProperties = {\n margin: 0,\n wordBreak: 'break-all',\n whiteSpace: 'pre-wrap'\n};\n\nexport const logTypeStyles: { [key in LogType | 'return']: React.CSSProperties } = {\n log: { color: '#333333' },\n info: { color: '#007bff' },\n warn: { color: '#ffc107' },\n error: { color: '#dc3545' },\n debug: { color: '#6c757d' },\n return: { color: '#8a2be2' }\n};\n\nexport const loginFormContainerStyle: React.CSSProperties = {\n display: 'flex',\n flex: 1,\n flexDirection: 'column',\n gap: '15px',\n padding: '20px',\n overflowY: 'auto'\n};\n\nexport const formActionsStyle: React.CSSProperties = {\n display: 'flex',\n justifyContent: 'flex-start',\n marginTop: '10px'\n};\n\nexport const searchContainerStyle: React.CSSProperties = {\n display: 'flex',\n gap: '8px',\n marginBottom: '16px',\n alignItems: 'center'\n};\n\nexport const logListStyle: React.CSSProperties = {\n overflowY: 'auto'\n};\n\nexport const logSummaryStyle: React.CSSProperties = {\n wordBreak: 'break-all',\n margin: 0,\n cursor: 'pointer'\n};\n\nexport const logContentStyle: React.CSSProperties = {\n padding: '8px',\n wordBreak: 'break-all',\n whiteSpace: 'pre-wrap',\n backgroundColor: '#f5f5f5',\n borderRadius: '4px'\n};\n\nexport const pageNavigationContentStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: '10px',\n padding: '20px'\n};\n\nexport const h3Style: React.CSSProperties = {\n margin: 0,\n fontSize: '16px'\n};\n\nexport const scriptExecutorContentStyle: React.CSSProperties = {\n display: 'flex',\n flex: 1,\n flexDirection: 'column',\n overflow: 'hidden'\n};\n\nexport const scriptInputSectionStyle: React.CSSProperties = {\n display: 'flex',\n flex: 1,\n flexDirection: 'column',\n minHeight: '150px',\n borderBottom: '1px solid #e0e0e0'\n};\n\nexport const scriptTextareaStyle: React.CSSProperties = {\n flex: 1,\n width: '100%',\n padding: '10px',\n fontFamily: 'monospace',\n fontSize: '14px',\n resize: 'none',\n outline: 'none',\n border: 'none'\n};\n\nexport const scriptActionsStyle: React.CSSProperties = {\n display: 'flex',\n justifyContent: 'flex-end',\n gap: '8px',\n padding: '8px',\n borderTop: '1px solid #e0e0e0'\n};\n\nexport const scriptOutputSectionStyle: React.CSSProperties = {\n display: 'flex',\n flex: 1,\n flexDirection: 'column',\n overflow: 'hidden'\n};\n\nexport const storageSearchInputStyle: React.CSSProperties = {\n width: '100%',\n padding: '8px',\n border: '1px solid #ccc',\n borderRadius: '4px'\n};\n\nexport const storageTableContainerStyle: React.CSSProperties = {\n flex: 1,\n overflowY: 'auto',\n padding: '10px'\n};\n\nexport const menuItemStyle: React.CSSProperties = {\n cursor: 'pointer',\n padding: '8px 12px'\n};\n\nexport const clearButtonStyle: React.CSSProperties = {\n marginLeft: 'auto'\n};\n\nexport const networkLogContainerStyle: React.CSSProperties = {\n padding: '10px',\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n overflow: 'hidden'\n};\n\nexport const flex1Style: React.CSSProperties = {\n flex: 1\n};\n\nexport const holdButtonsContainerStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'row',\n gap: '8px',\n marginBottom: '10px'\n};\n\nexport const textareaStyle: React.CSSProperties = {\n width: '100%',\n minHeight: '80px'\n};\n","import React, { useState, useRef, useEffect } from 'react';\n\n/**\n * @file ๋๋ฒ๊ทธ ํด์ ์ด๊ธฐ ์ํ ํ๋กํ
๋ฒํผ ์ปดํฌ๋ํธ์
๋๋ค.\n * @description ํ๋ฉด ์ฐ์ธก ํ๋จ์ ๊ณ ์ ๋์ด ์์ผ๋ฉฐ, ํด๋ฆญ ์ ๋ฉ๋ด ํจ๋์ ํ ๊ธํฉ๋๋ค. ๋ฒํผ์ ๋๋๊ทธํ์ฌ ์์น๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค.\n */\n\nimport { debugFloatingButtonStyle } from '../styles/styles';\n\ninterface FloatingButtonProps {\n /** ๋ฒํผ ํด๋ฆญ ์ ํธ์ถ๋ ํจ์ */\n onClick: () => void;\n}\n\nconst FloatingButton: React.FC<FloatingButtonProps> = ({ onClick }) => {\n const [position, setPosition] = useState({ x: 0, y: 0 });\n const [isDragging, setIsDragging] = useState(false);\n const [isVisible, setIsVisible] = useState(false);\n\n // Gesture detection refs\n const gestureStep = useRef<number>(0); // 0: initial, 1: down detected\n const gestureTimeout = useRef<NodeJS.Timeout | null>(null);\n const globalDragStart = useRef<{ x: number; y: number } | null>(null);\n\n const dragHappened = useRef(false);\n const dragStartPos = useRef({ x: 0, y: 0 });\n const elementStartPos = useRef({ x: 0, y: 0 });\n\n // Click detection refs\n const clickCount = useRef(0);\n const clickTimeout = useRef<NodeJS.Timeout | null>(null);\n\n // Global gesture detection\n useEffect(() => {\n const handleGlobalMouseDown = (e: MouseEvent) => {\n globalDragStart.current = { x: e.clientX, y: e.clientY };\n };\n\n const handleGlobalMouseUp = (e: MouseEvent) => {\n if (!globalDragStart.current) {\n return;\n }\n\n const dx = e.clientX - globalDragStart.current.x;\n const dy = e.clientY - globalDragStart.current.y;\n const absDx = Math.abs(dx);\n const absDy = Math.abs(dy);\n\n //drag ์ ์ค์ฒ ์ต์๊ฐ\n const THRESHOLD = 200;\n\n //down ์ ์ค์ฒ\n if (dy > THRESHOLD && absDy > absDx) {\n if (gestureStep.current === 0) {\n gestureStep.current = 1;\n //์ ์ค์ฒ๊ฐ ๋๋์ง ์์๋ค๋ฉด 2์ด ํ์ ์ด๊ธฐํ\n if (gestureTimeout.current) {\n clearTimeout(gestureTimeout.current);\n }\n gestureTimeout.current = setTimeout(() => {\n gestureStep.current = 0;\n }, 2000);\n }\n } else if (dx > THRESHOLD && absDx > absDy) {\n //right ์ ์ค์ฒ\n if (gestureStep.current === 1) {\n setIsVisible((prev) => !prev);\n gestureStep.current = 0;\n if (gestureTimeout.current) {\n clearTimeout(gestureTimeout.current);\n }\n } else {\n //Wrong sequence, reset\n gestureStep.current = 0;\n }\n } else {\n //Invalid gesture, reset\n // Optional: can make it stricter by resetting on any wrong click\n }\n\n globalDragStart.current = null;\n };\n\n window.addEventListener('mousedown', handleGlobalMouseDown);\n window.addEventListener('mouseup', handleGlobalMouseUp);\n\n return () => {\n window.removeEventListener('mousedown', handleGlobalMouseDown);\n window.removeEventListener('mouseup', handleGlobalMouseUp);\n if (gestureTimeout.current) {\n clearTimeout(gestureTimeout.current);\n }\n };\n }, []);\n\n // Global click detection for visibility toggle\n useEffect(() => {\n const handleGlobalClick = () => {\n clickCount.current += 1;\n\n if (clickCount.current === 1) {\n clickTimeout.current = setTimeout(() => {\n clickCount.current = 0;\n }, 3000);\n }\n\n if (clickCount.current >= 10) {\n setIsVisible((prev) => !prev);\n clickCount.current = 0;\n if (clickTimeout.current) {\n clearTimeout(clickTimeout.current);\n }\n }\n };\n\n window.addEventListener('click', handleGlobalClick);\n\n return () => {\n window.removeEventListener('click', handleGlobalClick);\n if (clickTimeout.current) {\n clearTimeout(clickTimeout.current);\n }\n };\n }, []);\n\n const handleMouseDown = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (e.button !== 0) {\n return;\n }\n dragHappened.current = false;\n setIsDragging(true);\n dragStartPos.current = { x: e.clientX, y: e.clientY };\n elementStartPos.current = { ...position };\n\n const handleMouseMove = (event: MouseEvent) => {\n const dx = event.clientX - dragStartPos.current.x;\n const dy = event.clientY - dragStartPos.current.y;\n\n if (!dragHappened.current && (Math.abs(dx) > 5 || Math.abs(dy) > 5)) {\n dragHappened.current = true;\n }\n\n setPosition({\n x: elementStartPos.current.x + dx,\n y: elementStartPos.current.y + dy\n });\n };\n\n const handleMouseUp = () => {\n window.removeEventListener('mousemove', handleMouseMove);\n window.removeEventListener('mouseup', handleMouseUp);\n setIsDragging(false);\n };\n\n window.addEventListener('mousemove', handleMouseMove);\n window.addEventListener('mouseup', handleMouseUp);\n };\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (dragHappened.current) {\n e.preventDefault();\n e.stopPropagation();\n\n return;\n }\n onClick();\n };\n\n const buttonStyle: React.CSSProperties = {\n ...debugFloatingButtonStyle,\n transform: `translate(${position.x}px, ${position.y}px)`,\n cursor: isDragging ? 'grabbing' : 'grab',\n display: isVisible ? 'flex' : 'none' // Hide until activated\n };\n\n return (\n <button style={buttonStyle} onMouseDown={handleMouseDown} onClick={handleClick}>\n DEBUG\n </button>\n );\n};\n\nexport default FloatingButton;\n","import React from 'react';\n\nimport { getCookie, setCookie } from 'sales-frontend-utils/cookie';\n\nimport { panelHeaderStyle, h2Style, menuItemStyle } from '../../styles/styles';\n\nexport function ChangeHost() {\n const handleHost = (host: 'prd' | 'stg' | 'dev' | 'local') => {\n setCookie('dsp-debug-mode-env', host);\n alert(`ํธ์คํธ๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค.` + `:${host}`);\n console.log('ํธ์คํธ๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค.', {\n 'dsp-debug-mode-env': getCookie('dsp-debug-mode-env')\n });\n };\n\n return (\n <>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>APIํธ์คํธ</h2>\n </div>\n <ul>\n <li style={menuItemStyle} onClick={() => handleHost('local')}>\n local\n </li>\n <li style={menuItemStyle} onClick={() => handleHost('dev')}>\n dev\n </li>\n <li style={menuItemStyle} onClick={() => handleHost('stg')}>\n stg\n </li>\n {/* <li style={menuItemStyle} onClick={() => handleHost('prd')}>\n prd\n </li> */}\n </ul>\n </>\n );\n}\n","import React, { useEffect } from 'react';\n\nimport { deleteCookie, getCookie, setCookie } from 'sales-frontend-utils/cookie';\n\nimport { panelHeaderStyle, h2Style, menuItemStyle } from '../../styles/styles';\n\nexport const filterNameCookieKey = 'dsp-debug-mode-filter-name';\n\nexport type DebugFilterKey =\n | 'downloader'\n | 'console-log'\n | 'auth-token'\n | 'validation-off'\n | 'http-log'\n | 'data-init-button';\ninterface FilterInfo {\n key: DebugFilterKey;\n description: string;\n}\nconst filterList: FilterInfo[] = [\n {\n key: 'downloader',\n description: '๋ค์ด๋ก๋ ํ
๋ถ๊ธฐ ํ์ธ์ฉ'\n },\n {\n key: 'console-log',\n description: '์ฝ์๋ก๊ทธ on/off'\n },\n {\n key: 'auth-token',\n description: '์ฟ ํค์์ ํ ํฐํ๋'\n },\n {\n key: 'validation-off',\n description: '์ ํจ์ฑ๊ฒ์ฌ off'\n },\n {\n key: 'http-log',\n description: 'http ์์ฒญ/์๋ต ๋ก๊ทธ on/off'\n },\n {\n key: 'data-init-button',\n description: '์์๋จ๊ณ,์ด๊ธฐํ ๋ฒํผ ์ถ๊ฐ'\n }\n];\n\nexport function Filter() {\n const [filterName, setFilterName] = React.useState('');\n\n useEffect(() => {\n const filterName = getCookie(filterNameCookieKey);\n setFilterName(filterName);\n }, []);\n\n return (\n <>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>๋๋ฒ๊น
์ต์
</h2>\n </div>\n <ul>\n {/* filterList ๋ฅผ ์ฒดํฌ๋ฐ์ค ํํ๋ก ๋ณด์ฌ์ฃผ๊ณ , ์ฒดํฌ์, filterName์ ์ถ๊ฐํ๊ณ , ์ฒดํฌํด์ ์, filterName์์ ์ ๊ฑฐํ๋ค. */}\n {filterList.map((filter) => (\n <li style={menuItemStyle} key={filter.key}>\n <input\n type=\"checkbox\"\n checked={filterName.includes(filter.key)}\n onChange={(e) => {\n if (e.target.checked) {\n // prev๊ฐ ์๋ ๊ฒฝ์ฐ๋ ๊ทธ๋ฅ ์ถ๊ฐํ๊ณ , ์๋ ๊ฒฝ์ฐ๋ ,๋ฅผ ์ถ๊ฐํ์ฌ ์ถ๊ฐํ๋ค.\n setFilterName((prev) => {\n if (prev) {\n const newFilterName = `${prev},${filter.key}`;\n setCookie(filterNameCookieKey, newFilterName);\n\n return newFilterName;\n } else {\n setCookie(filterNameCookieKey, filter.key);\n\n return filter.key;\n }\n });\n } else {\n // prev๊ฐ ์๋ ๊ฒฝ์ฐ๋ ๊ทธ๋ฅ ์ ๊ฑฐํ๊ณ , ์๋ ๊ฒฝ์ฐ๋ ,๋ฅผ ์ ๊ฑฐํ์ฌ ์ ๊ฑฐํ๋ค.\n setFilterName((prev) => {\n // 1๊ฐ๋ง ๋จ์ ๊ฒฝ์ฐ๋ ์ญ์ , 2๊ฐ์ด์์ผ๊ฒฝ์ฐ๋ง replace๋ฅผ ์ฌ์ฉํ๋ค.\n if (prev.includes(',')) {\n // ,๋ฅผ ๊ธฐ์ค์ผ๋ก splitํ์ฌ ๋ฐฐ์ด๋ก ๋ง๋ ๋ค.\n const arr = prev.split(',');\n // filter.key๋ฅผ ์ ๊ฑฐํ๋ค.\n const newFilterName = arr.filter((item) => item !== filter.key).join(',');\n setCookie(filterNameCookieKey, newFilterName);\n\n return newFilterName;\n } else {\n deleteCookie(filterNameCookieKey);\n\n return '';\n }\n });\n }\n }}\n />\n {filter.key}\n </li>\n ))}\n </ul>\n </>\n );\n}\n","import React from 'react';\n\nimport { getCookie, setCookie } from 'sales-frontend-utils/cookie';\n\nimport { panelHeaderStyle, h2Style, menuItemStyle } from '../../styles/styles';\n\nexport function FormFactor() {\n const handleFormFactor = (formFactor: string) => {\n setCookie('x-channel-formfactor', formFactor);\n alert(`ํผํฉํฐ๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค.` + `:${formFactor}`);\n console.log('ํผํฉํฐ๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค.', {\n 'x-channel-formfactor': getCookie('x-channel-formfactor')\n });\n };\n\n return (\n <>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>ํผํฉํฐ</h2>\n </div>\n <ul>\n <li style={menuItemStyle} onClick={() => handleFormFactor('tablet')}>\n Tablet\n </li>\n <li style={menuItemStyle} onClick={() => handleFormFactor('phone')}>\n Phone\n </li>\n <li style={menuItemStyle} onClick={() => handleFormFactor('pc')}>\n PC\n </li>\n </ul>\n </>\n );\n}\n","import React from 'react';\n\nimport { deleteCookie, getCookie } from 'sales-frontend-utils/cookie';\n\nimport { h2Style, menuItemStyle, panelHeaderStyle } from '../../styles/styles';\n\nexport function InitRefresh() {\n const handleDeleteHostCookie = () => {\n deleteCookie('dsp-debug-mode-env');\n alert('ํธ์คํธ๊ฐ ์ญ์ ๋์์ต๋๋ค.');\n console.log('ํธ์คํธ๊ฐ ์ญ์ ๋์์ต๋๋ค.', {\n 'dsp-debug-mode-env': getCookie('dsp-debug-mode-env')\n });\n };\n\n const handleDeleteTokenCookie = () => {\n deleteCookie('accessToken');\n alert('ํ ํฐ์ฟ ํค๊ฐ ์ญ์ ๋์์ต๋๋ค.');\n console.log('ํ ํฐ์ฟ ํค๊ฐ ์ญ์ ๋์์ต๋๋ค.', {\n accessToken: getCookie('accessToken')\n });\n };\n const handleDeleteCustomCookie = () => {\n deleteCookie('x-channel-appversion');\n deleteCookie('x-channel-deviceid');\n deleteCookie('x-channel-devicemodel');\n deleteCookie('x-channel-formfactor');\n deleteCookie('x-channel-loginchannel');\n deleteCookie('x-channel-logintype');\n deleteCookie('x-channel-platformname');\n deleteCookie('x-channel-platformversion');\n deleteCookie('x-channel-screenid');\n deleteCookie('x-channel-business-work-division-code');\n alert('์ปค์คํ
์ฟ ํค๊ฐ ์ญ์ ๋์์ต๋๋ค.');\n console.log('์ปค์คํ
์ฟ ํค๊ฐ ์ญ์ ๋์์ต๋๋ค.', {\n 'x-channel-appversion': getCookie('x-channel-appversion'),\n 'x-channel-deviceid': getCookie('x-channel-deviceid'),\n 'x-channel-devicemodel': getCookie('x-channel-devicemodel'),\n 'x-channel-formfactor': getCookie('x-channel-formfactor'),\n 'x-channel-loginchannel': getCookie('x-channel-loginchannel'),\n 'x-channel-logintype': getCookie('x-channel-logintype'),\n 'x-channel-platformname': getCookie('x-channel-platformname'),\n 'x-channel-platformversion': getCookie('x-channel-platformversion'),\n 'x-channel-screenid': getCookie('x-channel-screenid'),\n 'x-channel-business-work-division-code': getCookie('x-channel-business-work-division-code')\n });\n };\n\n return (\n <>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>์ด๊ธฐํ</h2>\n </div>\n <ul>\n <li style={menuItemStyle}>\n <button\n onClick={() => {\n window.location.reload();\n }}\n >\n ์๋ก๊ณ ์นจ\n </button>\n </li>\n <li style={menuItemStyle}>\n <button onClick={handleDeleteHostCookie}>Host ์ญ์ </button>\n </li>\n <li style={menuItemStyle}>\n <button onClick={handleDeleteCustomCookie}>์ปค์คํ
(x-channel-) ์ญ์ </button>\n </li>\n <li style={menuItemStyle}>\n <button onClick={handleDeleteTokenCookie}>ํ ํฐ ์ญ์ </button>\n </li>\n </ul>\n </>\n );\n}\n","import React from 'react';\n\nimport { ChangeHost } from '../features/change-host';\nimport { Filter } from '../features/filter';\nimport { FormFactor } from '../features/form-factor';\nimport { InitRefresh } from '../features/init-refresh';\nimport { debugMenuPanelStyle, h2Style, menuItemStyle, modalOverlayStyle, panelHeaderStyle } from '../styles/styles';\nimport { DebugToolServiceCode, MenuItem } from '../types';\n\n/**\n * @file ๋๋ฒ๊ทธ ํด์ ๊ธฐ๋ฅ ๋ชฉ๋ก์ ๋ณด์ฌ์ฃผ๋ ๋ฉ๋ด ํจ๋ ์ปดํฌ๋ํธ์
๋๋ค.\n * @description `config.ts`์์ ์ ์๋ ๋ฉ๋ด ์์ดํ
๋ค์ ๋ฆฌ์คํธ ํํ๋ก ๋ณด์ฌ์ค๋๋ค.\n */\n\ninterface MenuPanelProps {\n /** ํ์ํ ๋ฉ๋ด ์์ดํ
์ ๋ฐฐ์ด */\n menuItems: (Omit<MenuItem, 'component'> & { component: React.ComponentType<any> })[];\n /** ๋ฉ๋ด ์์ดํ
ํด๋ฆญ ์ ํธ์ถ๋ ์ฝ๋ฐฑ ํจ์ */\n onMenuItemClick: (component: React.ComponentType) => void;\n /** ํจ๋์ ๋ซ์ ๋ ํธ์ถ๋ ์ฝ๋ฐฑ ํจ์ */\n onClose: () => void;\n serviceCode: DebugToolServiceCode;\n}\n\nconst MenuPanel: React.FC<MenuPanelProps> = ({ menuItems, onMenuItemClick, onClose, serviceCode }) => {\n return (\n <>\n <div style={modalOverlayStyle} onClick={onClose} />\n <div style={debugMenuPanelStyle}>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>Debug Menu</h2>\n <button onClick={onClose}>X</button>\n </div>\n <ul>\n {menuItems.map((item) => (\n <li key={item.id} onClick={() => onMenuItemClick(item.component)} style={menuItemStyle}>\n {item.label}\n </li>\n ))}\n </ul>\n {serviceCode === 'dsp' && (\n <>\n <Filter />\n <FormFactor />\n <ChangeHost />\n <InitRefresh />\n </>\n )}\n </div>\n </>\n );\n};\n\nexport default MenuPanel;\n","import { getCookie } from 'sales-frontend-utils/cookie';\n\nimport { DebugFilterKey, filterNameCookieKey } from './features/filter';\n\n\n/**\n * @deprecated isDebugByFilterName('validation-off') ๋ฅผ ์ฌ์ฉํ์ธ์. ํด๋น ํจ์๋ ์ญ์ ์์ \n * @returns boolean\n */\nexport function isDebugStepValidationOff(): boolean {\n return isDebugByFilterName('validation-off');\n}\n\n/**\n * @description ์ํ๋ ๊ธฐ๋ฅ์ ๋ฐ๋ผ ์ฟ ํค๋ฅผ ํ์ธํ์ฌ true/false๋ฅผ ๋ฆฌํดํ๋ค.\n * @param name DebugFilterKey\n * @returns boolean\n */\nexport function isDebugByFilterName(name: DebugFilterKey): boolean {\n const filterNames = getCookie(filterNameCookieKey)?.split(',');\n\n return filterNames?.includes(name) || false;\n\n}","import { useState, useEffect, useCallback } from 'react';\n\nimport { isClient } from 'sales-frontend-utils';\n\nimport { isDebugByFilterName } from '../../debug-utils';\nimport { LogEntry, LogType } from '../../types';\n\n/**\n * @file '์ฝ์ ๋ก๊ทธ ํ์ธ' ๊ธฐ๋ฅ์ ํต์ฌ ๋ก์ง์ ๋ด๋นํ๋ ํ
์
๋๋ค.\n * @description\n * - ์ ์ญ(๋ชจ๋ ์ค์ฝํ) ์ํ๋ก ๋ก๊ทธ๋ฅผ ๊ด๋ฆฌํ์ฌ, ์ปดํฌ๋ํธ์ ์๋ช
์ฃผ๊ธฐ์ ๊ด๊ณ์์ด ๋ก๊ทธ๋ฅผ ์์งํฉ๋๋ค.\n * - `console` ๊ฐ์ฒด์ ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ํ์ฌ ๋ก๊ทธ๋ฅผ ๊ฐ๋ก์ฑ๋๋ค.\n * - ์ต์ ๋ฒ ํจํด(listeners)์ ์ฌ์ฉํด ์ฌ๋ฌ ์ปดํฌ๋ํธ์์ ๋ก๊ทธ ์ํ๋ฅผ ๊ตฌ๋
ํ๊ณ ์
๋ฐ์ดํธ๋ฅผ ๋ฐ์ ์ ์๋๋ก ํฉ๋๋ค.\n */\n\n// ์ ์ญ์ผ๋ก ๊ด๋ฆฌ๋๋ ๋ก๊ทธ ๋ฐฐ์ด. ์ฑ ์ ์ฒด์ ๋ก๊ทธ๊ฐ ์ฌ๊ธฐ์ ์์
๋๋ค.\nlet globalLogs: LogEntry[] = [];\n// ๋ก๊ทธ ์ํ์ ๋ณ๊ฒฝ์ ๊ตฌ๋
ํ๋ ์ปดํฌ๋ํธ(์ setState ํจ์) ๋ชฉ๋ก์
๋๋ค.\nlet listeners: React.Dispatch<React.SetStateAction<LogEntry[]>>[] = [];\n\n// ๊ธฐ์กด console ๋ฉ์๋๋ฅผ ๋ฐฑ์
ํ๊ธฐ ์ํ ๊ฐ์ฒด์
๋๋ค.\nconst originalConsoleMethods: { [key in LogType]?: (...args: any[]) => void } = {};\n// ์ฝ์์ด ์ด๋ฏธ ์ค๋ฒ๋ผ์ด๋๋์๋์ง ํ์ธํ๋ ํ๋๊ทธ์
๋๋ค.\nlet isConsoleOverridden = false;\n\n//๋ก๊ทธ๋ฐฐ์ด์ ์ต๋๊ฐฏ์\nconst MAX_LOGS = 10;\n\n// ์๋ก์ด ๋ก๊ทธ๋ฅผ ์ ์ญ ๋ก๊ทธ ๋ฐฐ์ด์ ์ถ๊ฐํ๊ณ , ๋ชจ๋ ๊ตฌ๋
์์๊ฒ ์๋ฆฝ๋๋ค.\nconst addLog = (type: LogType, ...args: any[]) => {\n const newLog: LogEntry = {\n id: Date.now() + Math.random(),\n type,\n timestamp: new Date().toLocaleTimeString(),\n message: args\n };\n\n //์ต๋์ฌ์ด์ฆ์ ๋๋ฌํ ๊ฒฝ์ฐ, ์ ์ผ ๋จผ์ ๋ค์ด์จ ๋ก๊ทธ๋ฅผ ์ญ์ ํ๋ค.\n if (globalLogs.length >= MAX_LOGS) {\n\n //console-log๊ฐ ์ผ์ง ๊ฒฝ์ฐ์๋ ์ต๋์ฌ์ด์ฆ ๋ฌด์ํ๊ณ ๊ณ์ ์ ์ฌํ๋ค.\n if (!isDebugByFilterName('console-log')) {\n globalLogs.shift();\n }\n }\n globalLogs = [...globalLogs, newLog];\n listeners.forEach((listener) => listener([...globalLogs]));\n};\n\n/**\n * `console` ๊ฐ์ฒด์ ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ํ์ฌ ๋ก๊ทธ ์์ง์ ์์ํฉ๋๋ค.\n * ์ค๋ณต ์คํ์ ๋ฐฉ์งํ๊ธฐ ์ํด `isConsoleOverridden` ํ๋๊ทธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.\n */\nexport const initializeConsoleLogOverride = () => {\n if (!isClient() || isConsoleOverridden) {\n return;\n }\n const logTypes: LogType[] = ['log', 'info', 'warn', 'error', 'debug'];\n\n logTypes.forEach((type) => {\n // ๊ธฐ์กด ๋ฉ์๋ ์ ์ฅ\n originalConsoleMethods[type] = console[type];\n\n // ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋\n console[type] = (...args: any[]) => {\n // ๊ธฐ์กด ๋ฉ์๋๋ฅผ ๋จผ์ ํธ์ถํ์ฌ ๋ธ๋ผ์ฐ์ ์ฝ์์๋ ์ ์์ ์ผ๋ก ๋ก๊ทธ๊ฐ ํ์๋๋๋ก ํฉ๋๋ค.\n if (originalConsoleMethods[type]) {\n originalConsoleMethods[type]?.apply(console, args);\n }\n // ๊ทธ ๋ค์, ๋๋ฒ๊ทธ ํด์ ๋ก๊ทธ ์ํ์ ์ถ๊ฐํฉ๋๋ค.\n addLog(type, ...args);\n };\n });\n\n isConsoleOverridden = true;\n};\n\n/**\n * ์ค๋ฒ๋ผ์ด๋ํ๋ `console` ๋ฉ์๋๋ฅผ ์๋๋๋ก ๋ณต์ํฉ๋๋ค.\n * `DebugTool` ์ปดํฌ๋ํธ๊ฐ ์ธ๋ง์ดํธ๋ ๋ ํธ์ถ๋ฉ๋๋ค.\n */\nexport const restoreConsoleLog = () => {\n if (!isClient() || !isConsoleOverridden) {\n return;\n }\n\n const logTypes: LogType[] = ['log', 'info', 'warn', 'error', 'debug'];\n logTypes.forEach((type) => {\n if (originalConsoleMethods[type]) {\n console[type] = originalConsoleMethods[type];\n }\n });\n isConsoleOverridden = false;\n};\n\n/**\n * ์ปดํฌ๋ํธ์์ ์ฝ์ ๋ก๊ทธ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ํ
์
๋๋ค.\n * @returns { logs, clearLogs }\n */\nexport const useConsoleLog = () => {\n const [logs, setLogs] = useState<LogEntry[]>(globalLogs);\n\n useEffect(() => {\n // ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ๋ ๋, ์์ ์ setState ํจ์๋ฅผ listener๋ก ๋ฑ๋กํฉ๋๋ค.\n listeners.push(setLogs);\n\n // ์ปดํฌ๋ํธ๊ฐ ์ธ๋ง์ดํธ๋ ๋, listener์์ ์ ๊ฑฐํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํฉ๋๋ค.\n return () => {\n listeners = listeners.filter((l) => l !== setLogs);\n };\n }, []);\n\n // ๋ชจ๋ ๋ก๊ทธ๋ฅผ ์ง์ฐ๋ ํจ์์
๋๋ค.\n const clearLogs = useCallback(() => {\n globalLogs = [];\n listeners.forEach((listener) => listener([]));\n }, []);\n\n return { logs, clearLogs };\n};\n","import React, { useState, useRef, useMemo, useEffect } from 'react';\n\nimport {\n clearButtonStyle,\n debugFeaturePanelStyle,\n h2Style,\n logItemStyle,\n logListContainerStyle,\n logMessageStyle,\n logTimestampStyle,\n logTypeStyles,\n modalOverlayStyle,\n panelHeaderStyle,\n panelToolbarStyle\n} from '../../styles/styles';\nimport { FeaturePanelProps, LogType, LogEntry } from '../../types';\n\nimport { useConsoleLog } from './use-console-log';\n\nconst safeStringify = (obj: any): string => {\n try {\n return JSON.stringify(obj, null, 2);\n } catch (e) {\n return '[Unserializable Object]';\n }\n};\n\nconst LogMessage: React.FC<{ entry: LogEntry }> = ({ entry }: { entry: LogEntry }) => {\n const messageParts = entry.message.map((part) => {\n if (typeof part === 'object' && part !== null) {\n return safeStringify(part);\n }\n\n return String(part);\n });\n\n const style = { ...logMessageStyle, ...logTypeStyles[entry.type] };\n\n return <pre style={style}>{messageParts.join(' ')}</pre>;\n};\n\nconst ConsoleLogPanel: React.FC<FeaturePanelProps> = ({ onClose }: { onClose: () => void }) => {\n const { logs, clearLogs } = useConsoleLog();\n const [filter, setFilter] = useState<LogType | 'all'>('all');\n const logContainerRef = useRef<HTMLDivElement>(null);\n\n const filteredLogs = useMemo(() => {\n if (filter === 'all') {\n return logs;\n }\n\n return logs.filter((log) => log.type === filter);\n }, [logs, filter]);\n\n useEffect(() => {\n if (logContainerRef.current) {\n logContainerRef.current.scrollTop = logContainerRef.current.scrollHeight;\n }\n }, [filteredLogs]);\n\n const segmentOptions: (LogType | 'all')[] = ['all', 'log', 'warn', 'error'];\n\n return (\n <>\n <div style={modalOverlayStyle} onClick={onClose} />\n <div style={debugFeaturePanelStyle}>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>Console Logs</h2>\n <button onClick={onClose}>X</button>\n </div>\n <div style={panelToolbarStyle}>\n <div>\n {segmentOptions.map((option) => (\n <button key={option} onClick={() => setFilter(option)} disabled={filter === option}>\n {option.charAt(0).toUpperCase() + option.slice(1)}\n </button>\n ))}\n </div>\n <button onClick={clearLogs} style={clearButtonStyle}>\n Clear\n </button>\n </div>\n <div style={logListContainerStyle} ref={logContainerRef}>\n {filteredLogs.map((log) => (\n <div key={log.id} style={logItemStyle}>\n <span style={logTimestampStyle}>{log.timestamp}</span>\n <LogMessage entry={log} />\n </div>\n ))}\n </div>\n </div>\n </>\n );\n};\n\nexport default ConsoleLogPanel;\n","import React, { useState, useMemo, useEffect } from 'react';\n\nimport { deleteCookie } from 'sales-frontend-utils';\n\nimport { loginTypes } from '../../config';\nimport {\n debugFeaturePanelStyle,\n formActionsStyle,\n h2Style,\n loginFormContainerStyle,\n modalOverlayStyle,\n panelHeaderStyle\n} from '../../styles/styles';\nimport { FeaturePanelProps, LoginTypeConfig } from '../../types';\n\n/**\n * @file '๊ฐํธ ๋ก๊ทธ์ธ' ๊ธฐ๋ฅ์ UI๋ฅผ ๋ด๋นํ๋ ํจ๋ ์ปดํฌ๋ํธ์
๋๋ค.\n * @description\n * - `config.ts`์ `loginTypes` ์ค์ ์ ๊ธฐ๋ฐ์ผ๋ก ๋์ ์ธ ๋ก๊ทธ์ธ ํผ์ ์์ฑํฉ๋๋ค.\n * - ์ค์ ๋ก๊ทธ์ธ ๋ก์ง์ `onLogin` prop์ผ๋ก ์ธ๋ถ์์ ์ฃผ์
๋ฐ์ ์ฒ๋ฆฌํฉ๋๋ค.\n * ์ด ์ปดํฌ๋ํธ๋ UI์ ๋ฐ์ดํฐ ์์ง์ ์ญํ ๋ง ์ํํ์ฌ ์ฌ์ฌ์ฉ์ฑ์ ๋์
๋๋ค.\n */\n\ninterface LoginPanelProps extends FeaturePanelProps {\n onLogin: (loginType: LoginTypeConfig['id'], data: Record<string, string>) => void;\n}\n\nconst LoginPanel: React.FC<LoginPanelProps> = ({ onClose, onLogin }) => {\n const [selectedTypeId, setSelectedTypeId] = useState<string>(loginTypes[0]?.id || '');\n const [formData, setFormData] = useState<Record<string, string>>({});\n const selectedType = useMemo(() => loginTypes.find((t) => t.id === selectedTypeId), [selectedTypeId]);\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const { name, value } = e.target;\n setFormData((prev) => ({ ...prev, [name]: value }));\n };\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n if (selectedType) {\n //๋ก๊ทธ์ธ ์ ์ ํ ํฐ์ด๊ธฐํ\n deleteCookie('accessToken');\n onLogin(selectedType.id, formData);\n onClose();\n }\n };\n\n useEffect(() => {\n setFormData({});\n }, [selectedType]);\n\n return (\n <>\n <div style={modalOverlayStyle} onClick={onClose} />\n <div style={debugFeaturePanelStyle}>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>๊ฐํธ ๋ก๊ทธ์ธ</h2>\n <button onClick={onClose}>X</button>\n </div>\n\n <form style={loginFormContainerStyle} onSubmit={handleSubmit}>\n <div>\n <label htmlFor=\"login-type-select\">๋ก๊ทธ์ธ ์ ํ</label>\n <select id=\"login-type-select\" value={selectedTypeId} onChange={(e) => setSelectedTypeId(e.target.value)}>\n {loginTypes.map((type) => (\n <option key={type.id} value={type.id}>\n {type.label}\n </option>\n ))}\n </select>\n </div>\n\n {selectedType?.fields.map((field) => (\n <div key={field.name}>\n <label htmlFor={field.name}>{field.label}</label>\n <input\n type={field.type}\n id={field.name}\n name={field.name}\n placeholder={field.placeholder}\n value={formData[field.name] || ''}\n onChange={handleInputChange}\n required\n />\n </div>\n ))}\n\n <div style={formActionsStyle}>\n <button type=\"submit\">๋ก๊ทธ์ธ</button>\n </div>\n </form>\n </div>\n </>\n );\n};\n\nexport default LoginPanel;\n","import React, { useState, useMemo } from 'react';\n\nimport {\n type RequestInfo,\n type ResponseInfo,\n type ErrorInfo,\n type HeldRequest,\n type HeldResponse,\n type HeldError,\n useDebugStore\n} from 'sales-frontend-stores';\n\nimport {\n debugFeaturePanelStyle,\n flex1Style,\n h2Style,\n holdButtonsContainerStyle,\n logContentStyle,\n logListStyle,\n logSummaryStyle,\n modalOverlayStyle,\n networkLogContainerStyle,\n panelHeaderStyle,\n searchContainerStyle\n} from '../../styles/styles';\n\ninterface NetworkLogProps {\n onClose: () => void;\n}\n\nconst SEARCH_SECTIONS = [\n { value: 'all', label: '์ ์ฒด' },\n { value: 'url', label: '์ฃผ์' },\n { value: 'headers', label: 'ํค๋' },\n { value: 'params', label: 'ํ๋ผ๋ฏธํฐ' },\n { value: 'data', label: '์์ฒญ' },\n { value: 'response', label: '์๋ต' },\n { value: 'error', label: '์๋ฌ' }\n];\n\ntype Log = (RequestInfo | ResponseInfo | ErrorInfo | HeldRequest | HeldResponse | HeldError) & {\n type: string;\n holdStatus?: 'held' | 'playing';\n};\n\nconst getLogInfo = (log: Log): RequestInfo | ResponseInfo | ErrorInfo => {\n if (log.holdStatus === 'held') {\n if ('request' in log) {\n return (log as HeldRequest).request;\n }\n if ('response' in log) {\n return (log as HeldResponse).response;\n }\n if ('error' in log) {\n return (log as HeldError).error;\n }\n }\n\n return log as RequestInfo | ResponseInfo | ErrorInfo;\n};\n\nconst NetworkLog: React.FC<NetworkLogProps> = ({ onClose }) => {\n const {\n requests,\n responses,\n errors,\n clear,\n isHold,\n toggleHold,\n heldRequests,\n heldResponses,\n heldErrors,\n playAllRequests,\n playAllResponses\n } = useDebugStore();\n const [searchTerm, setSearchTerm] = useState('');\n const [searchSection, setSearchSection] = useState(SEARCH_SECTIONS[0]?.value);\n\n const allLogs = useMemo(() => {\n const logs: Log[] = [];\n requests.forEach((req: RequestInfo) => logs.push({ ...req, type: 'request' }));\n responses.forEach((res: ResponseInfo) => logs.push({ ...res, type: 'response' }));\n errors.forEach((err: ErrorInfo) => logs.push({ ...err, type: 'error' }));\n heldRequests.forEach((req: HeldRequest) => logs.push({ ...req, type: 'request', holdStatus: 'held' }));\n heldResponses.forEach((res: HeldResponse) => logs.push({ ...res, type: 'response', holdStatus: 'held' }));\n heldErrors.forEach((err: HeldError) => logs.push({ ...err, type: 'error', holdStatus: 'held' }));\n\n logs.sort((a, b) => {\n const aInfo = getLogInfo(a);\n const bInfo = getLogInfo(b);\n const aTime = 'startTime' in aInfo ? aInfo.startTime : 0;\n const bTime = 'startTime' in bInfo ? bInfo.startTime : 0;\n\n return bTime - aTime;\n });\n\n return logs;\n }, [requests, responses, errors, heldRequests, heldResponses, heldErrors]);\n\n const filteredLogs = useMemo(() => {\n if (!searchTerm) {\n return allLogs;\n }\n const lowercasedTerm = searchTerm.toLowerCase();\n\n return allLogs.filter((log: Log) => {\n const logInfo = getLogInfo(log);\n switch (searchSection) {\n case 'url':\n return logInfo.url?.toLowerCase().includes(lowercasedTerm);\n case 'headers':\n return (\n 'headers' in logInfo &&\n logInfo.headers &&\n JSON.stringify(logInfo.headers)?.toLowerCase().includes(lowercasedTerm)\n );\n case 'params':\n return (\n 'params' in logInfo &&\n logInfo.params &&\n JSON.stringify(logInfo.params)?.toLowerCase().includes(lowercasedTerm)\n );\n case 'data':\n return (\n 'data' in logInfo &&\n logInfo.data &&\n log.type === 'request' &&\n JSON.stringify(logInfo.data)?.toLowerCase().includes(lowercasedTerm)\n );\n case 'response':\n return (\n 'data' in logInfo &&\n logInfo.data &&\n log.type === 'response' &&\n JSON.stringify(logInfo.data)?.toLowerCase().includes(lowercasedTerm)\n );\n case 'error':\n return log.type === 'error' && JSON.stringify(logInfo)?.toLowerCase().includes(lowercasedTerm);\n case 'all':\n default:\n return JSON.stringify(logInfo).toLowerCase().includes(lowercasedTerm);\n }\n });\n }, [allLogs, searchTerm, searchSection]);\n\n const renderLogSummary = (log: Log) => {\n const logInfo = getLogInfo(log);\n const prefix = log.holdStatus === 'held' ? '[HELD] ' : '';\n if (log.type === 'request') {\n return `${prefix}[REQ] ${logInfo.method.toUpperCase()} ${logInfo.url}`;\n }\n if (log.type === 'response' && 'status' in logInfo) {\n return `${prefix}[RES] ${logInfo.method.toUpperCase()} ${logInfo.url} - ${logInfo.status}`;\n }\n if (log.type === 'error' && 'message' in logInfo) {\n return `${prefix}[ERR] ${logInfo.method.toUpperCase()} ${logInfo.url} - ${logInfo.message}`;\n }\n\n return 'Unknown Log';\n };\n\n const renderLogContent = (log: Log) => {\n const logInfo = getLogInfo(log);\n\n return <pre>{JSON.stringify(logInfo, null, 2)}</pre>;\n };\n\n return (\n <>\n <div style={modalOverlayStyle} onClick={onClose} />\n <div style={debugFeaturePanelStyle}>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>๋คํธ์ํฌ ๋ก๊ทธ</h2>\n <button onClick={onClose}>X</button>\n </div>\n <div style={networkLogContainerStyle}>\n <div style={searchContainerStyle}>\n <select value={searchSection} onChange={(e) => setSearchSection(e.target.value)}>\n {SEARCH_SECTIONS.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n <input\n type=\"text\"\n placeholder=\"๊ฒ์...\"\n value={searchTerm}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => setSearchTerm(e.target.value)}\n style={flex1Style}\n />\n <label>\n <input type=\"checkbox\" id=\"hold-checkbox\" checked={isHold} onChange={toggleHold} />\n Hold\n </label>\n <button onClick={clear}>clear</button>\n </div>\n {isHold && (\n <div style={holdButtonsContainerStyle}>\n <button onClick={() => playAllRequests()}>REQ Resolve</button>\n <button onClick={() => playAllResponses()}>RES Resolve</button>\n </div>\n )}\n <div style={logListStyle}>\n {filteredLogs.length === 0 ? (\n <p>ํ์ํ ๋ก๊ทธ๊ฐ ์์ต๋๋ค.</p>\n ) : (\n <div>\n {filteredLogs.map((log, index) => (\n <details key={index}>\n <summary style={logSummaryStyle}>{renderLogSummary(log)}</summary>\n <div style={logContentStyle}>{renderLogContent(log)}</div>\n </details>\n ))}\n </div>\n )}\n </div>\n </div>\n </div>\n </>\n );\n};\n\nexport default NetworkLog;\n","import React, { useState } from 'react';\n\nimport {\n debugFeaturePanelStyle,\n flex1Style,\n h2Style,\n modalOverlayStyle,\n pageNavigationContentStyle,\n panelHeaderStyle\n} from '../../styles/styles';\nimport { FeaturePanelProps } from '../../types';\n\n\n/**\n * window.location ์์ ๋ชจ๋ ์์ฑ์\n * ๋ณด๊ธฐ ํธํ๊ฒ ๋ฆฌ์คํธํ ์ปดํฌ๋ํธ๋ก ๋ณด์ฌ์ค๋ค.\n * \n * ๊ฐ ์ ๋ณด์์ ๋ณต์ฌ๋ฒํผ ์ถ๊ฐ\n */\nconst LocationInfo = () => {\n return Object.keys(location).map(key => {\n const val = location[key as keyof Location];\n if (typeof val === 'string') {\n return <div key={key}>{key}: {val} {val && <button onClick={() => navigator.clipboard.writeText(val)} >๋ณต์ฌ</button>}</div>\n }\n })\n}\n\n\n/**\n * @file 'ํ์ด์ง ์ด๋' ๊ธฐ๋ฅ์ UI๋ฅผ ๋ด๋นํ๋ ํจ๋ ์ปดํฌ๋ํธ์
๋๋ค.\n * @description ์ฌ์ฉ์๊ฐ ์
๋ ฅํ URL๋ก ํ์ด์ง๋ฅผ ์ด๋์ํต๋๋ค.\n */\nconst PageNavigationPanel: React.FC<FeaturePanelProps> = ({ onClose }) => {\n const [url, setUrl] = useState<string>('');\n\n const handleNavigate = () => {\n if (url) {\n self.location.href = url;\n }\n };\n\n\n return (\n <>\n <div style={modalOverlayStyle} onClick={onClose} />\n <div style={debugFeaturePanelStyle}>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>ํ์ด์ง ์ ๋ณด</h2>\n <button onClick={onClose}>X</button>\n </div>\n <div style={pageNavigationContentStyle}>\n <br /><br />\n ํ์ด์ง์ ๋ณด :\n <span style={{ whiteSpace: 'normal', wordBreak: 'break-all' }}>{LocationInfo()}</span>\n <br /><br />\n ํ์ด์ง์ด๋ :\n <input\n type=\"text\"\n value={url}\n onChange={(e) => setUrl(e.target.value)}\n placeholder=\"์ด๋ํ URL์ ์
๋ ฅํ์ธ์ (์: /main)\"\n style={flex1Style}\n />\n <button onClick={handleNavigate}>์ด๋</button>\n </div>\n </div >\n </>\n );\n};\n\nexport default PageNavigationPanel;\n","import React, { useState } from 'react';\n\nimport {\n debugFeaturePanelStyle,\n h2Style,\n h3Style,\n logItemStyle,\n logListContainerStyle,\n logMessageStyle,\n logTimestampStyle,\n modalOverlayStyle,\n panelHeaderStyle,\n scriptActionsStyle,\n scriptExecutorContentStyle,\n scriptInputSectionStyle,\n scriptOutputSectionStyle,\n scriptTextareaStyle\n} from '../../styles/styles';\n\nimport type { FeaturePanelProps } from '../../types';\n\n/**\n * @file '์คํฌ๋ฆฝํธ ์คํ' ๊ธฐ๋ฅ์ UI ๋ฐ ๋ก์ง์ ๋ด๋นํ๋ ํจ๋ ์ปดํฌ๋ํธ์
๋๋ค.\n */\n\ntype ResultLogType = 'log' | 'warn' | 'error' | 'return';\n\ninterface ResultLog {\n id: number;\n type: ResultLogType;\n timestamp: string;\n message: any[];\n}\n\nconst logTypeStyles: { [key in ResultLogType]: React.CSSProperties } = {\n log: { color: '#333333' },\n warn: { color: '#ffc107' },\n error: { color: '#dc3545' },\n return: { color: '#8a2be2' }\n};\n\nconst safeStringify = (obj: any): string => {\n try {\n const replacer = (key: any, value: any) => (typeof value === 'bigint' ? value.toString() : value);\n\n return JSON.stringify(obj, replacer, 2);\n } catch (e) {\n return '[Unserializable Object]';\n }\n};\n\nconst ResultMessage: React.FC<{ log: ResultLog }> = ({ log }) => {\n const messageParts = log.message.map((part) => {\n if (typeof part === 'object' && part !== null) {\n return safeStringify(part);\n }\n\n return String(part);\n });\n\n const prefix = log.type === 'return' ? 'โฉ ' : '';\n const style = { ...logMessageStyle, ...logTypeStyles[log.type] };\n\n return (\n <pre style={style}>\n {prefix}\n {messageParts.join(' ')}\n </pre>\n );\n};\n\nexport const ScriptExecutorPanel: React.FC<FeaturePanelProps> = ({ onClose }) => {\n const [code, setCode] = useState<string>('// ์ฌ๊ธฐ์ ์คํํ ์ฝ๋๋ฅผ ์
๋ ฅํ์ธ์\\nconsole.log(\"Hello, World!\");');\n const [results, setResults] = useState<ResultLog[]>([]);\n\n const addResult = (type: ResultLogType, ...args: any[]) => {\n setResults((prevResults) => [\n ...prevResults,\n {\n id: Date.now() + Math.random(),\n type,\n timestamp: new Date().toLocaleTimeString(),\n message: args\n }\n ]);\n };\n\n const handleExecute = () => {\n const originalConsole = { ...console };\n const newConsole = {\n log: (...args: any[]) => {\n originalConsole.log(...args);\n addResult('log', ...args);\n },\n warn: (...args: any[]) => {\n originalConsole.warn(...args);\n addResult('warn', ...args);\n },\n error: (...args: any[]) => {\n originalConsole.error(...args);\n addResult('error', ...args);\n }\n };\n\n try {\n Object.assign(console, newConsole);\n // eslint-disable-next-line no-new-func\n const result = new Function(code)();\n if (result !== undefined) {\n addResult('return', result);\n }\n } catch (e: any) {\n addResult('error', e.name, e.message);\n } finally {\n Object.assign(console, originalConsole);\n }\n };\n\n const handleClear = () => {\n setResults([]);\n };\n\n return (\n <>\n <div style={modalOverlayStyle} onClick={onClose} />\n <div style={{ ...debugFeaturePanelStyle, ...scriptExecutorContentStyle }}>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>์คํฌ๋ฆฝํธ ์คํ</h2>\n <button onClick={onClose}>X</button>\n </div>\n <div style={scriptExecutorContentStyle}>\n <div style={scriptInputSectionStyle}>\n <textarea\n style={scriptTextareaStyle}\n value={code}\n onChange={(e) => setCode(e.target.value)}\n spellCheck=\"false\"\n />\n <div style={scriptActionsStyle}>\n <button onClick={handleExecute}>์คํ (โถ)</button>\n <button onClick={handleClear}>๊ฒฐ๊ณผ ์ง์ฐ๊ธฐ</button>\n </div>\n </div>\n <div style={scriptOutputSectionStyle}>\n <div style={panelHeaderStyle}>\n <h3 style={h3Style}>๊ฒฐ๊ณผ</h3>\n </div>\n <div style={logListContainerStyle}>\n {results.map((log) => (\n <div key={log.id} style={logItemStyle}>\n <span style={logTimestampStyle}>{log.timestamp}</span>\n <ResultMessage log={log} />\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n </>\n );\n};\n\nexport default ScriptExecutorPanel;\n","import { useState, useEffect, useCallback } from 'react';\n\nimport { deleteCookie, setCookie } from 'sales-frontend-utils/cookie';\n\nimport { StorageType, StorageItem } from '../../types';\n\n\n\n/**\n * @file '์คํ ๋ฆฌ์ง ๊ด๋ฆฌ' ๊ธฐ๋ฅ์ ํต์ฌ ๋ก์ง์ ๋ด๋นํ๋ ํ
์
๋๋ค.\n * @description\n * - `localStorage`์ `document.cookie`์ ๋ณต์กํ API๋ฅผ ์ถ์ํํฉ๋๋ค.\n * - `storageType` prop์ ๋ฐ๋ผ ๋ ์คํ ๋ฆฌ์ง์ ๋ํ CRUD ๋ก์ง์ ๋์ผํ ์ธํฐํ์ด์ค๋ก ์ ๊ณตํฉ๋๋ค.\n */\n\n/**\n * `localStorage` ๋๋ `cookie` ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ํ
์
๋๋ค.\n * @param storageType - ๊ด๋ฆฌํ ์คํ ๋ฆฌ์ง์ ์ข
๋ฅ ('localStorage' ๋๋ 'cookie')\n * @returns { items, setItem, removeItem, loadItems }\n */\nexport const useStorage = (storageType: StorageType) => {\n const [items, setItems] = useState<StorageItem[]>([]);\n\n // ์คํ ๋ฆฌ์ง์์ ๋ชจ๋ ์์ดํ
์ ๋ถ๋ฌ์ ์ํ๋ฅผ ์
๋ฐ์ดํธํ๋ ํจ์์
๋๋ค.\n const loadItems = useCallback(() => {\n const newItems: StorageItem[] = [];\n if (storageType === 'localStorage') {\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key) {\n newItems.push({ key, value: localStorage.getItem(key) || '' });\n }\n }\n } else {\n const cookies = document.cookie.split(';');\n cookies.forEach((cookie) => {\n const parts = cookie.split('=');\n const key = parts.shift()?.trim();\n if (key) {\n newItems.push({ key, value: decodeURIComponent(parts.join('=')) });\n }\n });\n }\n setItems(newItems);\n }, [storageType]);\n\n // ์ปดํฌ๋ํธ ๋ง์ดํธ ์ ์์ดํ
์ ๋ถ๋ฌ์ต๋๋ค.\n useEffect(() => {\n loadItems();\n }, [loadItems]);\n\n // ์คํ ๋ฆฌ์ง์ ์์ดํ
์ ์ถ๊ฐํ๊ฑฐ๋ ์์ ํ๋ ํจ์์
๋๋ค.\n const setItem = useCallback(\n (key: string, value: string) => {\n if (storageType === 'localStorage') {\n localStorage.setItem(key, value);\n } else {\n setCookie(key, value);\n }\n loadItems(); // ๋ชฉ๋ก ์๋ก๊ณ ์นจ\n },\n [storageType, loadItems]\n );\n\n // ์คํ ๋ฆฌ์ง์์ ์์ดํ
์ ์ ๊ฑฐํ๋ ํจ์์
๋๋ค.\n const removeItem = useCallback(\n (key: string) => {\n if (storageType === 'localStorage') {\n localStorage.removeItem(key);\n } else {\n deleteCookie(key);\n }\n loadItems(); // ๋ชฉ๋ก ์๋ก๊ณ ์นจ\n },\n [storageType, loadItems]\n );\n\n return { items, setItem, removeItem, loadItems };\n};\n","import React, { useState, useMemo } from 'react';\n\nimport {\n debugFeaturePanelStyle,\n h2Style,\n logContentStyle,\n modalOverlayStyle,\n panelHeaderStyle,\n panelToolbarStyle,\n storageSearchInputStyle,\n storageTableContainerStyle,\n textareaStyle\n} from '../../styles/styles';\nimport { FeaturePanelProps, StorageType, StorageItem } from '../../types';\n\nimport { useStorage } from './use-storage';\n\n/**\n * @file '์คํ ๋ฆฌ์ง ๊ด๋ฆฌ' ๊ธฐ๋ฅ์ UI๋ฅผ ๋ด๋นํ๋ ํจ๋ ์ปดํฌ๋ํธ์
๋๋ค.\n */\n\ninterface StoragePanelProps extends FeaturePanelProps {\n storageType: StorageType;\n}\n\nconst ValueDisplay: React.FC<{ value: string }> = ({ value }) => {\n try {\n const parsed = JSON.parse(value);\n if (typeof parsed === 'object' && parsed !== null) {\n return <pre style={logContentStyle}>{JSON.stringify(parsed, null, 2)}</pre>;\n }\n } catch (e) {\n //\n }\n\n return <div style={logContentStyle}>{value}</div>;\n};\n\nconst EditableRow: React.FC<{\n item: StorageItem;\n onSave: (key: string, value: string) => void;\n onRemove: (key: string) => void;\n}> = ({ item, onSave, onRemove }) => {\n const [isEditing, setIsEditing] = useState(false);\n const [value, setValue] = useState(item.value);\n\n const handleSave = () => {\n onSave(item.key, value);\n setIsEditing(false);\n };\n\n const handleEdit = () => {\n setValue(item.value);\n setIsEditing(true);\n };\n\n return (\n <details>\n <summary>{item.key}</summary>\n <div>\n {isEditing ? <button onClick={handleSave}>Save</button> : <button onClick={handleEdit}>Edit</button>}\n <button onClick={() => onRemove(item.key)}>Remove</button>\n {isEditing ? (\n <textarea value={value} onChange={(e) => setValue(e.target.value)} style={textareaStyle} />\n ) : (\n <ValueDisplay value={item.value} />\n )}\n </div>\n </details>\n );\n};\n\nconst StoragePanel: React.FC<StoragePanelProps> = ({ onClose, storageType }) => {\n const { items, setItem, removeItem } = useStorage(storageType);\n const [filter, setFilter] = useState('');\n\n const filteredItems = useMemo(() => {\n if (!filter) {\n return items;\n }\n\n return items.filter(\n (item) =>\n item.key.toLowerCase().includes(filter.toLowerCase()) || item.value.toLowerCase().includes(filter.toLowerCase())\n );\n }, [items, filter]);\n\n return (\n <>\n <div style={modalOverlayStyle} onClick={onClose} />\n <div style={debugFeaturePanelStyle}>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>{storageType === 'localStorage' ? 'Local Storage' : 'Cookies'}</h2>\n <button onClick={onClose}>X</button>\n </div>\n <div style={panelToolbarStyle}>\n <input\n type=\"text\"\n placeholder=\"Search key or value...\"\n value={filter}\n onChange={(e) => setFilter(e.target.value)}\n style={storageSearchInputStyle}\n />\n </div>\n <div style={storageTableContainerStyle}>\n {filteredItems.map((item) => (\n <EditableRow key={item.key} item={item} onSave={setItem} onRemove={removeItem} />\n ))}\n </div>\n </div>\n </>\n );\n};\n\nexport default StoragePanel;\n","import React from 'react';\n\nimport ConsoleLogPanel from './features/console-log/console-log-panel';\nimport LoginPanel from './features/login-dsp/login-panel';\nimport NetworkLog from './features/network-log';\nimport PageNavigationPanel from './features/page-navigation/page-navigation-panel';\nimport ScriptExecutorPanel from './features/script-executor/script-executor-panel';\nimport StoragePanel from './features/storage/storage-panel';\nimport { MenuItem, LoginTypeConfig } from './types';\n\n/**\n * @file ๋๋ฒ๊ทธ ํด์ ๋ชจ๋ ์ค์ ์ ๊ด๋ฆฌํ๋ ์ค์ ์ค์ ํ์ผ์
๋๋ค.\n * @description\n * - ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ฑฐ๋ ๊ธฐ์กด ๊ธฐ๋ฅ์ ์์ /์ ๊ฑฐํ ๋ ์ด ํ์ผ์ ์์ ํฉ๋๋ค.\n * - `menuItems`: ๋๋ฒ๊ทธ ํด์ ํ์๋ ๋ฉ๋ด ๋ชฉ๋ก์ ์ ์ํฉ๋๋ค.\n * - `loginTypes`: '๊ฐํธ ๋ก๊ทธ์ธ' ๊ธฐ๋ฅ์์ ์ฌ์ฉํ ๋ก๊ทธ์ธ ์ ํ๊ณผ ํ๋๋ฅผ ์ ์ํฉ๋๋ค.\n */\n\n// '๊ฐํธ ๋ก๊ทธ์ธ' ๊ธฐ๋ฅ์์ ์ฌ์ฉํ ๋ก๊ทธ์ธ ์ ํ ๋ชฉ๋ก์
๋๋ค.\n// ์๋ก์ด ๋ก๊ทธ์ธ ์ ํ์ ์ถ๊ฐํ๋ ค๋ฉด ์ด ๋ฐฐ์ด์ ๊ฐ์ฒด๋ฅผ ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค.\nexport const loginTypes: LoginTypeConfig[] = [\n {\n id: 'fp',\n label: 'FP ๋ก๊ทธ์ธ',\n fields: [{ name: 'employeeId', label: '์ฌ๋ฒ', type: 'text', placeholder: '์ฌ๋ฒ์ ์
๋ ฅํ์ธ์' }]\n }\n];\n\n/**\n * ๋๋ฒ๊ทธ ํด์ ํ์๋ ๋ฉ๋ด ์์ดํ
๋ชฉ๋ก์
๋๋ค.\n * ์๋ก์ด ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๊ณ ์ฌ๊ธฐ์ ์ถ๊ฐํ์ฌ ๋ฉ๋ด์ ๋
ธ์ถ์ํฌ ์ ์์ต๋๋ค.\n *\n * @property {string} id - ๋ฉ๋ด์ ๊ณ ์ ์๋ณ์์
๋๋ค.\n * @property {string} label - ๋ฉ๋ด์ ํ์๋ ํ
์คํธ์
๋๋ค.\n * @property {React.ComponentType} component - ๋ฉ๋ด ํด๋ฆญ ์ ๋ ๋๋ง๋ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ์
๋๋ค.\n * @property {boolean} display - `true`์ผ ๊ฒฝ์ฐ ๋ฉ๋ด์ ํ์๋๊ณ , `false`์ผ ๊ฒฝ์ฐ ์จ๊ฒจ์ง๋๋ค. ๊ฐ๋ฐ ์ค์ธ ๊ธฐ๋ฅ์ ์จ๊ธธ ๋ ์ ์ฉํฉ๋๋ค.\n */\nexport const menuItems: (Omit<MenuItem, 'component'> & { component: React.ComponentType<any> })[] = [\n {\n id: 'network-log',\n label: '๋คํธ์ํฌ ๋ก๊ทธ',\n component: NetworkLog,\n display: true\n },\n {\n id: 'console-log',\n label: '์ฝ์ ๋ก๊ทธ ํ์ธ',\n component: ConsoleLogPanel,\n display: true\n },\n {\n id: 'local-storage',\n label: '๋ก์ปฌ ์คํ ๋ฆฌ์ง ๊ด๋ฆฌ',\n // StoragePanel์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ์ด๋ฏ๋ก, props๋ฅผ ํตํด ์ด๋ค ์คํ ๋ฆฌ์ง๋ฅผ ๋ค๋ฃฐ์ง ์ง์ ํฉ๋๋ค.\n component: (props) => <StoragePanel {...props} storageType=\"localStorage\" />,\n display: true\n },\n {\n id: 'cookie-management',\n label: '์ฟ ํค ๊ด๋ฆฌ',\n component: (props) => <StoragePanel {...props} storageType=\"cookie\" />,\n display: true\n },\n {\n id: 'quick-login',\n label: '๊ฐํธ ๋ก๊ทธ์ธ',\n component: LoginPanel,\n display: true // ์ค์ ํ์๋ DebugTool.tsx์์ onLogin prop ์กด์ฌ ์ฌ๋ถ์ ๋ฐ๋ผ ๊ฒฐ์ ๋ฉ๋๋ค.\n },\n {\n id: 'script-executor',\n label: '์คํฌ๋ฆฝํธ ์คํ',\n component: ScriptExecutorPanel,\n display: true\n },\n {\n id: 'page-navigation',\n label: 'ํ์ด์ง ์ ๋ณด',\n component: PageNavigationPanel,\n display: true\n }\n];\n","import { useState, useEffect } from 'react';\n\nimport { getEnvironmentFromHostname } from 'sales-frontend-utils';\n\nimport { EnvironmentInfo } from '../types';\n\n/**\n * ํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ ์คํ ํ๊ฒฝ(ํธ์คํธ ๊ธฐ์ค)์ ๊ฐ์งํ๋ ํ
์
๋๋ค.\n * @returns {EnvironmentInfo} ํ๊ฒฝ ์ ๋ณด ๊ฐ์ฒด (e.g., { env: 'local' })\n */\nexport const useEnvironment = (): EnvironmentInfo => {\n const [envInfo, setEnvInfo] = useState<EnvironmentInfo>({\n env: 'prd'\n });\n\n useEffect(() => {\n const { hostname } = window.location;\n setEnvInfo({ env: getEnvironmentFromHostname(hostname) });\n }, []);\n\n return envInfo;\n};\n","'use client';\nimport React, { useState, useEffect } from 'react';\n\nimport FloatingButton from './components/floating-button';\nimport MenuPanel from './components/menu-panel';\nimport { menuItems as defaultMenuItems } from './config';\nimport { initializeConsoleLogOverride, restoreConsoleLog } from './features/console-log/use-console-log';\nimport { useEnvironment } from './hooks/use-environment';\nimport { DebugToolServiceCode, Environment, MenuItem } from './types';\n\n/**\n * @file DebugTool์ ๋ฉ์ธ ์ปดํฌ๋ํธ ํ์ผ์
๋๋ค.\n * @description\n * - ํ๊ฒฝ์ ๋ฐ๋ผ ๋๋ฒ๊ทธ ํด์ ๋
ธ์ถ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.\n * - ํ๋กํ
๋ฒํผ๊ณผ ๋ฉ๋ด ํจ๋์ ์ํ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.\n * - ์ ํ๋ ๊ธฐ๋ฅ(Feature) ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํฉ๋๋ค.\n * - `onLogin`, `envOverride`, `menuItemsOverride` ๋ฑ์ props๋ฅผ ํตํด ์ธ๋ถ์์ ๋์์ ์ ์ดํ ์ ์์ต๋๋ค.\n */\n\n// onLogin ์ฝ๋ฐฑ์ optional prop์ผ๋ก ๋ฐ์ต๋๋ค.\ninterface DebugToolProps {\n /** ๊ฐํธ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ์ํ ์ฝ๋ฐฑ ํจ์. ์ด ํจ์๊ฐ ์ ๊ณต๋์ด์ผ '๊ฐํธ ๋ก๊ทธ์ธ' ๋ฉ๋ด๊ฐ ํ์ฑํ๋ฉ๋๋ค. */\n onLogin?: (loginType: string, data: Record<string, string>) => void;\n /** ํ์ฌ ํ๊ฒฝ์ ๊ฐ์ ๋ก ์ฌ์ ์ํฉ๋๋ค. 'prod' ํ๊ฒฝ์์๋ ๋๋ฒ๊ทธ ํด์ ํ
์คํธํ ๋ ์ ์ฉํฉ๋๋ค. */\n envOverride?: Environment;\n /** ๊ธฐ๋ณธ ๋ฉ๋ด ์ค์ ์ ์ฌ์ ์ํฉ๋๋ค. ๋์ ์ผ๋ก ๋ฉ๋ด๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ๋ณ๊ฒฝํ ๋ ์ฌ์ฉํฉ๋๋ค. */\n menuItemsOverride?: (Omit<MenuItem, 'component'> & { component: React.ComponentType<any> })[];\n serviceCode?: DebugToolServiceCode;\n}\n\nexport const DebugTool: React.FC<DebugToolProps> = ({\n onLogin,\n envOverride,\n menuItemsOverride,\n serviceCode = 'etc'\n}) => {\n // ๋ง์ดํธ ์ ์ฝ์ ์ค๋ฒ๋ผ์ด๋๋ฅผ ์ด๊ธฐํํ๊ณ ์ธ๋ง์ดํธ ์ ๋ณต์ํฉ๋๋ค.\n // ์ด๋ฅผ ํตํด '์ฝ์ ๋ก๊ทธ' ๊ธฐ๋ฅ์ด ํ์ด์ง์ ๋ชจ๋ ๋ก๊ทธ๋ฅผ ์์งํ ์ ์์ต๋๋ค.\n useEffect(() => {\n initializeConsoleLogOverride();\n\n return () => {\n restoreConsoleLog();\n };\n }, []); // ๋น ์์กด์ฑ ๋ฐฐ์ด์ ๋ง์ดํธ์ ์ธ๋ง์ดํธ ์ ํ ๋ฒ๋ง ์คํ๋๋๋ก ๋ณด์ฅํฉ๋๋ค.\n\n const environment = useEnvironment();\n // envOverride prop์ด ์์ผ๋ฉด ํ๊ฒฝ์ ๊ฐ์ ๋ก ์ค์ ํ๊ณ , ์์ผ๋ฉด ๊ฐ์ง๋ ํ๊ฒฝ์ ์ฌ์ฉํฉ๋๋ค.\n const env = envOverride || environment.env;\n\n // menuItemsOverride prop์ด ์์ผ๋ฉด ๋ฉ๋ด๋ฅผ ๊ฐ์ ๋ก ์ค์ ํ๊ณ , ์์ผ๋ฉด config ํ์ผ์ ๊ธฐ๋ณธ ๋ฉ๋ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.\n const menuItems = menuItemsOverride || defaultMenuItems;\n const [isMenuOpen, setMenuOpen] = useState(false);\n // ํ์ฌ ํ์ฑํ๋ ๊ธฐ๋ฅ ์ปดํฌ๋ํธ๋ฅผ ์ํ๋ก ๊ด๋ฆฌํฉ๋๋ค. null์ด๋ฉด ๋ฉ๋ด๊ฐ ๋ณด์
๋๋ค.\n const [activeFeature, setActiveFeature] = useState<React.ComponentType<any> | null>(null);\n\n // 'local', 'dev', 'stg' ํ๊ฒฝ์์๋ง ํด์ ๋ณด์ฌ์ค๋๋ค.\n const isVisible = ['local', 'dev', 'stg'].includes(env);\n\n // ๋ฉ๋ด ์์ดํ
์ ํด๋ฆญํ์ ๋ ํธ์ถ๋๋ ํธ๋ค๋ฌ์
๋๋ค.\n const handleMenuClick = (itemComponent: React.ComponentType<any>) => {\n setActiveFeature(() => itemComponent); // ํด๋ฆญ๋ ๊ธฐ๋ฅ์ ์ปดํฌ๋ํธ๋ฅผ ํ์ฑํํฉ๋๋ค.\n setMenuOpen(false); // ๋ฉ๋ด ํจ๋์ ๋ซ์ต๋๋ค.\n };\n\n // ๊ธฐ๋ฅ ํจ๋์ ๋ซ๊ธฐ ๋ฒํผ์ ๋๋ ์ ๋ ํธ์ถ๋๋ ํธ๋ค๋ฌ์
๋๋ค.\n const handleCloseFeature = () => {\n setActiveFeature(null); // ํ์ฑํ๋ ๊ธฐ๋ฅ ์ปดํฌ๋ํธ๋ฅผ null๋ก ๋ง๋ค์ด ๋ฉ๋ด๋ก ๋์๊ฐ๋๋ค.\n };\n\n // ํ์ฉ๋ ํ๊ฒฝ์ด ์๋๋ฉด ์๋ฌด๊ฒ๋ ๋ ๋๋งํ์ง ์์ต๋๋ค.\n if (!isVisible) {\n return null;\n }\n\n // ํ๋กํ
๋ฒํผ ํด๋ฆญ ์ ๋ฉ๋ด ํจ๋์ ์ด๋ฆผ/๋ซํ ์ํ๋ฅผ ํ ๊ธํฉ๋๋ค.\n const toggleMenu = () => {\n setMenuOpen((prev) => !prev);\n // ๋ฉ๋ด๊ฐ ์ด๋ฆด ๋, ์ด์ ์ ํ์ฑํ๋ ๊ธฐ๋ฅ์ด ์์๋ค๋ฉด ์ด๊ธฐํํฉ๋๋ค.\n if (!isMenuOpen) {\n setActiveFeature(null);\n }\n };\n\n // ์ค์ ํ๋ฉด์ ๋ณด์ฌ์ค ๋ฉ๋ด ์์ดํ
๋ชฉ๋ก์ ํํฐ๋งํฉ๋๋ค.\n const availableMenuItems = menuItems.filter(\n (item) =>\n item.display && // config์์ display๊ฐ true์ธ ํญ๋ชฉ๋ง ํํฐ๋งํฉ๋๋ค.\n // 'quick-login' ๊ธฐ๋ฅ์ onLogin prop์ด ์ ๊ณต๋ ๊ฒฝ์ฐ์๋ง ํ์ฑํํฉ๋๋ค.\n (item.id !== 'quick-login' || (item.id === 'quick-login' && onLogin))\n );\n\n // ํ์ฑํ๋ ๊ธฐ๋ฅ ์ปดํฌ๋ํธ๊ฐ ์์ผ๋ฉด ํด๋น ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํฉ๋๋ค.\n if (activeFeature) {\n const FeatureComponent = activeFeature;\n\n // ๋ชจ๋ ๊ธฐ๋ฅ ์ปดํฌ๋ํธ์ ๊ณตํต์ ์ผ๋ก onClose ํธ๋ค๋ฌ์ onLogin ์ฝ๋ฐฑ์ ์ ๋ฌํฉ๋๋ค.\n return <FeatureComponent onClose={handleCloseFeature} onLogin={onLogin} />;\n }\n\n // ํ์ฑํ๋ ๊ธฐ๋ฅ์ด ์์ผ๋ฉด ํ๋กํ
๋ฒํผ๊ณผ ๋ฉ๋ด ํจ๋(isMenuOpen์ด true์ผ ๊ฒฝ์ฐ)์ ๋ ๋๋งํฉ๋๋ค.\n return (\n <div\n style={{\n position: 'fixed',\n right: '20px',\n bottom: '20px',\n zIndex: 9999\n }}\n >\n <FloatingButton onClick={toggleMenu} />\n {isMenuOpen && (\n <MenuPanel\n menuItems={availableMenuItems}\n onMenuItemClick={handleMenuClick}\n onClose={() => setMenuOpen(false)}\n serviceCode={serviceCode}\n />\n )}\n </div>\n );\n};\n","import { useDebugStore } from 'sales-frontend-stores';\nimport { getEnvironmentFromHostname, isClient } from 'sales-frontend-utils';\n\nimport { isDebugByFilterName } from './debug-utils';\n\nimport type { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from 'axios';\n\n\n// ๋ก๊ทธ ์ต๋ ๊ฐฏ์\nconst MAX_LOGS = 20;\n\n/** debug-tool ์์ ์ฌ์ฉ๋ ๋ก๊ทธ ์ ์ฅ */\nexport function addRequestLog(config: InternalAxiosRequestConfig) {\n if (!isClient()) {\n return;\n }\n\n const env = getEnvironmentFromHostname(location.hostname);\n\n /**\n * ์ด์ํ๊ฒฝ์ด ์๋๋๋ง ์ ์ฅ\n */\n if (env !== 'prd') {\n const { addRequest, isHold, holdRequest, requests } = useDebugStore.getState();\n\n // ์ต๋ ๊ฐฏ์๋ฅผ ์ด๊ณผํ ๊ฒฝ์ฐ, ์ ์ผ ๋จผ์ ๋ค์ด์จ ๋ก๊ทธ๋ฅผ ์ญ์ ํ๋ค.\n if (requests.length >= MAX_LOGS) {\n\n // http-log๊ฐ ์ผ์ง์ง ์์์๋๋ ์ต๋ ๊ฐฏ์๋ฅผ ์ ํํ๋ค.\n if (!isDebugByFilterName('http-log')) {\n requests.shift();\n }\n\n }\n\n\n const startTime = Date.now();\n const requestInfo = {\n url: config.url || '',\n method: config.method || '',\n headers: config.headers,\n params: config.params,\n data: config.data,\n startTime\n };\n\n if (isHold) {\n return new Promise((resolver) => {\n holdRequest({ request: requestInfo, resolver });\n });\n } else {\n addRequest(requestInfo);\n }\n }\n}\n\n/** debug-tool ์์ ์ฌ์ฉ๋ ๋ก๊ทธ ์ ์ฅ */\nexport function addResponseLog(response: AxiosResponse) {\n if (!isClient()) {\n return;\n }\n\n const env = getEnvironmentFromHostname(location.hostname);\n\n /**\n * ์ด์ํ๊ฒฝ์ด ์๋๋๋ง ์ ์ฅ\n */\n if (env !== 'prd') {\n const { addResponse, isHold, holdResponse, responses } = useDebugStore.getState();\n\n // ์ต๋ ๊ฐฏ์๋ฅผ ์ด๊ณผํ ๊ฒฝ์ฐ, ์ ์ผ ๋จผ์ ๋ค์ด์จ ๋ก๊ทธ๋ฅผ ์ญ์ ํ๋ค.\n if (responses.length >= MAX_LOGS) {\n\n // http-log๊ฐ ์ผ์ง์ง ์์์๋๋ ์ต๋ ๊ฐฏ์๋ฅผ ์ ํํ๋ค.\n if (!isDebugByFilterName('http-log')) {\n responses.shift();\n }\n\n }\n\n const { config } = response;\n const responseInfo = {\n url: config.url || '',\n method: config.method || '',\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n data: response.data\n };\n\n if (isHold) {\n return new Promise((resolver) => {\n holdResponse({ response: responseInfo, resolver });\n });\n } else {\n addResponse(responseInfo);\n }\n }\n}\n\nexport function addErrorLog(error: AxiosError) {\n if (!isClient()) {\n return;\n }\n\n const env = getEnvironmentFromHostname(location.hostname);\n\n /**\n * ์ด์ํ๊ฒฝ์ด ์๋๋๋ง ์ ์ฅ\n */\n if (env !== 'prd') {\n const { addError, isHold, holdError, errors } = useDebugStore.getState();\n\n\n // ์ต๋ ๊ฐฏ์๋ฅผ ์ด๊ณผํ ๊ฒฝ์ฐ, ์ ์ผ ๋จผ์ ๋ค์ด์จ ๋ก๊ทธ๋ฅผ ์ญ์ ํ๋ค.\n if (errors.length >= MAX_LOGS) {\n\n // http-log๊ฐ ์ผ์ง์ง ์์์๋๋ ์ต๋ ๊ฐฏ์๋ฅผ ์ ํํ๋ค.\n if (!isDebugByFilterName('http-log')) {\n errors.shift();\n }\n }\n\n\n const { config } = error;\n const errorInfo = {\n url: config?.url || '',\n method: config?.method || '',\n message: error.message,\n config: error.config,\n response: error.response\n ? {\n url: error.response.config?.url || '',\n method: error.response.config?.method || '',\n status: error.response.status,\n statusText: error.response.statusText,\n headers: error.response.headers,\n data: error.response.data\n }\n : undefined\n };\n\n if (isHold) {\n return new Promise((resolver) => {\n holdError({ error: errorInfo, resolver });\n });\n } else {\n addError(errorInfo);\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/styles/styles.ts","../src/components/floating-button.tsx","../src/features/change-host/index.tsx","../src/features/filter/index.tsx","../src/features/form-factor/index.tsx","../src/features/init-refresh/index.tsx","../src/components/menu-panel.tsx","../src/debug-utils.ts","../src/features/console-log/use-console-log.ts","../src/features/console-log/console-log-panel.tsx","../src/features/login-dsp/login-panel.tsx","../src/features/network-log/index.tsx","../src/features/page-navigation/page-navigation-panel.tsx","../src/features/script-executor/script-executor-panel.tsx","../src/features/storage/use-storage.ts","../src/features/storage/storage-panel.tsx","../src/config.tsx","../src/hooks/use-environment.ts","../src/debug-tool.tsx","../src/interceptor-function.ts"],"names":["React","useEffect","filterName","getCookie","setCookie","deleteCookie","menuItems","useState","useRef","useMemo","logTypeStyles","safeStringify","useCallback","MAX_LOGS","isClient","getEnvironmentFromHostname","useDebugStore"],"mappings":"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","file":"index.js","sourcesContent":["import React from 'react';\n\nimport { LogType } from '../types';\n\nexport const debugFloatingButtonStyle: React.CSSProperties = {\n position: 'fixed',\n right: '10px',\n bottom: '80px',\n borderRadius: '50%',\n backgroundColor: '#f0f0f0',\n border: '1px solid #ccc',\n padding: '8px 12px',\n fontWeight: 'bold',\n zIndex: 9999\n};\n\nexport const debugMenuPanelStyle: React.CSSProperties = {\n position: 'fixed',\n right: '20px',\n bottom: '90px',\n display: 'flex',\n flexDirection: 'column',\n maxHeight: '400px',\n backgroundColor: '#ffffff',\n border: '1px solid #e0e0e0',\n borderRadius: '8px',\n boxShadow: '0 4px 8px rgba(0, 0, 0, 0.1)',\n zIndex: 10000,\n overflowY: 'auto'\n};\n\nexport const panelHeaderStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '10px 15px',\n backgroundColor: '#f5f5f5',\n borderBottom: '1px solid #e0e0e0',\n flexShrink: 0\n};\n\nexport const h2Style: React.CSSProperties = {\n margin: 0,\n fontSize: '16px'\n};\n\nexport const modalOverlayStyle: React.CSSProperties = {\n position: 'fixed',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n zIndex: 9999\n};\n\nexport const debugFeaturePanelStyle: React.CSSProperties = {\n margin: '20px',\n position: 'fixed',\n top: 0,\n left: 0,\n width: 'calc(100% - 40px)',\n height: 'calc(100% - 40px)',\n backgroundColor: '#ffffff',\n zIndex: 10001,\n display: 'flex',\n flexDirection: 'column'\n};\n\nexport const panelToolbarStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n padding: '10px',\n borderBottom: '1px solid #e0e0e0',\n gap: '8px',\n flexShrink: 0\n};\n\nexport const logListContainerStyle: React.CSSProperties = {\n flex: 1,\n padding: '10px',\n overflowY: 'auto',\n fontFamily: 'monospace',\n fontSize: '12px',\n backgroundColor: '#ffffff'\n};\n\nexport const logItemStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'flex-start',\n padding: '4px 0',\n borderBottom: '1px solid #e0e0e0'\n};\n\nexport const logTimestampStyle: React.CSSProperties = {\n marginRight: '10px',\n color: '#888888'\n};\n\nexport const logMessageStyle: React.CSSProperties = {\n margin: 0,\n wordBreak: 'break-all',\n whiteSpace: 'pre-wrap'\n};\n\nexport const logTypeStyles: { [key in LogType | 'return']: React.CSSProperties } = {\n log: { color: '#333333' },\n info: { color: '#007bff' },\n warn: { color: '#ffc107' },\n error: { color: '#dc3545' },\n debug: { color: '#6c757d' },\n return: { color: '#8a2be2' }\n};\n\nexport const loginFormContainerStyle: React.CSSProperties = {\n display: 'flex',\n flex: 1,\n flexDirection: 'column',\n gap: '15px',\n padding: '20px',\n overflowY: 'auto'\n};\n\nexport const formActionsStyle: React.CSSProperties = {\n display: 'flex',\n justifyContent: 'flex-start',\n marginTop: '10px'\n};\n\nexport const searchContainerStyle: React.CSSProperties = {\n display: 'flex',\n gap: '8px',\n marginBottom: '16px',\n alignItems: 'center'\n};\n\nexport const logListStyle: React.CSSProperties = {\n overflowY: 'auto'\n};\n\nexport const logSummaryStyle: React.CSSProperties = {\n wordBreak: 'break-all',\n margin: 0,\n cursor: 'pointer'\n};\n\nexport const logContentStyle: React.CSSProperties = {\n padding: '8px',\n wordBreak: 'break-all',\n whiteSpace: 'pre-wrap',\n backgroundColor: '#f5f5f5',\n borderRadius: '4px'\n};\n\nexport const pageNavigationContentStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: '10px',\n padding: '20px'\n};\n\nexport const h3Style: React.CSSProperties = {\n margin: 0,\n fontSize: '16px'\n};\n\nexport const scriptExecutorContentStyle: React.CSSProperties = {\n display: 'flex',\n flex: 1,\n flexDirection: 'column',\n overflow: 'hidden'\n};\n\nexport const scriptInputSectionStyle: React.CSSProperties = {\n display: 'flex',\n flex: 1,\n flexDirection: 'column',\n minHeight: '150px',\n borderBottom: '1px solid #e0e0e0'\n};\n\nexport const scriptTextareaStyle: React.CSSProperties = {\n flex: 1,\n width: '100%',\n padding: '10px',\n fontFamily: 'monospace',\n fontSize: '14px',\n resize: 'none',\n outline: 'none',\n border: 'none'\n};\n\nexport const scriptActionsStyle: React.CSSProperties = {\n display: 'flex',\n justifyContent: 'flex-end',\n gap: '8px',\n padding: '8px',\n borderTop: '1px solid #e0e0e0'\n};\n\nexport const scriptOutputSectionStyle: React.CSSProperties = {\n display: 'flex',\n flex: 1,\n flexDirection: 'column',\n overflow: 'hidden'\n};\n\nexport const storageSearchInputStyle: React.CSSProperties = {\n width: '100%',\n padding: '8px',\n border: '1px solid #ccc',\n borderRadius: '4px'\n};\n\nexport const storageTableContainerStyle: React.CSSProperties = {\n flex: 1,\n overflowY: 'auto',\n padding: '10px'\n};\n\nexport const menuItemStyle: React.CSSProperties = {\n cursor: 'pointer',\n padding: '8px 12px'\n};\n\nexport const clearButtonStyle: React.CSSProperties = {\n marginLeft: 'auto'\n};\n\nexport const networkLogContainerStyle: React.CSSProperties = {\n padding: '10px',\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n overflow: 'hidden'\n};\n\nexport const flex1Style: React.CSSProperties = {\n flex: 1\n};\n\nexport const holdButtonsContainerStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'row',\n gap: '8px',\n marginBottom: '10px'\n};\n\nexport const textareaStyle: React.CSSProperties = {\n width: '100%',\n minHeight: '80px'\n};\n","import React, { useState, useRef, useEffect } from 'react';\n\n/**\n * @file ๋๋ฒ๊ทธ ํด์ ์ด๊ธฐ ์ํ ํ๋กํ
๋ฒํผ ์ปดํฌ๋ํธ์
๋๋ค.\n * @description ํ๋ฉด ์ฐ์ธก ํ๋จ์ ๊ณ ์ ๋์ด ์์ผ๋ฉฐ, ํด๋ฆญ ์ ๋ฉ๋ด ํจ๋์ ํ ๊ธํฉ๋๋ค. ๋ฒํผ์ ๋๋๊ทธํ์ฌ ์์น๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค.\n */\n\nimport { debugFloatingButtonStyle } from '../styles/styles';\n\ninterface FloatingButtonProps {\n /** ๋ฒํผ ํด๋ฆญ ์ ํธ์ถ๋ ํจ์ */\n onClick: () => void;\n}\n\nconst FloatingButton: React.FC<FloatingButtonProps> = ({ onClick }) => {\n const [position, setPosition] = useState({ x: 0, y: 0 });\n const [isDragging, setIsDragging] = useState(false);\n const [isVisible, setIsVisible] = useState(false);\n\n // Gesture detection refs\n const gestureStep = useRef<number>(0); // 0: initial, 1: down detected\n const gestureTimeout = useRef<NodeJS.Timeout | null>(null);\n const globalDragStart = useRef<{ x: number; y: number } | null>(null);\n\n const dragHappened = useRef(false);\n const dragStartPos = useRef({ x: 0, y: 0 });\n const elementStartPos = useRef({ x: 0, y: 0 });\n\n // Click detection refs\n const clickCount = useRef(0);\n const clickTimeout = useRef<NodeJS.Timeout | null>(null);\n\n // Global gesture detection\n useEffect(() => {\n const handleGlobalMouseDown = (e: MouseEvent) => {\n globalDragStart.current = { x: e.clientX, y: e.clientY };\n };\n\n const handleGlobalMouseUp = (e: MouseEvent) => {\n if (!globalDragStart.current) {\n return;\n }\n\n const dx = e.clientX - globalDragStart.current.x;\n const dy = e.clientY - globalDragStart.current.y;\n const absDx = Math.abs(dx);\n const absDy = Math.abs(dy);\n\n //drag ์ ์ค์ฒ ์ต์๊ฐ\n const THRESHOLD = 200;\n\n //down ์ ์ค์ฒ\n if (dy > THRESHOLD && absDy > absDx) {\n if (gestureStep.current === 0) {\n gestureStep.current = 1;\n //์ ์ค์ฒ๊ฐ ๋๋์ง ์์๋ค๋ฉด 2์ด ํ์ ์ด๊ธฐํ\n if (gestureTimeout.current) {\n clearTimeout(gestureTimeout.current);\n }\n gestureTimeout.current = setTimeout(() => {\n gestureStep.current = 0;\n }, 2000);\n }\n } else if (dx > THRESHOLD && absDx > absDy) {\n //right ์ ์ค์ฒ\n if (gestureStep.current === 1) {\n setIsVisible((prev) => !prev);\n gestureStep.current = 0;\n if (gestureTimeout.current) {\n clearTimeout(gestureTimeout.current);\n }\n } else {\n //Wrong sequence, reset\n gestureStep.current = 0;\n }\n } else {\n //Invalid gesture, reset\n // Optional: can make it stricter by resetting on any wrong click\n }\n\n globalDragStart.current = null;\n };\n\n window.addEventListener('mousedown', handleGlobalMouseDown);\n window.addEventListener('mouseup', handleGlobalMouseUp);\n\n return () => {\n window.removeEventListener('mousedown', handleGlobalMouseDown);\n window.removeEventListener('mouseup', handleGlobalMouseUp);\n if (gestureTimeout.current) {\n clearTimeout(gestureTimeout.current);\n }\n };\n }, []);\n\n // Global click detection for visibility toggle\n useEffect(() => {\n const handleGlobalClick = () => {\n clickCount.current += 1;\n\n if (clickCount.current === 1) {\n clickTimeout.current = setTimeout(() => {\n clickCount.current = 0;\n }, 3000);\n }\n\n if (clickCount.current >= 10) {\n setIsVisible((prev) => !prev);\n clickCount.current = 0;\n if (clickTimeout.current) {\n clearTimeout(clickTimeout.current);\n }\n }\n };\n\n window.addEventListener('click', handleGlobalClick);\n\n return () => {\n window.removeEventListener('click', handleGlobalClick);\n if (clickTimeout.current) {\n clearTimeout(clickTimeout.current);\n }\n };\n }, []);\n\n const handleMouseDown = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (e.button !== 0) {\n return;\n }\n dragHappened.current = false;\n setIsDragging(true);\n dragStartPos.current = { x: e.clientX, y: e.clientY };\n elementStartPos.current = { ...position };\n\n const handleMouseMove = (event: MouseEvent) => {\n const dx = event.clientX - dragStartPos.current.x;\n const dy = event.clientY - dragStartPos.current.y;\n\n if (!dragHappened.current && (Math.abs(dx) > 5 || Math.abs(dy) > 5)) {\n dragHappened.current = true;\n }\n\n setPosition({\n x: elementStartPos.current.x + dx,\n y: elementStartPos.current.y + dy\n });\n };\n\n const handleMouseUp = () => {\n window.removeEventListener('mousemove', handleMouseMove);\n window.removeEventListener('mouseup', handleMouseUp);\n setIsDragging(false);\n };\n\n window.addEventListener('mousemove', handleMouseMove);\n window.addEventListener('mouseup', handleMouseUp);\n };\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (dragHappened.current) {\n e.preventDefault();\n e.stopPropagation();\n\n return;\n }\n onClick();\n };\n\n const buttonStyle: React.CSSProperties = {\n ...debugFloatingButtonStyle,\n transform: `translate(${position.x}px, ${position.y}px)`,\n cursor: isDragging ? 'grabbing' : 'grab',\n display: isVisible ? 'flex' : 'none' // Hide until activated\n };\n\n return (\n <button style={buttonStyle} onMouseDown={handleMouseDown} onClick={handleClick}>\n DEBUG\n </button>\n );\n};\n\nexport default FloatingButton;\n","import React from 'react';\n\nimport { getCookie, setCookie } from 'sales-frontend-utils/cookie';\n\nimport { panelHeaderStyle, h2Style, menuItemStyle } from '../../styles/styles';\n\nexport function ChangeHost() {\n const handleHost = (host: 'prd' | 'stg' | 'dev' | 'local') => {\n setCookie('dsp-debug-mode-env', host);\n alert(`ํธ์คํธ๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค.` + `:${host}`);\n console.log('ํธ์คํธ๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค.', {\n 'dsp-debug-mode-env': getCookie('dsp-debug-mode-env')\n });\n };\n\n return (\n <>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>APIํธ์คํธ</h2>\n </div>\n <ul>\n <li style={menuItemStyle} onClick={() => handleHost('local')}>\n local\n </li>\n <li style={menuItemStyle} onClick={() => handleHost('dev')}>\n dev\n </li>\n <li style={menuItemStyle} onClick={() => handleHost('stg')}>\n stg\n </li>\n {/* <li style={menuItemStyle} onClick={() => handleHost('prd')}>\n prd\n </li> */}\n </ul>\n </>\n );\n}\n","import React, { useEffect } from 'react';\n\nimport { deleteCookie, getCookie, setCookie } from 'sales-frontend-utils/cookie';\n\nimport { panelHeaderStyle, h2Style, menuItemStyle } from '../../styles/styles';\n\nexport const filterNameCookieKey = 'dsp-debug-mode-filter-name';\n\nexport type DebugFilterKey =\n | 'dropdown-transform-test'\n | 'downloader'\n | 'console-log'\n | 'auth-token'\n | 'validation-off'\n | 'http-log'\n | 'data-init-button';\ninterface FilterInfo {\n key: DebugFilterKey;\n description: string;\n}\nconst filterList: FilterInfo[] = [\n {\n key: 'dropdown-transform-test',\n description: '๋๋กญ๋ค์ด transform์ ์ ์ ์๋ ํ
์คํธ'\n },\n {\n key: 'downloader',\n description: '๋ค์ด๋ก๋ ํ
๋ถ๊ธฐ ํ์ธ์ฉ'\n },\n {\n key: 'console-log',\n description: '์ฝ์๋ก๊ทธ on/off'\n },\n {\n key: 'auth-token',\n description: '์ฟ ํค์์ ํ ํฐํ๋'\n },\n {\n key: 'validation-off',\n description: '์ ํจ์ฑ๊ฒ์ฌ off'\n },\n {\n key: 'http-log',\n description: 'http ์์ฒญ/์๋ต ๋ก๊ทธ on/off'\n },\n {\n key: 'data-init-button',\n description: '์์๋จ๊ณ,์ด๊ธฐํ ๋ฒํผ ์ถ๊ฐ'\n }\n];\n\nexport function Filter() {\n const [filterName, setFilterName] = React.useState('');\n\n useEffect(() => {\n const filterName = getCookie(filterNameCookieKey);\n setFilterName(filterName);\n }, []);\n\n return (\n <>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>๋๋ฒ๊น
์ต์
</h2>\n </div>\n <ul>\n {/* filterList ๋ฅผ ์ฒดํฌ๋ฐ์ค ํํ๋ก ๋ณด์ฌ์ฃผ๊ณ , ์ฒดํฌ์, filterName์ ์ถ๊ฐํ๊ณ , ์ฒดํฌํด์ ์, filterName์์ ์ ๊ฑฐํ๋ค. */}\n {filterList.map((filter) => (\n <li style={menuItemStyle} key={filter.key}>\n <input\n type=\"checkbox\"\n checked={filterName.includes(filter.key)}\n onChange={(e) => {\n if (e.target.checked) {\n // prev๊ฐ ์๋ ๊ฒฝ์ฐ๋ ๊ทธ๋ฅ ์ถ๊ฐํ๊ณ , ์๋ ๊ฒฝ์ฐ๋ ,๋ฅผ ์ถ๊ฐํ์ฌ ์ถ๊ฐํ๋ค.\n setFilterName((prev) => {\n if (prev) {\n const newFilterName = `${prev},${filter.key}`;\n setCookie(filterNameCookieKey, newFilterName);\n\n return newFilterName;\n } else {\n setCookie(filterNameCookieKey, filter.key);\n\n return filter.key;\n }\n });\n } else {\n // prev๊ฐ ์๋ ๊ฒฝ์ฐ๋ ๊ทธ๋ฅ ์ ๊ฑฐํ๊ณ , ์๋ ๊ฒฝ์ฐ๋ ,๋ฅผ ์ ๊ฑฐํ์ฌ ์ ๊ฑฐํ๋ค.\n setFilterName((prev) => {\n // 1๊ฐ๋ง ๋จ์ ๊ฒฝ์ฐ๋ ์ญ์ , 2๊ฐ์ด์์ผ๊ฒฝ์ฐ๋ง replace๋ฅผ ์ฌ์ฉํ๋ค.\n if (prev.includes(',')) {\n // ,๋ฅผ ๊ธฐ์ค์ผ๋ก splitํ์ฌ ๋ฐฐ์ด๋ก ๋ง๋ ๋ค.\n const arr = prev.split(',');\n // filter.key๋ฅผ ์ ๊ฑฐํ๋ค.\n const newFilterName = arr.filter((item) => item !== filter.key).join(',');\n setCookie(filterNameCookieKey, newFilterName);\n\n return newFilterName;\n } else {\n deleteCookie(filterNameCookieKey);\n\n return '';\n }\n });\n }\n }}\n />\n {filter.key}\n </li>\n ))}\n </ul>\n </>\n );\n}\n","import React from 'react';\n\nimport { getCookie, setCookie } from 'sales-frontend-utils/cookie';\n\nimport { panelHeaderStyle, h2Style, menuItemStyle } from '../../styles/styles';\n\nexport function FormFactor() {\n const handleFormFactor = (formFactor: string) => {\n setCookie('x-channel-formfactor', formFactor);\n alert(`ํผํฉํฐ๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค.` + `:${formFactor}`);\n console.log('ํผํฉํฐ๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค.', {\n 'x-channel-formfactor': getCookie('x-channel-formfactor')\n });\n };\n\n return (\n <>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>ํผํฉํฐ</h2>\n </div>\n <ul>\n <li style={menuItemStyle} onClick={() => handleFormFactor('tablet')}>\n Tablet\n </li>\n <li style={menuItemStyle} onClick={() => handleFormFactor('phone')}>\n Phone\n </li>\n <li style={menuItemStyle} onClick={() => handleFormFactor('pc')}>\n PC\n </li>\n </ul>\n </>\n );\n}\n","import React from 'react';\n\nimport { deleteCookie, getCookie } from 'sales-frontend-utils/cookie';\n\nimport { h2Style, menuItemStyle, panelHeaderStyle } from '../../styles/styles';\n\nexport function InitRefresh() {\n const handleDeleteHostCookie = () => {\n deleteCookie('dsp-debug-mode-env');\n alert('ํธ์คํธ๊ฐ ์ญ์ ๋์์ต๋๋ค.');\n console.log('ํธ์คํธ๊ฐ ์ญ์ ๋์์ต๋๋ค.', {\n 'dsp-debug-mode-env': getCookie('dsp-debug-mode-env')\n });\n };\n\n const handleDeleteTokenCookie = () => {\n deleteCookie('accessToken');\n alert('ํ ํฐ์ฟ ํค๊ฐ ์ญ์ ๋์์ต๋๋ค.');\n console.log('ํ ํฐ์ฟ ํค๊ฐ ์ญ์ ๋์์ต๋๋ค.', {\n accessToken: getCookie('accessToken')\n });\n };\n const handleDeleteCustomCookie = () => {\n deleteCookie('x-channel-appversion');\n deleteCookie('x-channel-deviceid');\n deleteCookie('x-channel-devicemodel');\n deleteCookie('x-channel-formfactor');\n deleteCookie('x-channel-loginchannel');\n deleteCookie('x-channel-logintype');\n deleteCookie('x-channel-platformname');\n deleteCookie('x-channel-platformversion');\n deleteCookie('x-channel-screenid');\n deleteCookie('x-channel-business-work-division-code');\n alert('์ปค์คํ
์ฟ ํค๊ฐ ์ญ์ ๋์์ต๋๋ค.');\n console.log('์ปค์คํ
์ฟ ํค๊ฐ ์ญ์ ๋์์ต๋๋ค.', {\n 'x-channel-appversion': getCookie('x-channel-appversion'),\n 'x-channel-deviceid': getCookie('x-channel-deviceid'),\n 'x-channel-devicemodel': getCookie('x-channel-devicemodel'),\n 'x-channel-formfactor': getCookie('x-channel-formfactor'),\n 'x-channel-loginchannel': getCookie('x-channel-loginchannel'),\n 'x-channel-logintype': getCookie('x-channel-logintype'),\n 'x-channel-platformname': getCookie('x-channel-platformname'),\n 'x-channel-platformversion': getCookie('x-channel-platformversion'),\n 'x-channel-screenid': getCookie('x-channel-screenid'),\n 'x-channel-business-work-division-code': getCookie('x-channel-business-work-division-code')\n });\n };\n\n return (\n <>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>์ด๊ธฐํ</h2>\n </div>\n <ul>\n <li style={menuItemStyle}>\n <button\n onClick={() => {\n window.location.reload();\n }}\n >\n ์๋ก๊ณ ์นจ\n </button>\n </li>\n <li style={menuItemStyle}>\n <button onClick={handleDeleteHostCookie}>Host ์ญ์ </button>\n </li>\n <li style={menuItemStyle}>\n <button onClick={handleDeleteCustomCookie}>์ปค์คํ
(x-channel-) ์ญ์ </button>\n </li>\n <li style={menuItemStyle}>\n <button onClick={handleDeleteTokenCookie}>ํ ํฐ ์ญ์ </button>\n </li>\n </ul>\n </>\n );\n}\n","import React from 'react';\n\nimport { ChangeHost } from '../features/change-host';\nimport { Filter } from '../features/filter';\nimport { FormFactor } from '../features/form-factor';\nimport { InitRefresh } from '../features/init-refresh';\nimport { debugMenuPanelStyle, h2Style, menuItemStyle, modalOverlayStyle, panelHeaderStyle } from '../styles/styles';\nimport { DebugToolServiceCode, MenuItem } from '../types';\n\n/**\n * @file ๋๋ฒ๊ทธ ํด์ ๊ธฐ๋ฅ ๋ชฉ๋ก์ ๋ณด์ฌ์ฃผ๋ ๋ฉ๋ด ํจ๋ ์ปดํฌ๋ํธ์
๋๋ค.\n * @description `config.ts`์์ ์ ์๋ ๋ฉ๋ด ์์ดํ
๋ค์ ๋ฆฌ์คํธ ํํ๋ก ๋ณด์ฌ์ค๋๋ค.\n */\n\ninterface MenuPanelProps {\n /** ํ์ํ ๋ฉ๋ด ์์ดํ
์ ๋ฐฐ์ด */\n menuItems: (Omit<MenuItem, 'component'> & { component: React.ComponentType<any> })[];\n /** ๋ฉ๋ด ์์ดํ
ํด๋ฆญ ์ ํธ์ถ๋ ์ฝ๋ฐฑ ํจ์ */\n onMenuItemClick: (component: React.ComponentType) => void;\n /** ํจ๋์ ๋ซ์ ๋ ํธ์ถ๋ ์ฝ๋ฐฑ ํจ์ */\n onClose: () => void;\n serviceCode: DebugToolServiceCode;\n}\n\nconst MenuPanel: React.FC<MenuPanelProps> = ({ menuItems, onMenuItemClick, onClose, serviceCode }) => {\n return (\n <>\n <div style={modalOverlayStyle} onClick={onClose} />\n <div style={debugMenuPanelStyle}>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>Debug Menu</h2>\n <button onClick={onClose}>X</button>\n </div>\n <ul>\n {menuItems.map((item) => (\n <li key={item.id} onClick={() => onMenuItemClick(item.component)} style={menuItemStyle}>\n {item.label}\n </li>\n ))}\n </ul>\n {serviceCode === 'dsp' && (\n <>\n <Filter />\n <FormFactor />\n <ChangeHost />\n <InitRefresh />\n </>\n )}\n </div>\n </>\n );\n};\n\nexport default MenuPanel;\n","import { getCookie } from 'sales-frontend-utils/cookie';\n\nimport { DebugFilterKey, filterNameCookieKey } from './features/filter';\n\n\n/**\n * @deprecated isDebugByFilterName('validation-off') ๋ฅผ ์ฌ์ฉํ์ธ์. ํด๋น ํจ์๋ ์ญ์ ์์ \n * @returns boolean\n */\nexport function isDebugStepValidationOff(): boolean {\n return isDebugByFilterName('validation-off');\n}\n\n/**\n * @description ์ํ๋ ๊ธฐ๋ฅ์ ๋ฐ๋ผ ์ฟ ํค๋ฅผ ํ์ธํ์ฌ true/false๋ฅผ ๋ฆฌํดํ๋ค.\n * @param name DebugFilterKey\n * @returns boolean\n */\nexport function isDebugByFilterName(name: DebugFilterKey): boolean {\n const filterNames = getCookie(filterNameCookieKey)?.split(',');\n\n return filterNames?.includes(name) || false;\n\n}","import { useState, useEffect, useCallback } from 'react';\n\nimport { isClient } from 'sales-frontend-utils';\n\nimport { isDebugByFilterName } from '../../debug-utils';\nimport { LogEntry, LogType } from '../../types';\n\n/**\n * @file '์ฝ์ ๋ก๊ทธ ํ์ธ' ๊ธฐ๋ฅ์ ํต์ฌ ๋ก์ง์ ๋ด๋นํ๋ ํ
์
๋๋ค.\n * @description\n * - ์ ์ญ(๋ชจ๋ ์ค์ฝํ) ์ํ๋ก ๋ก๊ทธ๋ฅผ ๊ด๋ฆฌํ์ฌ, ์ปดํฌ๋ํธ์ ์๋ช
์ฃผ๊ธฐ์ ๊ด๊ณ์์ด ๋ก๊ทธ๋ฅผ ์์งํฉ๋๋ค.\n * - `console` ๊ฐ์ฒด์ ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ํ์ฌ ๋ก๊ทธ๋ฅผ ๊ฐ๋ก์ฑ๋๋ค.\n * - ์ต์ ๋ฒ ํจํด(listeners)์ ์ฌ์ฉํด ์ฌ๋ฌ ์ปดํฌ๋ํธ์์ ๋ก๊ทธ ์ํ๋ฅผ ๊ตฌ๋
ํ๊ณ ์
๋ฐ์ดํธ๋ฅผ ๋ฐ์ ์ ์๋๋ก ํฉ๋๋ค.\n */\n\n// ์ ์ญ์ผ๋ก ๊ด๋ฆฌ๋๋ ๋ก๊ทธ ๋ฐฐ์ด. ์ฑ ์ ์ฒด์ ๋ก๊ทธ๊ฐ ์ฌ๊ธฐ์ ์์
๋๋ค.\nlet globalLogs: LogEntry[] = [];\n// ๋ก๊ทธ ์ํ์ ๋ณ๊ฒฝ์ ๊ตฌ๋
ํ๋ ์ปดํฌ๋ํธ(์ setState ํจ์) ๋ชฉ๋ก์
๋๋ค.\nlet listeners: React.Dispatch<React.SetStateAction<LogEntry[]>>[] = [];\n\n// ๊ธฐ์กด console ๋ฉ์๋๋ฅผ ๋ฐฑ์
ํ๊ธฐ ์ํ ๊ฐ์ฒด์
๋๋ค.\nconst originalConsoleMethods: { [key in LogType]?: (...args: any[]) => void } = {};\n// ์ฝ์์ด ์ด๋ฏธ ์ค๋ฒ๋ผ์ด๋๋์๋์ง ํ์ธํ๋ ํ๋๊ทธ์
๋๋ค.\nlet isConsoleOverridden = false;\n\n//๋ก๊ทธ๋ฐฐ์ด์ ์ต๋๊ฐฏ์\nconst MAX_LOGS = 10;\n\n// ์๋ก์ด ๋ก๊ทธ๋ฅผ ์ ์ญ ๋ก๊ทธ ๋ฐฐ์ด์ ์ถ๊ฐํ๊ณ , ๋ชจ๋ ๊ตฌ๋
์์๊ฒ ์๋ฆฝ๋๋ค.\nconst addLog = (type: LogType, ...args: any[]) => {\n const newLog: LogEntry = {\n id: Date.now() + Math.random(),\n type,\n timestamp: new Date().toLocaleTimeString(),\n message: args\n };\n\n //์ต๋์ฌ์ด์ฆ์ ๋๋ฌํ ๊ฒฝ์ฐ, ์ ์ผ ๋จผ์ ๋ค์ด์จ ๋ก๊ทธ๋ฅผ ์ญ์ ํ๋ค.\n if (globalLogs.length >= MAX_LOGS) {\n\n //console-log๊ฐ ์ผ์ง ๊ฒฝ์ฐ์๋ ์ต๋์ฌ์ด์ฆ ๋ฌด์ํ๊ณ ๊ณ์ ์ ์ฌํ๋ค.\n if (!isDebugByFilterName('console-log')) {\n globalLogs.shift();\n }\n }\n globalLogs = [...globalLogs, newLog];\n listeners.forEach((listener) => listener([...globalLogs]));\n};\n\n/**\n * `console` ๊ฐ์ฒด์ ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ํ์ฌ ๋ก๊ทธ ์์ง์ ์์ํฉ๋๋ค.\n * ์ค๋ณต ์คํ์ ๋ฐฉ์งํ๊ธฐ ์ํด `isConsoleOverridden` ํ๋๊ทธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.\n */\nexport const initializeConsoleLogOverride = () => {\n if (!isClient() || isConsoleOverridden) {\n return;\n }\n const logTypes: LogType[] = ['log', 'info', 'warn', 'error', 'debug'];\n\n logTypes.forEach((type) => {\n // ๊ธฐ์กด ๋ฉ์๋ ์ ์ฅ\n originalConsoleMethods[type] = console[type];\n\n // ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋\n console[type] = (...args: any[]) => {\n // ๊ธฐ์กด ๋ฉ์๋๋ฅผ ๋จผ์ ํธ์ถํ์ฌ ๋ธ๋ผ์ฐ์ ์ฝ์์๋ ์ ์์ ์ผ๋ก ๋ก๊ทธ๊ฐ ํ์๋๋๋ก ํฉ๋๋ค.\n if (originalConsoleMethods[type]) {\n originalConsoleMethods[type]?.apply(console, args);\n }\n // ๊ทธ ๋ค์, ๋๋ฒ๊ทธ ํด์ ๋ก๊ทธ ์ํ์ ์ถ๊ฐํฉ๋๋ค.\n addLog(type, ...args);\n };\n });\n\n isConsoleOverridden = true;\n};\n\n/**\n * ์ค๋ฒ๋ผ์ด๋ํ๋ `console` ๋ฉ์๋๋ฅผ ์๋๋๋ก ๋ณต์ํฉ๋๋ค.\n * `DebugTool` ์ปดํฌ๋ํธ๊ฐ ์ธ๋ง์ดํธ๋ ๋ ํธ์ถ๋ฉ๋๋ค.\n */\nexport const restoreConsoleLog = () => {\n if (!isClient() || !isConsoleOverridden) {\n return;\n }\n\n const logTypes: LogType[] = ['log', 'info', 'warn', 'error', 'debug'];\n logTypes.forEach((type) => {\n if (originalConsoleMethods[type]) {\n console[type] = originalConsoleMethods[type];\n }\n });\n isConsoleOverridden = false;\n};\n\n/**\n * ์ปดํฌ๋ํธ์์ ์ฝ์ ๋ก๊ทธ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ํ
์
๋๋ค.\n * @returns { logs, clearLogs }\n */\nexport const useConsoleLog = () => {\n const [logs, setLogs] = useState<LogEntry[]>(globalLogs);\n\n useEffect(() => {\n // ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ๋ ๋, ์์ ์ setState ํจ์๋ฅผ listener๋ก ๋ฑ๋กํฉ๋๋ค.\n listeners.push(setLogs);\n\n // ์ปดํฌ๋ํธ๊ฐ ์ธ๋ง์ดํธ๋ ๋, listener์์ ์ ๊ฑฐํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํฉ๋๋ค.\n return () => {\n listeners = listeners.filter((l) => l !== setLogs);\n };\n }, []);\n\n // ๋ชจ๋ ๋ก๊ทธ๋ฅผ ์ง์ฐ๋ ํจ์์
๋๋ค.\n const clearLogs = useCallback(() => {\n globalLogs = [];\n listeners.forEach((listener) => listener([]));\n }, []);\n\n return { logs, clearLogs };\n};\n","import React, { useState, useRef, useMemo, useEffect } from 'react';\n\nimport {\n clearButtonStyle,\n debugFeaturePanelStyle,\n h2Style,\n logItemStyle,\n logListContainerStyle,\n logMessageStyle,\n logTimestampStyle,\n logTypeStyles,\n modalOverlayStyle,\n panelHeaderStyle,\n panelToolbarStyle\n} from '../../styles/styles';\nimport { FeaturePanelProps, LogType, LogEntry } from '../../types';\n\nimport { useConsoleLog } from './use-console-log';\n\nconst safeStringify = (obj: any): string => {\n try {\n return JSON.stringify(obj, null, 2);\n } catch (e) {\n return '[Unserializable Object]';\n }\n};\n\nconst LogMessage: React.FC<{ entry: LogEntry }> = ({ entry }: { entry: LogEntry }) => {\n const messageParts = entry.message.map((part) => {\n if (typeof part === 'object' && part !== null) {\n return safeStringify(part);\n }\n\n return String(part);\n });\n\n const style = { ...logMessageStyle, ...logTypeStyles[entry.type] };\n\n return <pre style={style}>{messageParts.join(' ')}</pre>;\n};\n\nconst ConsoleLogPanel: React.FC<FeaturePanelProps> = ({ onClose }: { onClose: () => void }) => {\n const { logs, clearLogs } = useConsoleLog();\n const [filter, setFilter] = useState<LogType | 'all'>('all');\n const logContainerRef = useRef<HTMLDivElement>(null);\n\n const filteredLogs = useMemo(() => {\n if (filter === 'all') {\n return logs;\n }\n\n return logs.filter((log) => log.type === filter);\n }, [logs, filter]);\n\n useEffect(() => {\n if (logContainerRef.current) {\n logContainerRef.current.scrollTop = logContainerRef.current.scrollHeight;\n }\n }, [filteredLogs]);\n\n const segmentOptions: (LogType | 'all')[] = ['all', 'log', 'warn', 'error'];\n\n return (\n <>\n <div style={modalOverlayStyle} onClick={onClose} />\n <div style={debugFeaturePanelStyle}>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>Console Logs</h2>\n <button onClick={onClose}>X</button>\n </div>\n <div style={panelToolbarStyle}>\n <div>\n {segmentOptions.map((option) => (\n <button key={option} onClick={() => setFilter(option)} disabled={filter === option}>\n {option.charAt(0).toUpperCase() + option.slice(1)}\n </button>\n ))}\n </div>\n <button onClick={clearLogs} style={clearButtonStyle}>\n Clear\n </button>\n </div>\n <div style={logListContainerStyle} ref={logContainerRef}>\n {filteredLogs.map((log) => (\n <div key={log.id} style={logItemStyle}>\n <span style={logTimestampStyle}>{log.timestamp}</span>\n <LogMessage entry={log} />\n </div>\n ))}\n </div>\n </div>\n </>\n );\n};\n\nexport default ConsoleLogPanel;\n","import React, { useState, useMemo, useEffect } from 'react';\n\nimport { deleteCookie } from 'sales-frontend-utils';\n\nimport { loginTypes } from '../../config';\nimport {\n debugFeaturePanelStyle,\n formActionsStyle,\n h2Style,\n loginFormContainerStyle,\n modalOverlayStyle,\n panelHeaderStyle\n} from '../../styles/styles';\nimport { FeaturePanelProps, LoginTypeConfig } from '../../types';\n\n/**\n * @file '๊ฐํธ ๋ก๊ทธ์ธ' ๊ธฐ๋ฅ์ UI๋ฅผ ๋ด๋นํ๋ ํจ๋ ์ปดํฌ๋ํธ์
๋๋ค.\n * @description\n * - `config.ts`์ `loginTypes` ์ค์ ์ ๊ธฐ๋ฐ์ผ๋ก ๋์ ์ธ ๋ก๊ทธ์ธ ํผ์ ์์ฑํฉ๋๋ค.\n * - ์ค์ ๋ก๊ทธ์ธ ๋ก์ง์ `onLogin` prop์ผ๋ก ์ธ๋ถ์์ ์ฃผ์
๋ฐ์ ์ฒ๋ฆฌํฉ๋๋ค.\n * ์ด ์ปดํฌ๋ํธ๋ UI์ ๋ฐ์ดํฐ ์์ง์ ์ญํ ๋ง ์ํํ์ฌ ์ฌ์ฌ์ฉ์ฑ์ ๋์
๋๋ค.\n */\n\ninterface LoginPanelProps extends FeaturePanelProps {\n onLogin: (loginType: LoginTypeConfig['id'], data: Record<string, string>) => void;\n}\n\nconst LoginPanel: React.FC<LoginPanelProps> = ({ onClose, onLogin }) => {\n const [selectedTypeId, setSelectedTypeId] = useState<string>(loginTypes[0]?.id || '');\n const [formData, setFormData] = useState<Record<string, string>>({});\n const selectedType = useMemo(() => loginTypes.find((t) => t.id === selectedTypeId), [selectedTypeId]);\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const { name, value } = e.target;\n setFormData((prev) => ({ ...prev, [name]: value }));\n };\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n if (selectedType) {\n //๋ก๊ทธ์ธ ์ ์ ํ ํฐ์ด๊ธฐํ\n deleteCookie('accessToken');\n onLogin(selectedType.id, formData);\n onClose();\n }\n };\n\n useEffect(() => {\n setFormData({});\n }, [selectedType]);\n\n return (\n <>\n <div style={modalOverlayStyle} onClick={onClose} />\n <div style={debugFeaturePanelStyle}>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>๊ฐํธ ๋ก๊ทธ์ธ</h2>\n <button onClick={onClose}>X</button>\n </div>\n\n <form style={loginFormContainerStyle} onSubmit={handleSubmit}>\n <div>\n <label htmlFor=\"login-type-select\">๋ก๊ทธ์ธ ์ ํ</label>\n <select id=\"login-type-select\" value={selectedTypeId} onChange={(e) => setSelectedTypeId(e.target.value)}>\n {loginTypes.map((type) => (\n <option key={type.id} value={type.id}>\n {type.label}\n </option>\n ))}\n </select>\n </div>\n\n {selectedType?.fields.map((field) => (\n <div key={field.name}>\n <label htmlFor={field.name}>{field.label}</label>\n <input\n type={field.type}\n id={field.name}\n name={field.name}\n placeholder={field.placeholder}\n value={formData[field.name] || ''}\n onChange={handleInputChange}\n required\n />\n </div>\n ))}\n\n <div style={formActionsStyle}>\n <button type=\"submit\">๋ก๊ทธ์ธ</button>\n </div>\n </form>\n </div>\n </>\n );\n};\n\nexport default LoginPanel;\n","import React, { useState, useMemo } from 'react';\n\nimport {\n type RequestInfo,\n type ResponseInfo,\n type ErrorInfo,\n type HeldRequest,\n type HeldResponse,\n type HeldError,\n useDebugStore\n} from 'sales-frontend-stores';\n\nimport {\n debugFeaturePanelStyle,\n flex1Style,\n h2Style,\n holdButtonsContainerStyle,\n logContentStyle,\n logListStyle,\n logSummaryStyle,\n modalOverlayStyle,\n networkLogContainerStyle,\n panelHeaderStyle,\n searchContainerStyle\n} from '../../styles/styles';\n\ninterface NetworkLogProps {\n onClose: () => void;\n}\n\nconst SEARCH_SECTIONS = [\n { value: 'all', label: '์ ์ฒด' },\n { value: 'url', label: '์ฃผ์' },\n { value: 'headers', label: 'ํค๋' },\n { value: 'params', label: 'ํ๋ผ๋ฏธํฐ' },\n { value: 'data', label: '์์ฒญ' },\n { value: 'response', label: '์๋ต' },\n { value: 'error', label: '์๋ฌ' }\n];\n\ntype Log = (RequestInfo | ResponseInfo | ErrorInfo | HeldRequest | HeldResponse | HeldError) & {\n type: string;\n holdStatus?: 'held' | 'playing';\n};\n\nconst getLogInfo = (log: Log): RequestInfo | ResponseInfo | ErrorInfo => {\n if (log.holdStatus === 'held') {\n if ('request' in log) {\n return (log as HeldRequest).request;\n }\n if ('response' in log) {\n return (log as HeldResponse).response;\n }\n if ('error' in log) {\n return (log as HeldError).error;\n }\n }\n\n return log as RequestInfo | ResponseInfo | ErrorInfo;\n};\n\nconst NetworkLog: React.FC<NetworkLogProps> = ({ onClose }) => {\n const {\n requests,\n responses,\n errors,\n clear,\n isHold,\n toggleHold,\n heldRequests,\n heldResponses,\n heldErrors,\n playAllRequests,\n playAllResponses\n } = useDebugStore();\n const [searchTerm, setSearchTerm] = useState('');\n const [searchSection, setSearchSection] = useState(SEARCH_SECTIONS[0]?.value);\n\n const allLogs = useMemo(() => {\n const logs: Log[] = [];\n requests.forEach((req: RequestInfo) => logs.push({ ...req, type: 'request' }));\n responses.forEach((res: ResponseInfo) => logs.push({ ...res, type: 'response' }));\n errors.forEach((err: ErrorInfo) => logs.push({ ...err, type: 'error' }));\n heldRequests.forEach((req: HeldRequest) => logs.push({ ...req, type: 'request', holdStatus: 'held' }));\n heldResponses.forEach((res: HeldResponse) => logs.push({ ...res, type: 'response', holdStatus: 'held' }));\n heldErrors.forEach((err: HeldError) => logs.push({ ...err, type: 'error', holdStatus: 'held' }));\n\n logs.sort((a, b) => {\n const aInfo = getLogInfo(a);\n const bInfo = getLogInfo(b);\n const aTime = 'startTime' in aInfo ? aInfo.startTime : 0;\n const bTime = 'startTime' in bInfo ? bInfo.startTime : 0;\n\n return bTime - aTime;\n });\n\n return logs;\n }, [requests, responses, errors, heldRequests, heldResponses, heldErrors]);\n\n const filteredLogs = useMemo(() => {\n if (!searchTerm) {\n return allLogs;\n }\n const lowercasedTerm = searchTerm.toLowerCase();\n\n return allLogs.filter((log: Log) => {\n const logInfo = getLogInfo(log);\n switch (searchSection) {\n case 'url':\n return logInfo.url?.toLowerCase().includes(lowercasedTerm);\n case 'headers':\n return (\n 'headers' in logInfo &&\n logInfo.headers &&\n JSON.stringify(logInfo.headers)?.toLowerCase().includes(lowercasedTerm)\n );\n case 'params':\n return (\n 'params' in logInfo &&\n logInfo.params &&\n JSON.stringify(logInfo.params)?.toLowerCase().includes(lowercasedTerm)\n );\n case 'data':\n return (\n 'data' in logInfo &&\n logInfo.data &&\n log.type === 'request' &&\n JSON.stringify(logInfo.data)?.toLowerCase().includes(lowercasedTerm)\n );\n case 'response':\n return (\n 'data' in logInfo &&\n logInfo.data &&\n log.type === 'response' &&\n JSON.stringify(logInfo.data)?.toLowerCase().includes(lowercasedTerm)\n );\n case 'error':\n return log.type === 'error' && JSON.stringify(logInfo)?.toLowerCase().includes(lowercasedTerm);\n case 'all':\n default:\n return JSON.stringify(logInfo).toLowerCase().includes(lowercasedTerm);\n }\n });\n }, [allLogs, searchTerm, searchSection]);\n\n const renderLogSummary = (log: Log) => {\n const logInfo = getLogInfo(log);\n const prefix = log.holdStatus === 'held' ? '[HELD] ' : '';\n if (log.type === 'request') {\n return `${prefix}[REQ] ${logInfo.method.toUpperCase()} ${logInfo.url}`;\n }\n if (log.type === 'response' && 'status' in logInfo) {\n return `${prefix}[RES] ${logInfo.method.toUpperCase()} ${logInfo.url} - ${logInfo.status}`;\n }\n if (log.type === 'error' && 'message' in logInfo) {\n return `${prefix}[ERR] ${logInfo.method.toUpperCase()} ${logInfo.url} - ${logInfo.message}`;\n }\n\n return 'Unknown Log';\n };\n\n const renderLogContent = (log: Log) => {\n const logInfo = getLogInfo(log);\n\n return <pre>{JSON.stringify(logInfo, null, 2)}</pre>;\n };\n\n return (\n <>\n <div style={modalOverlayStyle} onClick={onClose} />\n <div style={debugFeaturePanelStyle}>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>๋คํธ์ํฌ ๋ก๊ทธ</h2>\n <button onClick={onClose}>X</button>\n </div>\n <div style={networkLogContainerStyle}>\n <div style={searchContainerStyle}>\n <select value={searchSection} onChange={(e) => setSearchSection(e.target.value)}>\n {SEARCH_SECTIONS.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n <input\n type=\"text\"\n placeholder=\"๊ฒ์...\"\n value={searchTerm}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => setSearchTerm(e.target.value)}\n style={flex1Style}\n />\n <label>\n <input type=\"checkbox\" id=\"hold-checkbox\" checked={isHold} onChange={toggleHold} />\n Hold\n </label>\n <button onClick={clear}>clear</button>\n </div>\n {isHold && (\n <div style={holdButtonsContainerStyle}>\n <button onClick={() => playAllRequests()}>REQ Resolve</button>\n <button onClick={() => playAllResponses()}>RES Resolve</button>\n </div>\n )}\n <div style={logListStyle}>\n {filteredLogs.length === 0 ? (\n <p>ํ์ํ ๋ก๊ทธ๊ฐ ์์ต๋๋ค.</p>\n ) : (\n <div>\n {filteredLogs.map((log, index) => (\n <details key={index}>\n <summary style={logSummaryStyle}>{renderLogSummary(log)}</summary>\n <div style={logContentStyle}>{renderLogContent(log)}</div>\n </details>\n ))}\n </div>\n )}\n </div>\n </div>\n </div>\n </>\n );\n};\n\nexport default NetworkLog;\n","import React, { useState } from 'react';\n\nimport {\n debugFeaturePanelStyle,\n flex1Style,\n h2Style,\n modalOverlayStyle,\n pageNavigationContentStyle,\n panelHeaderStyle\n} from '../../styles/styles';\nimport { FeaturePanelProps } from '../../types';\n\n\n/**\n * window.location ์์ ๋ชจ๋ ์์ฑ์\n * ๋ณด๊ธฐ ํธํ๊ฒ ๋ฆฌ์คํธํ ์ปดํฌ๋ํธ๋ก ๋ณด์ฌ์ค๋ค.\n * \n * ๊ฐ ์ ๋ณด์์ ๋ณต์ฌ๋ฒํผ ์ถ๊ฐ\n */\nconst LocationInfo = () => {\n return Object.keys(location).map(key => {\n const val = location[key as keyof Location];\n if (typeof val === 'string') {\n return <div key={key}>{key}: {val} {val && <button onClick={() => navigator.clipboard.writeText(val)} >๋ณต์ฌ</button>}</div>\n }\n })\n}\n\n\n/**\n * @file 'ํ์ด์ง ์ด๋' ๊ธฐ๋ฅ์ UI๋ฅผ ๋ด๋นํ๋ ํจ๋ ์ปดํฌ๋ํธ์
๋๋ค.\n * @description ์ฌ์ฉ์๊ฐ ์
๋ ฅํ URL๋ก ํ์ด์ง๋ฅผ ์ด๋์ํต๋๋ค.\n */\nconst PageNavigationPanel: React.FC<FeaturePanelProps> = ({ onClose }) => {\n const [url, setUrl] = useState<string>('');\n\n const handleNavigate = () => {\n if (url) {\n self.location.href = url;\n }\n };\n\n\n return (\n <>\n <div style={modalOverlayStyle} onClick={onClose} />\n <div style={debugFeaturePanelStyle}>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>ํ์ด์ง ์ ๋ณด</h2>\n <button onClick={onClose}>X</button>\n </div>\n <div style={pageNavigationContentStyle}>\n <br /><br />\n ํ์ด์ง์ ๋ณด :\n <span style={{ whiteSpace: 'normal', wordBreak: 'break-all' }}>{LocationInfo()}</span>\n <br /><br />\n ํ์ด์ง์ด๋ :\n <input\n type=\"text\"\n value={url}\n onChange={(e) => setUrl(e.target.value)}\n placeholder=\"์ด๋ํ URL์ ์
๋ ฅํ์ธ์ (์: /main)\"\n style={flex1Style}\n />\n <button onClick={handleNavigate}>์ด๋</button>\n </div>\n </div >\n </>\n );\n};\n\nexport default PageNavigationPanel;\n","import React, { useState } from 'react';\n\nimport {\n debugFeaturePanelStyle,\n h2Style,\n h3Style,\n logItemStyle,\n logListContainerStyle,\n logMessageStyle,\n logTimestampStyle,\n modalOverlayStyle,\n panelHeaderStyle,\n scriptActionsStyle,\n scriptExecutorContentStyle,\n scriptInputSectionStyle,\n scriptOutputSectionStyle,\n scriptTextareaStyle\n} from '../../styles/styles';\n\nimport type { FeaturePanelProps } from '../../types';\n\n/**\n * @file '์คํฌ๋ฆฝํธ ์คํ' ๊ธฐ๋ฅ์ UI ๋ฐ ๋ก์ง์ ๋ด๋นํ๋ ํจ๋ ์ปดํฌ๋ํธ์
๋๋ค.\n */\n\ntype ResultLogType = 'log' | 'warn' | 'error' | 'return';\n\ninterface ResultLog {\n id: number;\n type: ResultLogType;\n timestamp: string;\n message: any[];\n}\n\nconst logTypeStyles: { [key in ResultLogType]: React.CSSProperties } = {\n log: { color: '#333333' },\n warn: { color: '#ffc107' },\n error: { color: '#dc3545' },\n return: { color: '#8a2be2' }\n};\n\nconst safeStringify = (obj: any): string => {\n try {\n const replacer = (key: any, value: any) => (typeof value === 'bigint' ? value.toString() : value);\n\n return JSON.stringify(obj, replacer, 2);\n } catch (e) {\n return '[Unserializable Object]';\n }\n};\n\nconst ResultMessage: React.FC<{ log: ResultLog }> = ({ log }) => {\n const messageParts = log.message.map((part) => {\n if (typeof part === 'object' && part !== null) {\n return safeStringify(part);\n }\n\n return String(part);\n });\n\n const prefix = log.type === 'return' ? 'โฉ ' : '';\n const style = { ...logMessageStyle, ...logTypeStyles[log.type] };\n\n return (\n <pre style={style}>\n {prefix}\n {messageParts.join(' ')}\n </pre>\n );\n};\n\nexport const ScriptExecutorPanel: React.FC<FeaturePanelProps> = ({ onClose }) => {\n const [code, setCode] = useState<string>('// ์ฌ๊ธฐ์ ์คํํ ์ฝ๋๋ฅผ ์
๋ ฅํ์ธ์\\nconsole.log(\"Hello, World!\");');\n const [results, setResults] = useState<ResultLog[]>([]);\n\n const addResult = (type: ResultLogType, ...args: any[]) => {\n setResults((prevResults) => [\n ...prevResults,\n {\n id: Date.now() + Math.random(),\n type,\n timestamp: new Date().toLocaleTimeString(),\n message: args\n }\n ]);\n };\n\n const handleExecute = () => {\n const originalConsole = { ...console };\n const newConsole = {\n log: (...args: any[]) => {\n originalConsole.log(...args);\n addResult('log', ...args);\n },\n warn: (...args: any[]) => {\n originalConsole.warn(...args);\n addResult('warn', ...args);\n },\n error: (...args: any[]) => {\n originalConsole.error(...args);\n addResult('error', ...args);\n }\n };\n\n try {\n Object.assign(console, newConsole);\n // eslint-disable-next-line no-new-func\n const result = new Function(code)();\n if (result !== undefined) {\n addResult('return', result);\n }\n } catch (e: any) {\n addResult('error', e.name, e.message);\n } finally {\n Object.assign(console, originalConsole);\n }\n };\n\n const handleClear = () => {\n setResults([]);\n };\n\n return (\n <>\n <div style={modalOverlayStyle} onClick={onClose} />\n <div style={{ ...debugFeaturePanelStyle, ...scriptExecutorContentStyle }}>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>์คํฌ๋ฆฝํธ ์คํ</h2>\n <button onClick={onClose}>X</button>\n </div>\n <div style={scriptExecutorContentStyle}>\n <div style={scriptInputSectionStyle}>\n <textarea\n style={scriptTextareaStyle}\n value={code}\n onChange={(e) => setCode(e.target.value)}\n spellCheck=\"false\"\n />\n <div style={scriptActionsStyle}>\n <button onClick={handleExecute}>์คํ (โถ)</button>\n <button onClick={handleClear}>๊ฒฐ๊ณผ ์ง์ฐ๊ธฐ</button>\n </div>\n </div>\n <div style={scriptOutputSectionStyle}>\n <div style={panelHeaderStyle}>\n <h3 style={h3Style}>๊ฒฐ๊ณผ</h3>\n </div>\n <div style={logListContainerStyle}>\n {results.map((log) => (\n <div key={log.id} style={logItemStyle}>\n <span style={logTimestampStyle}>{log.timestamp}</span>\n <ResultMessage log={log} />\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n </>\n );\n};\n\nexport default ScriptExecutorPanel;\n","import { useState, useEffect, useCallback } from 'react';\n\nimport { deleteCookie, setCookie } from 'sales-frontend-utils/cookie';\n\nimport { StorageType, StorageItem } from '../../types';\n\n\n\n/**\n * @file '์คํ ๋ฆฌ์ง ๊ด๋ฆฌ' ๊ธฐ๋ฅ์ ํต์ฌ ๋ก์ง์ ๋ด๋นํ๋ ํ
์
๋๋ค.\n * @description\n * - `localStorage`์ `document.cookie`์ ๋ณต์กํ API๋ฅผ ์ถ์ํํฉ๋๋ค.\n * - `storageType` prop์ ๋ฐ๋ผ ๋ ์คํ ๋ฆฌ์ง์ ๋ํ CRUD ๋ก์ง์ ๋์ผํ ์ธํฐํ์ด์ค๋ก ์ ๊ณตํฉ๋๋ค.\n */\n\n/**\n * `localStorage` ๋๋ `cookie` ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ํ
์
๋๋ค.\n * @param storageType - ๊ด๋ฆฌํ ์คํ ๋ฆฌ์ง์ ์ข
๋ฅ ('localStorage' ๋๋ 'cookie')\n * @returns { items, setItem, removeItem, loadItems }\n */\nexport const useStorage = (storageType: StorageType) => {\n const [items, setItems] = useState<StorageItem[]>([]);\n\n // ์คํ ๋ฆฌ์ง์์ ๋ชจ๋ ์์ดํ
์ ๋ถ๋ฌ์ ์ํ๋ฅผ ์
๋ฐ์ดํธํ๋ ํจ์์
๋๋ค.\n const loadItems = useCallback(() => {\n const newItems: StorageItem[] = [];\n if (storageType === 'localStorage') {\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key) {\n newItems.push({ key, value: localStorage.getItem(key) || '' });\n }\n }\n } else {\n const cookies = document.cookie.split(';');\n cookies.forEach((cookie) => {\n const parts = cookie.split('=');\n const key = parts.shift()?.trim();\n if (key) {\n newItems.push({ key, value: decodeURIComponent(parts.join('=')) });\n }\n });\n }\n setItems(newItems);\n }, [storageType]);\n\n // ์ปดํฌ๋ํธ ๋ง์ดํธ ์ ์์ดํ
์ ๋ถ๋ฌ์ต๋๋ค.\n useEffect(() => {\n loadItems();\n }, [loadItems]);\n\n // ์คํ ๋ฆฌ์ง์ ์์ดํ
์ ์ถ๊ฐํ๊ฑฐ๋ ์์ ํ๋ ํจ์์
๋๋ค.\n const setItem = useCallback(\n (key: string, value: string) => {\n if (storageType === 'localStorage') {\n localStorage.setItem(key, value);\n } else {\n setCookie(key, value);\n }\n loadItems(); // ๋ชฉ๋ก ์๋ก๊ณ ์นจ\n },\n [storageType, loadItems]\n );\n\n // ์คํ ๋ฆฌ์ง์์ ์์ดํ
์ ์ ๊ฑฐํ๋ ํจ์์
๋๋ค.\n const removeItem = useCallback(\n (key: string) => {\n if (storageType === 'localStorage') {\n localStorage.removeItem(key);\n } else {\n deleteCookie(key);\n }\n loadItems(); // ๋ชฉ๋ก ์๋ก๊ณ ์นจ\n },\n [storageType, loadItems]\n );\n\n return { items, setItem, removeItem, loadItems };\n};\n","import React, { useState, useMemo } from 'react';\n\nimport {\n debugFeaturePanelStyle,\n h2Style,\n logContentStyle,\n modalOverlayStyle,\n panelHeaderStyle,\n panelToolbarStyle,\n storageSearchInputStyle,\n storageTableContainerStyle,\n textareaStyle\n} from '../../styles/styles';\nimport { FeaturePanelProps, StorageType, StorageItem } from '../../types';\n\nimport { useStorage } from './use-storage';\n\n/**\n * @file '์คํ ๋ฆฌ์ง ๊ด๋ฆฌ' ๊ธฐ๋ฅ์ UI๋ฅผ ๋ด๋นํ๋ ํจ๋ ์ปดํฌ๋ํธ์
๋๋ค.\n */\n\ninterface StoragePanelProps extends FeaturePanelProps {\n storageType: StorageType;\n}\n\nconst ValueDisplay: React.FC<{ value: string }> = ({ value }) => {\n try {\n const parsed = JSON.parse(value);\n if (typeof parsed === 'object' && parsed !== null) {\n return <pre style={logContentStyle}>{JSON.stringify(parsed, null, 2)}</pre>;\n }\n } catch (e) {\n //\n }\n\n return <div style={logContentStyle}>{value}</div>;\n};\n\nconst EditableRow: React.FC<{\n item: StorageItem;\n onSave: (key: string, value: string) => void;\n onRemove: (key: string) => void;\n}> = ({ item, onSave, onRemove }) => {\n const [isEditing, setIsEditing] = useState(false);\n const [value, setValue] = useState(item.value);\n\n const handleSave = () => {\n onSave(item.key, value);\n setIsEditing(false);\n };\n\n const handleEdit = () => {\n setValue(item.value);\n setIsEditing(true);\n };\n\n return (\n <details>\n <summary>{item.key}</summary>\n <div>\n {isEditing ? <button onClick={handleSave}>Save</button> : <button onClick={handleEdit}>Edit</button>}\n <button onClick={() => onRemove(item.key)}>Remove</button>\n {isEditing ? (\n <textarea value={value} onChange={(e) => setValue(e.target.value)} style={textareaStyle} />\n ) : (\n <ValueDisplay value={item.value} />\n )}\n </div>\n </details>\n );\n};\n\nconst StoragePanel: React.FC<StoragePanelProps> = ({ onClose, storageType }) => {\n const { items, setItem, removeItem } = useStorage(storageType);\n const [filter, setFilter] = useState('');\n\n const filteredItems = useMemo(() => {\n if (!filter) {\n return items;\n }\n\n return items.filter(\n (item) =>\n item.key.toLowerCase().includes(filter.toLowerCase()) || item.value.toLowerCase().includes(filter.toLowerCase())\n );\n }, [items, filter]);\n\n return (\n <>\n <div style={modalOverlayStyle} onClick={onClose} />\n <div style={debugFeaturePanelStyle}>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>{storageType === 'localStorage' ? 'Local Storage' : 'Cookies'}</h2>\n <button onClick={onClose}>X</button>\n </div>\n <div style={panelToolbarStyle}>\n <input\n type=\"text\"\n placeholder=\"Search key or value...\"\n value={filter}\n onChange={(e) => setFilter(e.target.value)}\n style={storageSearchInputStyle}\n />\n </div>\n <div style={storageTableContainerStyle}>\n {filteredItems.map((item) => (\n <EditableRow key={item.key} item={item} onSave={setItem} onRemove={removeItem} />\n ))}\n </div>\n </div>\n </>\n );\n};\n\nexport default StoragePanel;\n","import React from 'react';\n\nimport ConsoleLogPanel from './features/console-log/console-log-panel';\nimport LoginPanel from './features/login-dsp/login-panel';\nimport NetworkLog from './features/network-log';\nimport PageNavigationPanel from './features/page-navigation/page-navigation-panel';\nimport ScriptExecutorPanel from './features/script-executor/script-executor-panel';\nimport StoragePanel from './features/storage/storage-panel';\nimport { MenuItem, LoginTypeConfig } from './types';\n\n/**\n * @file ๋๋ฒ๊ทธ ํด์ ๋ชจ๋ ์ค์ ์ ๊ด๋ฆฌํ๋ ์ค์ ์ค์ ํ์ผ์
๋๋ค.\n * @description\n * - ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ฑฐ๋ ๊ธฐ์กด ๊ธฐ๋ฅ์ ์์ /์ ๊ฑฐํ ๋ ์ด ํ์ผ์ ์์ ํฉ๋๋ค.\n * - `menuItems`: ๋๋ฒ๊ทธ ํด์ ํ์๋ ๋ฉ๋ด ๋ชฉ๋ก์ ์ ์ํฉ๋๋ค.\n * - `loginTypes`: '๊ฐํธ ๋ก๊ทธ์ธ' ๊ธฐ๋ฅ์์ ์ฌ์ฉํ ๋ก๊ทธ์ธ ์ ํ๊ณผ ํ๋๋ฅผ ์ ์ํฉ๋๋ค.\n */\n\n// '๊ฐํธ ๋ก๊ทธ์ธ' ๊ธฐ๋ฅ์์ ์ฌ์ฉํ ๋ก๊ทธ์ธ ์ ํ ๋ชฉ๋ก์
๋๋ค.\n// ์๋ก์ด ๋ก๊ทธ์ธ ์ ํ์ ์ถ๊ฐํ๋ ค๋ฉด ์ด ๋ฐฐ์ด์ ๊ฐ์ฒด๋ฅผ ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค.\nexport const loginTypes: LoginTypeConfig[] = [\n {\n id: 'fp',\n label: 'FP ๋ก๊ทธ์ธ',\n fields: [{ name: 'employeeId', label: '์ฌ๋ฒ', type: 'text', placeholder: '์ฌ๋ฒ์ ์
๋ ฅํ์ธ์' }]\n }\n];\n\n/**\n * ๋๋ฒ๊ทธ ํด์ ํ์๋ ๋ฉ๋ด ์์ดํ
๋ชฉ๋ก์
๋๋ค.\n * ์๋ก์ด ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๊ณ ์ฌ๊ธฐ์ ์ถ๊ฐํ์ฌ ๋ฉ๋ด์ ๋
ธ์ถ์ํฌ ์ ์์ต๋๋ค.\n *\n * @property {string} id - ๋ฉ๋ด์ ๊ณ ์ ์๋ณ์์
๋๋ค.\n * @property {string} label - ๋ฉ๋ด์ ํ์๋ ํ
์คํธ์
๋๋ค.\n * @property {React.ComponentType} component - ๋ฉ๋ด ํด๋ฆญ ์ ๋ ๋๋ง๋ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ์
๋๋ค.\n * @property {boolean} display - `true`์ผ ๊ฒฝ์ฐ ๋ฉ๋ด์ ํ์๋๊ณ , `false`์ผ ๊ฒฝ์ฐ ์จ๊ฒจ์ง๋๋ค. ๊ฐ๋ฐ ์ค์ธ ๊ธฐ๋ฅ์ ์จ๊ธธ ๋ ์ ์ฉํฉ๋๋ค.\n */\nexport const menuItems: (Omit<MenuItem, 'component'> & { component: React.ComponentType<any> })[] = [\n {\n id: 'network-log',\n label: '๋คํธ์ํฌ ๋ก๊ทธ',\n component: NetworkLog,\n display: true\n },\n {\n id: 'console-log',\n label: '์ฝ์ ๋ก๊ทธ ํ์ธ',\n component: ConsoleLogPanel,\n display: true\n },\n {\n id: 'local-storage',\n label: '๋ก์ปฌ ์คํ ๋ฆฌ์ง ๊ด๋ฆฌ',\n // StoragePanel์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ์ด๋ฏ๋ก, props๋ฅผ ํตํด ์ด๋ค ์คํ ๋ฆฌ์ง๋ฅผ ๋ค๋ฃฐ์ง ์ง์ ํฉ๋๋ค.\n component: (props) => <StoragePanel {...props} storageType=\"localStorage\" />,\n display: true\n },\n {\n id: 'cookie-management',\n label: '์ฟ ํค ๊ด๋ฆฌ',\n component: (props) => <StoragePanel {...props} storageType=\"cookie\" />,\n display: true\n },\n {\n id: 'quick-login',\n label: '๊ฐํธ ๋ก๊ทธ์ธ',\n component: LoginPanel,\n display: true // ์ค์ ํ์๋ DebugTool.tsx์์ onLogin prop ์กด์ฌ ์ฌ๋ถ์ ๋ฐ๋ผ ๊ฒฐ์ ๋ฉ๋๋ค.\n },\n {\n id: 'script-executor',\n label: '์คํฌ๋ฆฝํธ ์คํ',\n component: ScriptExecutorPanel,\n display: true\n },\n {\n id: 'page-navigation',\n label: 'ํ์ด์ง ์ ๋ณด',\n component: PageNavigationPanel,\n display: true\n }\n];\n","import { useState, useEffect } from 'react';\n\nimport { getEnvironmentFromHostname } from 'sales-frontend-utils';\n\nimport { EnvironmentInfo } from '../types';\n\n/**\n * ํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ ์คํ ํ๊ฒฝ(ํธ์คํธ ๊ธฐ์ค)์ ๊ฐ์งํ๋ ํ
์
๋๋ค.\n * @returns {EnvironmentInfo} ํ๊ฒฝ ์ ๋ณด ๊ฐ์ฒด (e.g., { env: 'local' })\n */\nexport const useEnvironment = (): EnvironmentInfo => {\n const [envInfo, setEnvInfo] = useState<EnvironmentInfo>({\n env: 'prd'\n });\n\n useEffect(() => {\n const { hostname } = window.location;\n setEnvInfo({ env: getEnvironmentFromHostname(hostname) });\n }, []);\n\n return envInfo;\n};\n","'use client';\nimport React, { useState, useEffect } from 'react';\n\nimport FloatingButton from './components/floating-button';\nimport MenuPanel from './components/menu-panel';\nimport { menuItems as defaultMenuItems } from './config';\nimport { initializeConsoleLogOverride, restoreConsoleLog } from './features/console-log/use-console-log';\nimport { useEnvironment } from './hooks/use-environment';\nimport { DebugToolServiceCode, Environment, MenuItem } from './types';\n\n/**\n * @file DebugTool์ ๋ฉ์ธ ์ปดํฌ๋ํธ ํ์ผ์
๋๋ค.\n * @description\n * - ํ๊ฒฝ์ ๋ฐ๋ผ ๋๋ฒ๊ทธ ํด์ ๋
ธ์ถ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.\n * - ํ๋กํ
๋ฒํผ๊ณผ ๋ฉ๋ด ํจ๋์ ์ํ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.\n * - ์ ํ๋ ๊ธฐ๋ฅ(Feature) ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํฉ๋๋ค.\n * - `onLogin`, `envOverride`, `menuItemsOverride` ๋ฑ์ props๋ฅผ ํตํด ์ธ๋ถ์์ ๋์์ ์ ์ดํ ์ ์์ต๋๋ค.\n */\n\n// onLogin ์ฝ๋ฐฑ์ optional prop์ผ๋ก ๋ฐ์ต๋๋ค.\ninterface DebugToolProps {\n /** ๊ฐํธ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ์ํ ์ฝ๋ฐฑ ํจ์. ์ด ํจ์๊ฐ ์ ๊ณต๋์ด์ผ '๊ฐํธ ๋ก๊ทธ์ธ' ๋ฉ๋ด๊ฐ ํ์ฑํ๋ฉ๋๋ค. */\n onLogin?: (loginType: string, data: Record<string, string>) => void;\n /** ํ์ฌ ํ๊ฒฝ์ ๊ฐ์ ๋ก ์ฌ์ ์ํฉ๋๋ค. 'prod' ํ๊ฒฝ์์๋ ๋๋ฒ๊ทธ ํด์ ํ
์คํธํ ๋ ์ ์ฉํฉ๋๋ค. */\n envOverride?: Environment;\n /** ๊ธฐ๋ณธ ๋ฉ๋ด ์ค์ ์ ์ฌ์ ์ํฉ๋๋ค. ๋์ ์ผ๋ก ๋ฉ๋ด๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ๋ณ๊ฒฝํ ๋ ์ฌ์ฉํฉ๋๋ค. */\n menuItemsOverride?: (Omit<MenuItem, 'component'> & { component: React.ComponentType<any> })[];\n serviceCode?: DebugToolServiceCode;\n}\n\nexport const DebugTool: React.FC<DebugToolProps> = ({\n onLogin,\n envOverride,\n menuItemsOverride,\n serviceCode = 'etc'\n}) => {\n // ๋ง์ดํธ ์ ์ฝ์ ์ค๋ฒ๋ผ์ด๋๋ฅผ ์ด๊ธฐํํ๊ณ ์ธ๋ง์ดํธ ์ ๋ณต์ํฉ๋๋ค.\n // ์ด๋ฅผ ํตํด '์ฝ์ ๋ก๊ทธ' ๊ธฐ๋ฅ์ด ํ์ด์ง์ ๋ชจ๋ ๋ก๊ทธ๋ฅผ ์์งํ ์ ์์ต๋๋ค.\n useEffect(() => {\n initializeConsoleLogOverride();\n\n return () => {\n restoreConsoleLog();\n };\n }, []); // ๋น ์์กด์ฑ ๋ฐฐ์ด์ ๋ง์ดํธ์ ์ธ๋ง์ดํธ ์ ํ ๋ฒ๋ง ์คํ๋๋๋ก ๋ณด์ฅํฉ๋๋ค.\n\n const environment = useEnvironment();\n // envOverride prop์ด ์์ผ๋ฉด ํ๊ฒฝ์ ๊ฐ์ ๋ก ์ค์ ํ๊ณ , ์์ผ๋ฉด ๊ฐ์ง๋ ํ๊ฒฝ์ ์ฌ์ฉํฉ๋๋ค.\n const env = envOverride || environment.env;\n\n // menuItemsOverride prop์ด ์์ผ๋ฉด ๋ฉ๋ด๋ฅผ ๊ฐ์ ๋ก ์ค์ ํ๊ณ , ์์ผ๋ฉด config ํ์ผ์ ๊ธฐ๋ณธ ๋ฉ๋ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.\n const menuItems = menuItemsOverride || defaultMenuItems;\n const [isMenuOpen, setMenuOpen] = useState(false);\n // ํ์ฌ ํ์ฑํ๋ ๊ธฐ๋ฅ ์ปดํฌ๋ํธ๋ฅผ ์ํ๋ก ๊ด๋ฆฌํฉ๋๋ค. null์ด๋ฉด ๋ฉ๋ด๊ฐ ๋ณด์
๋๋ค.\n const [activeFeature, setActiveFeature] = useState<React.ComponentType<any> | null>(null);\n\n // 'local', 'dev', 'stg' ํ๊ฒฝ์์๋ง ํด์ ๋ณด์ฌ์ค๋๋ค.\n const isVisible = ['local', 'dev', 'stg'].includes(env);\n\n // ๋ฉ๋ด ์์ดํ
์ ํด๋ฆญํ์ ๋ ํธ์ถ๋๋ ํธ๋ค๋ฌ์
๋๋ค.\n const handleMenuClick = (itemComponent: React.ComponentType<any>) => {\n setActiveFeature(() => itemComponent); // ํด๋ฆญ๋ ๊ธฐ๋ฅ์ ์ปดํฌ๋ํธ๋ฅผ ํ์ฑํํฉ๋๋ค.\n setMenuOpen(false); // ๋ฉ๋ด ํจ๋์ ๋ซ์ต๋๋ค.\n };\n\n // ๊ธฐ๋ฅ ํจ๋์ ๋ซ๊ธฐ ๋ฒํผ์ ๋๋ ์ ๋ ํธ์ถ๋๋ ํธ๋ค๋ฌ์
๋๋ค.\n const handleCloseFeature = () => {\n setActiveFeature(null); // ํ์ฑํ๋ ๊ธฐ๋ฅ ์ปดํฌ๋ํธ๋ฅผ null๋ก ๋ง๋ค์ด ๋ฉ๋ด๋ก ๋์๊ฐ๋๋ค.\n };\n\n // ํ์ฉ๋ ํ๊ฒฝ์ด ์๋๋ฉด ์๋ฌด๊ฒ๋ ๋ ๋๋งํ์ง ์์ต๋๋ค.\n if (!isVisible) {\n return null;\n }\n\n // ํ๋กํ
๋ฒํผ ํด๋ฆญ ์ ๋ฉ๋ด ํจ๋์ ์ด๋ฆผ/๋ซํ ์ํ๋ฅผ ํ ๊ธํฉ๋๋ค.\n const toggleMenu = () => {\n setMenuOpen((prev) => !prev);\n // ๋ฉ๋ด๊ฐ ์ด๋ฆด ๋, ์ด์ ์ ํ์ฑํ๋ ๊ธฐ๋ฅ์ด ์์๋ค๋ฉด ์ด๊ธฐํํฉ๋๋ค.\n if (!isMenuOpen) {\n setActiveFeature(null);\n }\n };\n\n // ์ค์ ํ๋ฉด์ ๋ณด์ฌ์ค ๋ฉ๋ด ์์ดํ
๋ชฉ๋ก์ ํํฐ๋งํฉ๋๋ค.\n const availableMenuItems = menuItems.filter(\n (item) =>\n item.display && // config์์ display๊ฐ true์ธ ํญ๋ชฉ๋ง ํํฐ๋งํฉ๋๋ค.\n // 'quick-login' ๊ธฐ๋ฅ์ onLogin prop์ด ์ ๊ณต๋ ๊ฒฝ์ฐ์๋ง ํ์ฑํํฉ๋๋ค.\n (item.id !== 'quick-login' || (item.id === 'quick-login' && onLogin))\n );\n\n // ํ์ฑํ๋ ๊ธฐ๋ฅ ์ปดํฌ๋ํธ๊ฐ ์์ผ๋ฉด ํด๋น ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํฉ๋๋ค.\n if (activeFeature) {\n const FeatureComponent = activeFeature;\n\n // ๋ชจ๋ ๊ธฐ๋ฅ ์ปดํฌ๋ํธ์ ๊ณตํต์ ์ผ๋ก onClose ํธ๋ค๋ฌ์ onLogin ์ฝ๋ฐฑ์ ์ ๋ฌํฉ๋๋ค.\n return <FeatureComponent onClose={handleCloseFeature} onLogin={onLogin} />;\n }\n\n // ํ์ฑํ๋ ๊ธฐ๋ฅ์ด ์์ผ๋ฉด ํ๋กํ
๋ฒํผ๊ณผ ๋ฉ๋ด ํจ๋(isMenuOpen์ด true์ผ ๊ฒฝ์ฐ)์ ๋ ๋๋งํฉ๋๋ค.\n return (\n <div\n style={{\n position: 'fixed',\n right: '20px',\n bottom: '20px',\n zIndex: 9999\n }}\n >\n <FloatingButton onClick={toggleMenu} />\n {isMenuOpen && (\n <MenuPanel\n menuItems={availableMenuItems}\n onMenuItemClick={handleMenuClick}\n onClose={() => setMenuOpen(false)}\n serviceCode={serviceCode}\n />\n )}\n </div>\n );\n};\n","import { useDebugStore } from 'sales-frontend-stores';\nimport { getEnvironmentFromHostname, isClient } from 'sales-frontend-utils';\n\nimport { isDebugByFilterName } from './debug-utils';\n\nimport type { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from 'axios';\n\n\n// ๋ก๊ทธ ์ต๋ ๊ฐฏ์\nconst MAX_LOGS = 20;\n\n/** debug-tool ์์ ์ฌ์ฉ๋ ๋ก๊ทธ ์ ์ฅ */\nexport function addRequestLog(config: InternalAxiosRequestConfig) {\n if (!isClient()) {\n return;\n }\n\n const env = getEnvironmentFromHostname(location.hostname);\n\n /**\n * ์ด์ํ๊ฒฝ์ด ์๋๋๋ง ์ ์ฅ\n */\n if (env !== 'prd') {\n const { addRequest, isHold, holdRequest, requests } = useDebugStore.getState();\n\n // ์ต๋ ๊ฐฏ์๋ฅผ ์ด๊ณผํ ๊ฒฝ์ฐ, ์ ์ผ ๋จผ์ ๋ค์ด์จ ๋ก๊ทธ๋ฅผ ์ญ์ ํ๋ค.\n if (requests.length >= MAX_LOGS) {\n\n // http-log๊ฐ ์ผ์ง์ง ์์์๋๋ ์ต๋ ๊ฐฏ์๋ฅผ ์ ํํ๋ค.\n if (!isDebugByFilterName('http-log')) {\n requests.shift();\n }\n\n }\n\n\n const startTime = Date.now();\n const requestInfo = {\n url: config.url || '',\n method: config.method || '',\n headers: config.headers,\n params: config.params,\n data: config.data,\n startTime\n };\n\n if (isHold) {\n return new Promise((resolver) => {\n holdRequest({ request: requestInfo, resolver });\n });\n } else {\n addRequest(requestInfo);\n }\n }\n}\n\n/** debug-tool ์์ ์ฌ์ฉ๋ ๋ก๊ทธ ์ ์ฅ */\nexport function addResponseLog(response: AxiosResponse) {\n if (!isClient()) {\n return;\n }\n\n const env = getEnvironmentFromHostname(location.hostname);\n\n /**\n * ์ด์ํ๊ฒฝ์ด ์๋๋๋ง ์ ์ฅ\n */\n if (env !== 'prd') {\n const { addResponse, isHold, holdResponse, responses } = useDebugStore.getState();\n\n // ์ต๋ ๊ฐฏ์๋ฅผ ์ด๊ณผํ ๊ฒฝ์ฐ, ์ ์ผ ๋จผ์ ๋ค์ด์จ ๋ก๊ทธ๋ฅผ ์ญ์ ํ๋ค.\n if (responses.length >= MAX_LOGS) {\n\n // http-log๊ฐ ์ผ์ง์ง ์์์๋๋ ์ต๋ ๊ฐฏ์๋ฅผ ์ ํํ๋ค.\n if (!isDebugByFilterName('http-log')) {\n responses.shift();\n }\n\n }\n\n const { config } = response;\n const responseInfo = {\n url: config.url || '',\n method: config.method || '',\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n data: response.data\n };\n\n if (isHold) {\n return new Promise((resolver) => {\n holdResponse({ response: responseInfo, resolver });\n });\n } else {\n addResponse(responseInfo);\n }\n }\n}\n\nexport function addErrorLog(error: AxiosError) {\n if (!isClient()) {\n return;\n }\n\n const env = getEnvironmentFromHostname(location.hostname);\n\n /**\n * ์ด์ํ๊ฒฝ์ด ์๋๋๋ง ์ ์ฅ\n */\n if (env !== 'prd') {\n const { addError, isHold, holdError, errors } = useDebugStore.getState();\n\n\n // ์ต๋ ๊ฐฏ์๋ฅผ ์ด๊ณผํ ๊ฒฝ์ฐ, ์ ์ผ ๋จผ์ ๋ค์ด์จ ๋ก๊ทธ๋ฅผ ์ญ์ ํ๋ค.\n if (errors.length >= MAX_LOGS) {\n\n // http-log๊ฐ ์ผ์ง์ง ์์์๋๋ ์ต๋ ๊ฐฏ์๋ฅผ ์ ํํ๋ค.\n if (!isDebugByFilterName('http-log')) {\n errors.shift();\n }\n }\n\n\n const { config } = error;\n const errorInfo = {\n url: config?.url || '',\n method: config?.method || '',\n message: error.message,\n config: error.config,\n response: error.response\n ? {\n url: error.response.config?.url || '',\n method: error.response.config?.method || '',\n status: error.response.status,\n statusText: error.response.statusText,\n headers: error.response.headers,\n data: error.response.data\n }\n : undefined\n };\n\n if (isHold) {\n return new Promise((resolver) => {\n holdError({ error: errorInfo, resolver });\n });\n } else {\n addError(errorInfo);\n }\n }\n}\n"]}
|